atomlist_add_tail:
   37|      4|{
   38|      4|	atomptr_t prevval = ATOMPTR_NULL;
  ------------------
  |  |   38|      4|#define ATOMPTR_NULL (0)
  ------------------
   39|      4|	atomptr_t i = atomptr_i(item);
   40|      4|	atomptr_t hint;
   41|      4|	struct atomlist_item *prevptr;
   42|      4|	_Atomic atomptr_t *prev;
   43|       |
   44|      4|	item->next = ATOMPTR_NULL;
  ------------------
  |  |   38|      4|#define ATOMPTR_NULL (0)
  ------------------
   45|       |
   46|      4|	atomic_fetch_add_explicit(&h->count, 1, memory_order_relaxed);
   47|       |
   48|       |	/* place new item into ->last
   49|       |	 * release: item writes completed;  acquire: DD barrier on hint
   50|       |	 */
   51|      4|	hint = atomic_exchange_explicit(&h->last, i, memory_order_acq_rel);
   52|       |
   53|      4|	while (1) {
  ------------------
  |  Branch (53:9): [True: 4, Folded]
  ------------------
   54|      4|		if (atomptr_p(hint) == NULL)
  ------------------
  |  Branch (54:7): [True: 4, False: 0]
  ------------------
   55|      4|			prev = &h->first;
   56|      0|		else
   57|      0|			prev = &atomlist_itemp(hint)->next;
  ------------------
  |  |  106|      0|#define atomlist_itemp(val) ((struct atomlist_item *)atomptr_p(val))
  ------------------
   58|       |
   59|      4|		do {
   60|      4|			prevval = atomic_load_explicit(prev,
   61|      4|					memory_order_consume);
   62|      4|			prevptr = atomlist_itemp(prevval);
  ------------------
  |  |  106|      4|#define atomlist_itemp(val) ((struct atomlist_item *)atomptr_p(val))
  ------------------
   63|      4|			if (prevptr == NULL)
  ------------------
  |  Branch (63:8): [True: 4, False: 0]
  ------------------
   64|      4|				break;
   65|       |
   66|      0|			prev = &prevptr->next;
   67|      0|		} while (prevptr);
  ------------------
  |  Branch (67:12): [True: 0, False: 0]
  ------------------
   68|       |
   69|       |		/* last item is being deleted - start over */
   70|      4|		if (atomptr_l(prevval)) {
  ------------------
  |  Branch (70:7): [True: 0, False: 4]
  ------------------
   71|      0|			hint = ATOMPTR_NULL;
  ------------------
  |  |   38|      0|#define ATOMPTR_NULL (0)
  ------------------
   72|      0|			continue;
   73|      0|		}
   74|       |
   75|       |		/* no barrier - item->next is NULL and was so in xchg above */
   76|      4|		if (!atomic_compare_exchange_strong_explicit(prev, &prevval, i,
  ------------------
  |  Branch (76:7): [True: 0, False: 4]
  ------------------
   77|      4|					memory_order_consume,
   78|      4|					memory_order_consume)) {
   79|      0|			hint = prevval;
   80|      0|			continue;
   81|      0|		}
   82|      4|		break;
   83|      4|	}
   84|      4|}

atomlist.c:atomptr_i:
   41|      4|{
   42|      4|	atomptr_t atomval = (atomptr_t)val;
   43|       |
   44|      4|	assert(!(atomval & ATOMPTR_LOCK));
  ------------------
  |  |   51|      4|	({                                                                     \
  |  |   52|      4|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|      4|			(used)) = {                                            \
  |  |   54|      4|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|      4|	{                                                                      \
  |  |  |  |  284|      4|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      4|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      4|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      4|		/* .func = */ func_,                                           \
  |  |  |  |  289|      4|	}                                                                      \
  |  |  ------------------
  |  |   55|      4|			.expr = #expr_,                                        \
  |  |   56|      4|		};                                                             \
  |  |   57|      4|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      4|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      4|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      4|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|      4|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 4]
  |  |  |  Branch (58:24): [True: 4, False: 0]
  |  |  ------------------
  |  |   59|      4|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|      4|	})
  ------------------
   45|      4|	return atomval;
   46|      4|}
atomlist.c:atomptr_p:
   48|      8|{
   49|       |	return (void *)(val & ATOMPTR_MASK);
  ------------------
  |  |   35|      8|#define ATOMPTR_MASK (UINTPTR_MAX - 3)
  ------------------
   50|      8|}
atomlist.c:atomptr_l:
   52|      4|{
   53|      4|	return (bool)(val & ATOMPTR_LOCK);
  ------------------
  |  |   36|      4|#define ATOMPTR_LOCK (1)
  ------------------
   54|      4|}
frrcu.c:rcu_threads_add_tail:
  131|      2|macro_inline void prefix ## _add_tail(struct prefix##_head *h, type *item)     \
  132|      2|{	atomlist_add_tail(&h->ah, &item->field.ai); }                          \
zlog.c:zlog_targets_add_tail:
  131|      2|macro_inline void prefix ## _add_tail(struct prefix##_head *h, type *item)     \
  132|      2|{	atomlist_add_tail(&h->ah, &item->field.ai); }                          \

bfd_client_sendmsg:
  258|      1|{
  259|      1|	struct stream *s;
  260|      1|	enum zclient_send_status ret;
  261|       |
  262|       |	/* Check socket. */
  263|      1|	if (!zclient || zclient->sock < 0) {
  ------------------
  |  Branch (263:6): [True: 0, False: 1]
  |  Branch (263:18): [True: 1, False: 0]
  ------------------
  264|      1|		if (bsglobal.debugging)
  ------------------
  |  Branch (264:7): [True: 0, False: 1]
  ------------------
  265|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  266|      1|				"%s: Can't send BFD client register, Zebra client not established",
  267|      1|				__func__);
  268|      1|		return;
  269|      1|	}
  270|       |
  271|      0|	s = zclient->obuf;
  272|      0|	stream_reset(s);
  273|      0|	zclient_create_header(s, command, vrf_id);
  274|       |
  275|      0|	stream_putl(s, getpid());
  276|       |
  277|      0|	stream_putw_at(s, 0, stream_get_endp(s));
  278|       |
  279|      0|	ret = zclient_send_message(zclient);
  280|       |
  281|      0|	if (ret == ZCLIENT_SEND_FAILURE) {
  ------------------
  |  Branch (281:6): [True: 0, False: 0]
  ------------------
  282|      0|		if (bsglobal.debugging)
  ------------------
  |  Branch (282:7): [True: 0, False: 0]
  ------------------
  283|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  284|      0|				"%s:  %ld: zclient_send_message() failed",
  285|      0|				__func__, (long)getpid());
  286|      0|		return;
  287|      0|	}
  288|       |
  289|      0|	return;
  290|      0|}
bfd_sess_free:
  548|    245|{
  549|    245|	if (*bsp == NULL)
  ------------------
  |  Branch (549:6): [True: 245, False: 0]
  ------------------
  550|    245|		return;
  551|       |
  552|       |	/* Remove any installed session. */
  553|      0|	_bfd_sess_remove(*bsp);
  554|       |
  555|       |	/* Remove from global list. */
  556|      0|	TAILQ_REMOVE(&bsglobal.bsplist, (*bsp), entry);
  ------------------
  |  |  623|      0|	do {                                                                   \
  |  |  624|      0|		QMD_SAVELINK(oldnext, (elm)->field.tqe_next);                  \
  |  |  625|      0|		QMD_SAVELINK(oldprev, (elm)->field.tqe_prev);                  \
  |  |  626|      0|		QMD_TAILQ_CHECK_NEXT(elm, field);                              \
  |  |  627|      0|		QMD_TAILQ_CHECK_PREV(elm, field);                              \
  |  |  628|      0|		if ((TAILQ_NEXT((elm), field)) != NULL)                        \
  |  |  ------------------
  |  |  |  |  617|      0|#define	TAILQ_NEXT(elm, field) ((elm)->field.tqe_next)
  |  |  ------------------
  |  |  |  Branch (628:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  629|      0|			TAILQ_NEXT((elm), field)->field.tqe_prev =             \
  |  |  ------------------
  |  |  |  |  617|      0|#define	TAILQ_NEXT(elm, field) ((elm)->field.tqe_next)
  |  |  ------------------
  |  |  630|      0|				(elm)->field.tqe_prev;                         \
  |  |  631|      0|		else {                                                         \
  |  |  632|      0|			(head)->tqh_last = (elm)->field.tqe_prev;              \
  |  |  633|      0|			QMD_TRACE_HEAD(head);                                  \
  |  |  634|      0|		}                                                              \
  |  |  635|      0|		*(elm)->field.tqe_prev = TAILQ_NEXT((elm), field);             \
  |  |  ------------------
  |  |  |  |  617|      0|#define	TAILQ_NEXT(elm, field) ((elm)->field.tqe_next)
  |  |  ------------------
  |  |  636|      0|		TRASHIT(*oldnext);                                             \
  |  |  637|      0|		TRASHIT(*oldprev);                                             \
  |  |  638|      0|		QMD_TRACE_ELEM(&(elm)->field);                                 \
  |  |  639|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (639:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  557|       |
  558|      0|	bfd_source_cache_put(*bsp);
  559|       |
  560|       |	/* Free the memory and point to NULL. */
  561|       |	XFREE(MTYPE_BFD_INFO, (*bsp));
  ------------------
  |  |  170|      0|	do {                                                                   \
  |  |  171|      0|		qfree(mtype, ptr);                                             \
  |  |  172|      0|		ptr = NULL;                                                    \
  |  |  173|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  562|      0|}
bfd_protocol_integration_init:
 1043|      1|{
 1044|       |	/* Initialize data structure. */
 1045|      1|	TAILQ_INIT(&bsglobal.bsplist);
  ------------------
  |  |  555|      1|	do {                                                                   \
  |  |  556|      1|		TAILQ_FIRST((head)) = NULL;                                    \
  |  |  ------------------
  |  |  |  |  535|      1|#define	TAILQ_FIRST(head)	((head)->tqh_first)
  |  |  ------------------
  |  |  557|      1|		(head)->tqh_last = &TAILQ_FIRST((head));                       \
  |  |  ------------------
  |  |  |  |  535|      1|#define	TAILQ_FIRST(head)	((head)->tqh_first)
  |  |  ------------------
  |  |  558|      1|		QMD_TRACE_HEAD(head);                                          \
  |  |  559|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (559:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1046|      1|	SLIST_INIT(&bsglobal.source_list);
  ------------------
  |  |  159|      1|	do {                                                                   \
  |  |  160|      1|		SLIST_FIRST((head)) = NULL;                                    \
  |  |  ------------------
  |  |  |  |  144|      1|#define	SLIST_FIRST(head)	((head)->slh_first)
  |  |  ------------------
  |  |  161|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (161:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1047|       |
 1048|       |	/* Copy pointers. */
 1049|      1|	bsglobal.zc = zc;
 1050|      1|	bsglobal.tm = tm;
 1051|       |
 1052|       |	/* Enable BFD callbacks. */
 1053|      1|	zc->bfd_integration = true;
 1054|       |
 1055|       |	/* Send the client registration */
 1056|      1|	bfd_client_sendmsg(zc, ZEBRA_BFD_CLIENT_REGISTER, VRF_DEFAULT);
  ------------------
  |  |  254|      1|#define VRF_DEFAULT 0
  ------------------
 1057|       |
 1058|      1|	hook_register(frr_fini, bfd_protocol_integration_finish);
  ------------------
  |  |  143|      1|	_hook_reg_svar(&_hook_##hookname, _hook_typecheck_##hookname(func),    \
  |  |  ------------------
  |  |  |  |  136|      1|	do {                                                                   \
  |  |  |  |  137|      1|		static struct hookent stack_hookent = {};                      \
  |  |  |  |  138|      1|		_hook_register(hook, &stack_hookent, funcptr, arg, has_arg,    \
  |  |  |  |  139|      1|			       module, funcname, prio);                        \
  |  |  |  |  140|      1|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (140:11): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  144|      1|		       NULL, false, THIS_MODULE, #func, HOOK_DEFAULT_PRIORITY)
  ------------------
 1059|      1|}

buffer_new:
   54|      2|{
   55|      2|	struct buffer *b;
   56|       |
   57|      2|	b = XCALLOC(MTYPE_BUFFER, sizeof(struct buffer));
  ------------------
  |  |  165|      2|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
   58|       |
   59|      2|	if (size)
  ------------------
  |  Branch (59:6): [True: 0, False: 2]
  ------------------
   60|      0|		b->size = size;
   61|      2|	else {
   62|      2|		static size_t default_size;
   63|      2|		if (!default_size) {
  ------------------
  |  Branch (63:7): [True: 1, False: 1]
  ------------------
   64|      1|			long pgsz = sysconf(_SC_PAGESIZE);
   65|      1|			default_size = ((((BUFFER_SIZE_DEFAULT - 1) / pgsz) + 1)
  ------------------
  |  |   48|      1|#define BUFFER_SIZE_DEFAULT		4096
  ------------------
   66|      1|					* pgsz);
   67|      1|		}
   68|      2|		b->size = default_size;
   69|      2|	}
   70|       |
   71|      2|	return b;
   72|      2|}

in_cksumv:
   21|  2.52k|{
   22|  2.52k|	const struct iovec *iov_end;
   23|  2.52k|	uint32_t sum = 0;
   24|  2.52k|	register unsigned short answer; /* assumes unsigned short == 16 bits */
   25|       |
   26|  2.52k|	union {
   27|  2.52k|		uint8_t bytes[2];
   28|  2.52k|		uint16_t word;
   29|  2.52k|	} wordbuf;
   30|  2.52k|	bool have_oddbyte = false;
   31|       |
   32|       |	/*
   33|       |	 * Our algorithm is simple, using a 32-bit accumulator (sum),
   34|       |	 * we add sequential 16-bit words to it, and at the end, fold back
   35|       |	 * all the carry bits from the top 16 bits into the lower 16 bits.
   36|       |	 */
   37|       |
   38|  5.05k|	for (iov_end = iov + iov_len; iov < iov_end; iov++) {
  ------------------
  |  Branch (38:32): [True: 2.52k, False: 2.52k]
  ------------------
   39|  2.52k|		const uint8_t *ptr, *end;
   40|       |
   41|  2.52k|		ptr = (const uint8_t *)iov->iov_base;
   42|  2.52k|		end = ptr + iov->iov_len;
   43|  2.52k|		if (ptr == end)
  ------------------
  |  Branch (43:7): [True: 0, False: 2.52k]
  ------------------
   44|      0|			continue;
   45|       |
   46|  2.52k|		if (have_oddbyte) {
  ------------------
  |  Branch (46:7): [True: 0, False: 2.52k]
  ------------------
   47|      0|			have_oddbyte = false;
   48|      0|			wordbuf.bytes[1] = *ptr++;
   49|       |
   50|      0|			add_carry(sum, wordbuf.word);
  ------------------
  |  |   13|      0|	do {                                                                   \
  |  |   14|      0|		typeof(dst) _add = (add);                                      \
  |  |   15|      0|		dst += _add;                                                   \
  |  |   16|      0|		if (dst < _add)                                                \
  |  |  ------------------
  |  |  |  Branch (16:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   17|      0|			dst++;                                                 \
  |  |   18|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (18:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
   51|      0|		}
   52|       |
   53|   308k|		while (ptr + 8 <= end) {
  ------------------
  |  Branch (53:10): [True: 305k, False: 2.52k]
  ------------------
   54|   305k|			add_carry(sum, *(const uint32_t *)(ptr + 0));
  ------------------
  |  |   13|   305k|	do {                                                                   \
  |  |   14|   305k|		typeof(dst) _add = (add);                                      \
  |  |   15|   305k|		dst += _add;                                                   \
  |  |   16|   305k|		if (dst < _add)                                                \
  |  |  ------------------
  |  |  |  Branch (16:7): [True: 94.5k, False: 211k]
  |  |  ------------------
  |  |   17|   305k|			dst++;                                                 \
  |  |   18|   305k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (18:11): [Folded, False: 305k]
  |  |  ------------------
  ------------------
   55|   305k|			add_carry(sum, *(const uint32_t *)(ptr + 4));
  ------------------
  |  |   13|   305k|	do {                                                                   \
  |  |   14|   305k|		typeof(dst) _add = (add);                                      \
  |  |   15|   305k|		dst += _add;                                                   \
  |  |   16|   305k|		if (dst < _add)                                                \
  |  |  ------------------
  |  |  |  Branch (16:7): [True: 79.0k, False: 226k]
  |  |  ------------------
  |  |   17|   305k|			dst++;                                                 \
  |  |   18|   305k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (18:11): [Folded, False: 305k]
  |  |  ------------------
  ------------------
   56|   305k|			ptr += 8;
   57|   305k|		}
   58|       |
   59|  4.90k|		while (ptr + 2 <= end) {
  ------------------
  |  Branch (59:10): [True: 2.37k, False: 2.52k]
  ------------------
   60|  2.37k|			add_carry(sum, *(const uint16_t *)ptr);
  ------------------
  |  |   13|  2.37k|	do {                                                                   \
  |  |   14|  2.37k|		typeof(dst) _add = (add);                                      \
  |  |   15|  2.37k|		dst += _add;                                                   \
  |  |   16|  2.37k|		if (dst < _add)                                                \
  |  |  ------------------
  |  |  |  Branch (16:7): [True: 14, False: 2.36k]
  |  |  ------------------
  |  |   17|  2.37k|			dst++;                                                 \
  |  |   18|  2.37k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (18:11): [Folded, False: 2.37k]
  |  |  ------------------
  ------------------
   61|  2.37k|			ptr += 2;
   62|  2.37k|		}
   63|       |
   64|  2.52k|		if (ptr + 1 <= end) {
  ------------------
  |  Branch (64:7): [True: 0, False: 2.52k]
  ------------------
   65|      0|			wordbuf.bytes[0] = *ptr++;
   66|      0|			have_oddbyte = true;
   67|      0|		}
   68|  2.52k|	}
   69|       |
   70|       |	/* mop up an odd byte, if necessary */
   71|  2.52k|	if (have_oddbyte) {
  ------------------
  |  Branch (71:6): [True: 0, False: 2.52k]
  ------------------
   72|      0|		wordbuf.bytes[1] = 0;
   73|      0|		add_carry(sum, wordbuf.word);
  ------------------
  |  |   13|      0|	do {                                                                   \
  |  |   14|      0|		typeof(dst) _add = (add);                                      \
  |  |   15|      0|		dst += _add;                                                   \
  |  |   16|      0|		if (dst < _add)                                                \
  |  |  ------------------
  |  |  |  Branch (16:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   17|      0|			dst++;                                                 \
  |  |   18|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (18:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
   74|      0|	}
   75|       |
   76|       |	/*
   77|       |	 * Add back carry outs from top 16 bits to low 16 bits.
   78|       |	 */
   79|       |
   80|  2.52k|	sum = (sum >> 16) + (sum & 0xffff); /* add high-16 to low-16 */
   81|  2.52k|	sum += (sum >> 16);		    /* add carry */
   82|       |	/* ones-complement, then truncate to 16 bits */
   83|  2.52k|	answer = (unsigned short)~sum;
   84|  2.52k|	return (answer);
   85|  2.52k|}
fletcher_checksum:
   97|  49.6k|{
   98|  49.6k|	uint8_t *p;
   99|  49.6k|	int x, y, c0, c1;
  100|  49.6k|	uint16_t checksum = 0;
  101|  49.6k|	uint16_t *csum;
  102|  49.6k|	size_t partial_len, i, left = len;
  103|       |
  104|  49.6k|	if (offset != FLETCHER_CHECKSUM_VALIDATE)
  ------------------
  |  |   66|  49.6k|#define FLETCHER_CHECKSUM_VALIDATE 0xffff
  ------------------
  |  Branch (104:6): [True: 285, False: 49.4k]
  ------------------
  105|       |	/* Zero the csum in the packet. */
  106|    285|	{
  107|    285|		assert(offset
  ------------------
  |  |   51|    285|	({                                                                     \
  |  |   52|    285|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|    285|			(used)) = {                                            \
  |  |   54|    285|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|    285|	{                                                                      \
  |  |  |  |  284|    285|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|    285|		/* .type = */ (type_),                                         \
  |  |  |  |  286|    285|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|    285|		/* .func = */ func_,                                           \
  |  |  |  |  289|    285|	}                                                                      \
  |  |  ------------------
  |  |   55|    285|			.expr = #expr_,                                        \
  |  |   56|    285|		};                                                             \
  |  |   57|    285|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|    285|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|    285|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|    285|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|    285|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 285]
  |  |  |  Branch (58:24): [True: 285, False: 0]
  |  |  ------------------
  |  |   59|    285|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|    285|	})
  ------------------
  108|    285|		       < (len - 1)); /* account for two bytes of checksum */
  109|    285|		csum = (uint16_t *)(buffer + offset);
  110|    285|		*(csum) = 0;
  111|    285|	}
  112|       |
  113|  49.6k|	p = buffer;
  114|  49.6k|	c0 = 0;
  115|  49.6k|	c1 = 0;
  116|       |
  117|  99.4k|	while (left != 0) {
  ------------------
  |  Branch (117:9): [True: 49.7k, False: 49.6k]
  ------------------
  118|  49.7k|		partial_len = MIN(left, MODX);
  ------------------
  |  Branch (118:17): [True: 49.6k, False: 47]
  ------------------
  119|       |
  120|  1.81M|		for (i = 0; i < partial_len; i++) {
  ------------------
  |  Branch (120:15): [True: 1.76M, False: 49.7k]
  ------------------
  121|  1.76M|			c0 = c0 + *(p++);
  122|  1.76M|			c1 += c0;
  123|  1.76M|		}
  124|       |
  125|  49.7k|		c0 = c0 % 255;
  126|  49.7k|		c1 = c1 % 255;
  127|       |
  128|  49.7k|		left -= partial_len;
  129|  49.7k|	}
  130|       |
  131|       |	/* The cast is important, to ensure the mod is taken as a signed value.
  132|       |	 */
  133|  49.6k|	x = (int)((len - offset - 1) * c0 - c1) % 255;
  134|       |
  135|  49.6k|	if (x <= 0)
  ------------------
  |  Branch (135:6): [True: 49.5k, False: 113]
  ------------------
  136|  49.5k|		x += 255;
  137|  49.6k|	y = 510 - c0 - x;
  138|  49.6k|	if (y > 255)
  ------------------
  |  Branch (138:6): [True: 15.5k, False: 34.1k]
  ------------------
  139|  15.5k|		y -= 255;
  140|       |
  141|  49.6k|	if (offset == FLETCHER_CHECKSUM_VALIDATE) {
  ------------------
  |  |   66|  49.6k|#define FLETCHER_CHECKSUM_VALIDATE 0xffff
  ------------------
  |  Branch (141:6): [True: 49.4k, False: 285]
  ------------------
  142|  49.4k|		checksum = (c1 << 8) + c0;
  143|  49.4k|	} else {
  144|       |		/*
  145|       |		 * Now we write this to the packet.
  146|       |		 * We could skip this step too, since the checksum returned
  147|       |		 * would
  148|       |		 * be stored into the checksum field by the caller.
  149|       |		 */
  150|    285|		buffer[offset] = x;
  151|    285|		buffer[offset + 1] = y;
  152|       |
  153|       |		/* Take care of the endian issue */
  154|    285|		checksum = htons((x << 8) | (y & 0xFF));
  155|    285|	}
  156|       |
  157|  49.6k|	return checksum;
  158|  49.6k|}

ospf_packet.c:in_cksum:
   34|  2.52k|{
   35|  2.52k|	struct iovec iov[1];
   36|       |
   37|  2.52k|	iov[0].iov_base = (void *)data;
   38|  2.52k|	iov[0].iov_len = nbytes;
   39|  2.52k|	return in_cksumv(iov, array_size(iov));
  ------------------
  |  |  311|  2.52k|#define array_size(ar) (sizeof(ar) / sizeof(ar[0]))
  ------------------
   40|  2.52k|}

install_node:
  254|     16|{
  255|     16|#define CMD_HASH_STR_SIZE 256
  256|     16|	char hash_name[CMD_HASH_STR_SIZE];
  257|       |
  258|     16|	vector_set_index(cmdvec, node->node, node);
  259|     16|	node->cmdgraph = graph_new();
  260|     16|	node->cmd_vector = vector_init(VECTOR_MIN_SIZE);
  ------------------
  |  |   25|     16|#define VECTOR_MIN_SIZE 1
  ------------------
  261|       |	// add start node
  262|     16|	struct cmd_token *token = cmd_token_new(START_TKN, 0, NULL, NULL);
  263|     16|	graph_new_node(node->cmdgraph, token,
  264|     16|		       (void (*)(void *)) & cmd_token_del);
  265|       |
  266|     16|	snprintf(hash_name, sizeof(hash_name), "Command Hash: %s", node->name);
  267|     16|	node->cmd_hash =
  268|     16|		hash_create_size(16, cmd_hash_key, cmd_hash_cmp, hash_name);
  269|     16|}
_install_element:
  287|    377|{
  288|    377|#ifdef FUZZING
  289|    377|	return;
  290|      0|#endif
  291|      0|	struct cmd_node *cnode;
  292|       |
  293|       |	/* cmd_init hasn't been called */
  294|      0|	if (!cmdvec) {
  ------------------
  |  Branch (294:6): [True: 0, False: 0]
  ------------------
  295|      0|		fprintf(stderr, "%s called before cmd_init, breakage likely\n",
  296|      0|			__func__);
  297|      0|		return;
  298|      0|	}
  299|       |
  300|      0|	cnode = vector_lookup(cmdvec, ntype);
  301|       |
  302|      0|	if (cnode == NULL) {
  ------------------
  |  Branch (302:6): [True: 0, False: 0]
  ------------------
  303|      0|		fprintf(stderr,
  304|      0|			"%s[%s]:\n"
  305|      0|			"\tnode %d does not exist.\n"
  306|      0|			"\tplease call install_node() before install_element()\n",
  307|      0|			cmd->name, cmd->string, ntype);
  308|      0|		exit(EXIT_FAILURE);
  309|      0|	}
  310|       |
  311|      0|	if (hash_lookup(cnode->cmd_hash, (void *)cmd) != NULL) {
  ------------------
  |  Branch (311:6): [True: 0, False: 0]
  ------------------
  312|      0|		fprintf(stderr,
  313|      0|			"%s[%s]:\n"
  314|      0|			"\tnode %d (%s) already has this command installed.\n"
  315|      0|			"\tduplicate install_element call?\n",
  316|      0|			cmd->name, cmd->string, ntype, cnode->name);
  317|      0|		return;
  318|      0|	}
  319|       |
  320|      0|	(void)hash_get(cnode->cmd_hash, (void *)cmd, hash_alloc_intern);
  321|       |
  322|      0|	if (cnode->graph_built || !defer_cli_tree) {
  ------------------
  |  Branch (322:6): [True: 0, False: 0]
  |  Branch (322:28): [True: 0, False: 0]
  ------------------
  323|      0|		struct graph *graph = graph_new();
  324|      0|		struct cmd_token *token =
  325|      0|			cmd_token_new(START_TKN, 0, NULL, NULL);
  326|      0|		graph_new_node(graph, token,
  327|      0|			       (void (*)(void *)) & cmd_token_del);
  328|       |
  329|      0|		cmd_graph_parse(graph, cmd);
  330|      0|		cmd_graph_names(graph);
  331|      0|		cmd_graph_merge(cnode->cmdgraph, graph, +1);
  332|      0|		graph_delete_graph(graph);
  333|       |
  334|      0|		cnode->graph_built = true;
  335|      0|	}
  336|       |
  337|      0|	vector_set(cnode->cmd_vector, (void *)cmd);
  338|       |
  339|      0|	if (ntype == VIEW_NODE)
  ------------------
  |  Branch (339:6): [True: 0, False: 0]
  ------------------
  340|      0|		_install_element(ENABLE_NODE, cmd);
  341|      0|}
cmd_variable_handler_register:
  765|      5|{
  766|      5|	if (!varhandlers)
  ------------------
  |  Branch (766:6): [True: 0, False: 5]
  ------------------
  767|      0|		return;
  768|       |
  769|     18|	for (; cvh->completions; cvh++)
  ------------------
  |  Branch (769:9): [True: 13, False: 5]
  ------------------
  770|     13|		listnode_add(varhandlers, (void *)cvh);
  771|      5|}
cmd_banner_motd_line:
 2244|      1|{
 2245|      1|	XFREE(MTYPE_HOST, host.motd);
  ------------------
  |  |  170|      1|	do {                                                                   \
  |  |  171|      1|		qfree(mtype, ptr);                                             \
  |  |  172|      1|		ptr = NULL;                                                    \
  |  |  173|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2246|      1|	host.motd = XSTRDUP(MTYPE_HOST, line);
  ------------------
  |  |  167|      1|#define XSTRDUP(mtype, str)		qstrdup(mtype, str)
  ------------------
 2247|      1|}
install_default:
 2466|      4|{
 2467|      4|	_install_element(node, &config_exit_cmd);
 2468|      4|	_install_element(node, &config_quit_cmd);
 2469|      4|	_install_element(node, &config_end_cmd);
 2470|      4|	_install_element(node, &config_help_cmd);
 2471|      4|	_install_element(node, &config_list_cmd);
 2472|      4|	_install_element(node, &show_cli_graph_cmd);
 2473|      4|	_install_element(node, &find_cmd);
 2474|       |
 2475|      4|	_install_element(node, &config_write_cmd);
 2476|      4|	_install_element(node, &show_running_config_cmd);
 2477|       |
 2478|      4|	_install_element(node, &autocomplete_cmd);
 2479|       |
 2480|      4|	nb_cli_install_default(node);
 2481|      4|}
cmd_init:
 2489|      1|{
 2490|      1|	struct utsname names;
 2491|       |
 2492|      1|	uname(&names);
 2493|      1|	qobj_init();
 2494|       |
 2495|       |	/* register command preprocessors */
 2496|      1|	hook_register(cmd_execute, handle_pipe_action);
  ------------------
  |  |  143|      1|	_hook_reg_svar(&_hook_##hookname, _hook_typecheck_##hookname(func),    \
  |  |  ------------------
  |  |  |  |  136|      1|	do {                                                                   \
  |  |  |  |  137|      1|		static struct hookent stack_hookent = {};                      \
  |  |  |  |  138|      1|		_hook_register(hook, &stack_hookent, funcptr, arg, has_arg,    \
  |  |  |  |  139|      1|			       module, funcname, prio);                        \
  |  |  |  |  140|      1|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (140:11): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  144|      1|		       NULL, false, THIS_MODULE, #func, HOOK_DEFAULT_PRIORITY)
  ------------------
 2497|      1|	hook_register(cmd_execute_done, handle_pipe_action_done);
  ------------------
  |  |  143|      1|	_hook_reg_svar(&_hook_##hookname, _hook_typecheck_##hookname(func),    \
  |  |  ------------------
  |  |  |  |  136|      1|	do {                                                                   \
  |  |  |  |  137|      1|		static struct hookent stack_hookent = {};                      \
  |  |  |  |  138|      1|		_hook_register(hook, &stack_hookent, funcptr, arg, has_arg,    \
  |  |  |  |  139|      1|			       module, funcname, prio);                        \
  |  |  |  |  140|      1|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (140:11): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  144|      1|		       NULL, false, THIS_MODULE, #func, HOOK_DEFAULT_PRIORITY)
  ------------------
 2498|       |
 2499|      1|	varhandlers = list_new();
 2500|       |
 2501|       |	/* Allocate initial top vector of commands. */
 2502|      1|	cmdvec = vector_init(VECTOR_MIN_SIZE);
  ------------------
  |  |   25|      1|#define VECTOR_MIN_SIZE 1
  ------------------
 2503|       |
 2504|       |	/* Default host value settings. */
 2505|      1|	host.name = XSTRDUP(MTYPE_HOST, names.nodename);
  ------------------
  |  |  167|      1|#define XSTRDUP(mtype, str)		qstrdup(mtype, str)
  ------------------
 2506|      1|	host.system = XSTRDUP(MTYPE_HOST, names.sysname);
  ------------------
  |  |  167|      1|#define XSTRDUP(mtype, str)		qstrdup(mtype, str)
  ------------------
 2507|      1|	host.release = XSTRDUP(MTYPE_HOST, names.release);
  ------------------
  |  |  167|      1|#define XSTRDUP(mtype, str)		qstrdup(mtype, str)
  ------------------
 2508|      1|	host.version = XSTRDUP(MTYPE_HOST, names.version);
  ------------------
  |  |  167|      1|#define XSTRDUP(mtype, str)		qstrdup(mtype, str)
  ------------------
 2509|       |
 2510|      1|#ifdef HAVE_STRUCT_UTSNAME_DOMAINNAME
 2511|      1|	if ((strcmp(names.domainname, "(none)") == 0))
  ------------------
  |  Branch (2511:6): [True: 1, False: 0]
  ------------------
 2512|      1|		host.domainname = NULL;
 2513|      0|	else
 2514|      0|		host.domainname = XSTRDUP(MTYPE_HOST, names.domainname);
  ------------------
  |  |  167|      0|#define XSTRDUP(mtype, str)		qstrdup(mtype, str)
  ------------------
 2515|       |#else
 2516|       |	host.domainname = NULL;
 2517|       |#endif
 2518|      1|	host.password = NULL;
 2519|      1|	host.enable = NULL;
 2520|      1|	host.config = NULL;
 2521|      1|	host.noconfig = (terminal < 0);
 2522|      1|	host.lines = -1;
 2523|      1|	cmd_banner_motd_line(FRR_DEFAULT_MOTD);
  ------------------
  |  |   38|      1|	"\n" \
  |  |   39|      1|	"Hello, this is " FRR_FULL_NAME " (version " FRR_VERSION ").\n" \
  |  |   40|      1|	FRR_COPYRIGHT "\n" \
  |  |   41|      1|	GIT_INFO "\n"
  ------------------
 2524|      1|	host.motdfile = NULL;
 2525|      1|	host.allow_reserved_ranges = false;
 2526|       |
 2527|       |	/* Install top nodes. */
 2528|      1|	install_node(&view_node);
 2529|      1|	install_node(&enable_node);
 2530|      1|	install_node(&auth_node);
 2531|      1|	install_node(&auth_enable_node);
 2532|      1|	install_node(&config_node);
 2533|       |
 2534|       |	/* Each node's basic commands. */
 2535|      1|	install_element(VIEW_NODE, &show_version_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2536|      1|	install_element(ENABLE_NODE, &show_startup_config_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2537|       |
 2538|      1|	if (terminal) {
  ------------------
  |  Branch (2538:6): [True: 1, False: 0]
  ------------------
 2539|      1|		install_element(ENABLE_NODE, &debug_memstats_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2540|       |
 2541|      1|		install_element(VIEW_NODE, &config_list_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2542|      1|		install_element(VIEW_NODE, &config_exit_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2543|      1|		install_element(VIEW_NODE, &config_quit_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2544|      1|		install_element(VIEW_NODE, &config_help_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2545|      1|		install_element(VIEW_NODE, &config_enable_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2546|      1|		install_element(VIEW_NODE, &config_terminal_length_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2547|      1|		install_element(VIEW_NODE, &config_terminal_no_length_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2548|      1|		install_element(VIEW_NODE, &show_commandtree_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2549|      1|		install_element(VIEW_NODE, &echo_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2550|      1|		install_element(VIEW_NODE, &autocomplete_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2551|      1|		install_element(VIEW_NODE, &find_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2552|       |#if defined(DEV_BUILD) && defined(HAVE_SCRIPTING)
 2553|       |		install_element(VIEW_NODE, &script_cmd);
 2554|       |#endif
 2555|       |
 2556|       |
 2557|      1|		install_element(ENABLE_NODE, &config_end_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2558|      1|		install_element(ENABLE_NODE, &config_disable_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2559|      1|		install_element(ENABLE_NODE, &config_terminal_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2560|      1|		install_element(ENABLE_NODE, &copy_runningconf_startupconf_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2561|      1|		install_element(ENABLE_NODE, &config_write_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2562|      1|		install_element(ENABLE_NODE, &show_running_config_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2563|      1|		install_element(ENABLE_NODE, &config_logmsg_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2564|       |
 2565|      1|		install_default(CONFIG_NODE);
 2566|       |
 2567|      1|		event_cmd_init();
 2568|      1|		workqueue_cmd_init();
 2569|      1|		hash_cmd_init();
 2570|      1|	}
 2571|       |
 2572|      1|	install_element(CONFIG_NODE, &hostname_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2573|      1|	install_element(CONFIG_NODE, &no_hostname_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2574|      1|	install_element(CONFIG_NODE, &domainname_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2575|      1|	install_element(CONFIG_NODE, &no_domainname_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2576|       |
 2577|      1|	if (terminal > 0) {
  ------------------
  |  Branch (2577:6): [True: 1, False: 0]
  ------------------
 2578|      1|		full_cli = true;
 2579|       |
 2580|      1|		install_element(CONFIG_NODE, &debug_memstats_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2581|       |
 2582|      1|		install_element(CONFIG_NODE, &password_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2583|      1|		install_element(CONFIG_NODE, &no_password_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2584|      1|		install_element(CONFIG_NODE, &enable_password_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2585|      1|		install_element(CONFIG_NODE, &no_enable_password_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2586|       |
 2587|      1|		install_element(CONFIG_NODE, &service_password_encrypt_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2588|      1|		install_element(CONFIG_NODE, &no_service_password_encrypt_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2589|      1|		install_element(CONFIG_NODE, &banner_motd_default_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2590|      1|		install_element(CONFIG_NODE, &banner_motd_file_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2591|      1|		install_element(CONFIG_NODE, &banner_motd_line_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2592|      1|		install_element(CONFIG_NODE, &no_banner_motd_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2593|      1|		install_element(CONFIG_NODE, &service_terminal_length_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2594|      1|		install_element(CONFIG_NODE, &no_service_terminal_length_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2595|      1|		install_element(CONFIG_NODE, &allow_reserved_ranges_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2596|      1|		install_element(CONFIG_NODE, &no_allow_reserved_ranges_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2597|       |
 2598|      1|		log_cmd_init();
 2599|      1|		vrf_install_commands();
 2600|      1|	}
 2601|       |
 2602|       |#ifdef DEV_BUILD
 2603|       |	grammar_sandbox_init();
 2604|       |#endif
 2605|      1|}

cmd_token_new:
   24|     16|{
   25|     16|	struct cmd_token *token =
   26|     16|		XCALLOC(MTYPE_CMD_TOKENS, sizeof(struct cmd_token));
  ------------------
  |  |  165|     16|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
   27|     16|	token->type = type;
   28|     16|	token->attr = attr;
   29|     16|	token->text = text ? XSTRDUP(MTYPE_CMD_TEXT, text) : NULL;
  ------------------
  |  |  167|      0|#define XSTRDUP(mtype, str)		qstrdup(mtype, str)
  ------------------
  |  Branch (29:16): [True: 0, False: 16]
  ------------------
   30|     16|	token->desc = desc ? XSTRDUP(MTYPE_CMD_DESC, desc) : NULL;
  ------------------
  |  |  167|      0|#define XSTRDUP(mtype, str)		qstrdup(mtype, str)
  ------------------
  |  Branch (30:16): [True: 0, False: 16]
  ------------------
   31|     16|	token->refcnt = 1;
   32|     16|	token->arg = NULL;
   33|     16|	token->allowrepeat = false;
   34|     16|	token->varname = NULL;
   35|       |
   36|     16|	return token;
   37|     16|}

frr_default_add:
   80|      2|{
   81|      2|	dflt->next = NULL;
   82|      2|	*dflt_next = dflt;
   83|      2|	dflt_next = &dflt->next;
   84|       |
   85|       |	frr_default_apply_one(dflt, true);
   86|      2|}
defaults.c:frr_default_apply_one:
  133|      2|{
  134|      2|	struct frr_default_entry *entry = dflt->entries;
  135|      2|	struct frr_default_entry *dfltentry = NULL, *saveentry = NULL;
  136|       |
  137|      4|	for (; entry->match_version || entry->match_profile; entry++) {
  ------------------
  |  Branch (137:9): [True: 0, False: 4]
  |  Branch (137:33): [True: 2, False: 2]
  ------------------
  138|      2|		if (entry->match_profile
  ------------------
  |  Branch (138:7): [True: 2, False: 0]
  ------------------
  139|      2|			&& strcmp(entry->match_profile, df_profile))
  ------------------
  |  Branch (139:7): [True: 2, False: 0]
  ------------------
  140|      2|			continue;
  141|       |
  142|      0|		if (!dfltentry && frr_match_version(dflt->name,
  ------------------
  |  Branch (142:7): [True: 0, False: 0]
  |  Branch (142:21): [True: 0, False: 0]
  ------------------
  143|      0|				entry->match_version, df_version, check))
  144|      0|			dfltentry = entry;
  145|      0|		if (!saveentry && frr_match_version(dflt->name,
  ------------------
  |  Branch (145:7): [True: 0, False: 0]
  |  Branch (145:21): [True: 0, False: 0]
  ------------------
  146|      0|				entry->match_version, FRR_VER_SHORT, check))
  ------------------
  |  |   32|      0|#define FRR_VER_SHORT   "9.0.1"
  ------------------
  147|      0|			saveentry = entry;
  148|       |
  149|      0|		if (dfltentry && saveentry && !check)
  ------------------
  |  Branch (149:7): [True: 0, False: 0]
  |  Branch (149:20): [True: 0, False: 0]
  |  Branch (149:33): [True: 0, False: 0]
  ------------------
  150|      0|			break;
  151|      0|	}
  152|       |	/* found default or arrived at last entry that has NULL,NULL spec */
  153|       |
  154|      2|	if (!dfltentry)
  ------------------
  |  Branch (154:6): [True: 2, False: 0]
  ------------------
  155|      2|		dfltentry = entry;
  156|      2|	if (!saveentry)
  ------------------
  |  Branch (156:6): [True: 2, False: 0]
  ------------------
  157|      2|		saveentry = entry;
  158|       |
  159|      2|	if (dflt->dflt_bool)
  ------------------
  |  Branch (159:6): [True: 2, False: 0]
  ------------------
  160|      2|		*dflt->dflt_bool = dfltentry->val_bool;
  161|      2|	if (dflt->dflt_str)
  ------------------
  |  Branch (161:6): [True: 0, False: 2]
  ------------------
  162|      0|		*dflt->dflt_str = dfltentry->val_str;
  163|      2|	if (dflt->dflt_long)
  ------------------
  |  Branch (163:6): [True: 0, False: 2]
  ------------------
  164|      0|		*dflt->dflt_long = dfltentry->val_long;
  165|      2|	if (dflt->dflt_ulong)
  ------------------
  |  Branch (165:6): [True: 0, False: 2]
  ------------------
  166|      0|		*dflt->dflt_ulong = dfltentry->val_ulong;
  167|      2|	if (dflt->dflt_float)
  ------------------
  |  Branch (167:6): [True: 0, False: 2]
  ------------------
  168|      0|		*dflt->dflt_float = dfltentry->val_float;
  169|      2|	if (dflt->save_bool)
  ------------------
  |  Branch (169:6): [True: 2, False: 0]
  ------------------
  170|      2|		*dflt->save_bool = saveentry->val_bool;
  171|      2|	if (dflt->save_str)
  ------------------
  |  Branch (171:6): [True: 0, False: 2]
  ------------------
  172|      0|		*dflt->save_str = saveentry->val_str;
  173|      2|	if (dflt->save_long)
  ------------------
  |  Branch (173:6): [True: 0, False: 2]
  ------------------
  174|      0|		*dflt->save_long = saveentry->val_long;
  175|      2|	if (dflt->save_ulong)
  ------------------
  |  Branch (175:6): [True: 0, False: 2]
  ------------------
  176|      0|		*dflt->save_ulong = saveentry->val_ulong;
  177|      2|	if (dflt->save_float)
  ------------------
  |  Branch (177:6): [True: 0, False: 2]
  ------------------
  178|      0|		*dflt->save_float = saveentry->val_float;
  179|      2|}

ospf_vty.c:_dfltinit_OSPF_LOG_ADJACENCY_CHANGES:
   88|      2|	{                                                                      \
   89|      2|		frr_default_add(&_dflt_##varname);                             \
   90|      2|	}                                                                      \

event_cmd_init:
  507|      1|{
  508|      1|	install_element(VIEW_NODE, &show_thread_cpu_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  509|      1|	install_element(VIEW_NODE, &show_thread_poll_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  510|      1|	install_element(ENABLE_NODE, &clear_thread_cpu_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  511|       |
  512|      1|	install_element(CONFIG_NODE, &service_cputime_stats_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  513|      1|	install_element(CONFIG_NODE, &service_cputime_warning_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  514|      1|	install_element(CONFIG_NODE, &service_walltime_warning_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  515|       |
  516|      1|	install_element(VIEW_NODE, &show_thread_timers_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  517|      1|}
event_master_create:
  533|      1|{
  534|      1|	struct event_loop *rv;
  535|      1|	struct rlimit limit;
  536|       |
  537|      1|	pthread_once(&init_once, &initializer);
  538|       |
  539|      1|	rv = XCALLOC(MTYPE_EVENT_MASTER, sizeof(struct event_loop));
  ------------------
  |  |  165|      1|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  540|       |
  541|       |	/* Initialize master mutex */
  542|      1|	pthread_mutex_init(&rv->mtx, NULL);
  543|      1|	pthread_cond_init(&rv->cancel_cond, NULL);
  544|       |
  545|       |	/* Set name */
  546|      1|	name = name ? name : "default";
  ------------------
  |  Branch (546:9): [True: 0, False: 1]
  ------------------
  547|      1|	rv->name = XSTRDUP(MTYPE_EVENT_MASTER, name);
  ------------------
  |  |  167|      1|#define XSTRDUP(mtype, str)		qstrdup(mtype, str)
  ------------------
  548|       |
  549|       |	/* Initialize I/O task data structures */
  550|       |
  551|       |	/* Use configured limit if present, ulimit otherwise. */
  552|      1|	rv->fd_limit = frr_get_fd_limit();
  553|      1|	if (rv->fd_limit == 0) {
  ------------------
  |  Branch (553:6): [True: 1, False: 0]
  ------------------
  554|      1|		getrlimit(RLIMIT_NOFILE, &limit);
  555|      1|		rv->fd_limit = (int)limit.rlim_cur;
  556|      1|	}
  557|       |
  558|      1|	rv->read = XCALLOC(MTYPE_EVENT_POLL,
  ------------------
  |  |  165|      1|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  559|      1|			   sizeof(struct event *) * rv->fd_limit);
  560|       |
  561|      1|	rv->write = XCALLOC(MTYPE_EVENT_POLL,
  ------------------
  |  |  165|      1|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  562|      1|			    sizeof(struct event *) * rv->fd_limit);
  563|       |
  564|      1|	char tmhashname[strlen(name) + 32];
  565|       |
  566|      1|	snprintf(tmhashname, sizeof(tmhashname), "%s - threadmaster event hash",
  567|      1|		 name);
  568|      1|	rv->cpu_record = hash_create_size(
  569|      1|		8, (unsigned int (*)(const void *))cpu_record_hash_key,
  570|      1|		(bool (*)(const void *, const void *))cpu_record_hash_cmp,
  571|      1|		tmhashname);
  572|       |
  573|      1|	event_list_init(&rv->event);
  574|      1|	event_list_init(&rv->ready);
  575|      1|	event_list_init(&rv->unuse);
  576|      1|	event_timer_list_init(&rv->timer);
  577|       |
  578|       |	/* Initialize event_fetch() settings */
  579|      1|	rv->spin = true;
  580|      1|	rv->handle_signals = true;
  581|       |
  582|       |	/* Set pthread owner, should be updated by actual owner */
  583|      1|	rv->owner = pthread_self();
  584|      1|	rv->cancel_req = list_new();
  585|      1|	rv->cancel_req->del = cancelreq_del;
  586|      1|	rv->canceled = true;
  587|       |
  588|       |	/* Initialize pipe poker */
  589|      1|	pipe(rv->io_pipe);
  590|      1|	set_nonblocking(rv->io_pipe[0]);
  591|      1|	set_nonblocking(rv->io_pipe[1]);
  592|       |
  593|       |	/* Initialize data structures for poll() */
  594|      1|	rv->handler.pfdsize = rv->fd_limit;
  595|      1|	rv->handler.pfdcount = 0;
  596|      1|	rv->handler.pfds = XCALLOC(MTYPE_EVENT_MASTER,
  ------------------
  |  |  165|      1|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  597|      1|				   sizeof(struct pollfd) * rv->handler.pfdsize);
  598|      1|	rv->handler.copy = XCALLOC(MTYPE_EVENT_MASTER,
  ------------------
  |  |  165|      1|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  599|      1|				   sizeof(struct pollfd) * rv->handler.pfdsize);
  600|       |
  601|       |	/* add to list of threadmasters */
  602|      1|	frr_with_mutex (&masters_mtx) {
  ------------------
  |  |  223|      1|	for (pthread_mutex_t MACRO_REPEAT(_frr_with_mutex, ##__VA_ARGS__)      \
  |  |  ------------------
  |  |  |  |  173|      1|	MACRO_VARIANT(_MACRO_REPEAT, ##__VA_ARGS__)(NAME, ##__VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      1|	_CONCAT(NAME, _MACRO_VARIANT(0, ##__VA_ARGS__, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  141|      1|#define _CONCAT(a, b) _CONCAT2(a,b)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  140|      1|#define _CONCAT2(a, b) a ## b
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  156|      1|	NAME(A1)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  223|      1|	for (pthread_mutex_t MACRO_REPEAT(_frr_with_mutex, ##__VA_ARGS__)      \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  218|      1|	*NAMECTR(_mtx_) __attribute__((                                        \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  219|      1|		unused, cleanup(_frr_mtx_unlock))) = _frr_mtx_lock(mutex),     \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  145|      1|			_10, _9, _8, _7, _6, _5, _4, _3, _2, _1, _0))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  224|      2|	     *_once = NULL; _once == NULL; _once = (void *)1)                  \
  |  |  ------------------
  |  |  |  Branch (224:22): [True: 1, False: 1]
  |  |  ------------------
  ------------------
  603|      1|		if (!masters)
  ------------------
  |  Branch (603:7): [True: 1, False: 0]
  ------------------
  604|      1|			masters = list_new();
  605|       |
  606|      1|		listnode_add(masters, rv);
  607|      1|	}
  608|       |
  609|      1|	return rv;
  610|      1|}
event.c:initializer:
  528|      1|{
  529|       |	pthread_key_create(&thread_current, NULL);
  530|      1|}

ferr.c:err_key_init:
   41|      2|{
   42|      2|	pthread_key_create(&errkey, ferr_free);
   43|      2|}
log_ref_add:
   73|      4|{
   74|      4|	uint32_t i = 0;
   75|       |
   76|      4|	frr_with_mutex (&refs_mtx) {
  ------------------
  |  |  223|      4|	for (pthread_mutex_t MACRO_REPEAT(_frr_with_mutex, ##__VA_ARGS__)      \
  |  |  ------------------
  |  |  |  |  173|      4|	MACRO_VARIANT(_MACRO_REPEAT, ##__VA_ARGS__)(NAME, ##__VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      4|	_CONCAT(NAME, _MACRO_VARIANT(0, ##__VA_ARGS__, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  141|      4|#define _CONCAT(a, b) _CONCAT2(a,b)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  140|      4|#define _CONCAT2(a, b) a ## b
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  156|      4|	NAME(A1)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  223|      4|	for (pthread_mutex_t MACRO_REPEAT(_frr_with_mutex, ##__VA_ARGS__)      \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  218|      4|	*NAMECTR(_mtx_) __attribute__((                                        \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  219|      4|		unused, cleanup(_frr_mtx_unlock))) = _frr_mtx_lock(mutex),     \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  145|      4|			_10, _9, _8, _7, _6, _5, _4, _3, _2, _1, _0))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  224|      8|	     *_once = NULL; _once == NULL; _once = (void *)1)                  \
  |  |  ------------------
  |  |  |  Branch (224:22): [True: 4, False: 4]
  |  |  ------------------
  ------------------
   77|     87|		while (ref[i].code != END_FERR) {
  ------------------
  |  |  128|     87|#define END_FERR            0xFFFFFFFF
  ------------------
  |  Branch (77:10): [True: 83, False: 4]
  ------------------
   78|     83|			(void)hash_get(refs, &ref[i], hash_alloc_intern);
   79|     83|			i++;
   80|     83|		}
   81|      4|	}
   82|      4|}
log_ref_init:
  173|      1|{
  174|      1|	frr_with_mutex (&refs_mtx) {
  ------------------
  |  |  223|      1|	for (pthread_mutex_t MACRO_REPEAT(_frr_with_mutex, ##__VA_ARGS__)      \
  |  |  ------------------
  |  |  |  |  173|      1|	MACRO_VARIANT(_MACRO_REPEAT, ##__VA_ARGS__)(NAME, ##__VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      1|	_CONCAT(NAME, _MACRO_VARIANT(0, ##__VA_ARGS__, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  141|      1|#define _CONCAT(a, b) _CONCAT2(a,b)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  140|      1|#define _CONCAT2(a, b) a ## b
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  156|      1|	NAME(A1)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  223|      1|	for (pthread_mutex_t MACRO_REPEAT(_frr_with_mutex, ##__VA_ARGS__)      \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  218|      1|	*NAMECTR(_mtx_) __attribute__((                                        \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  219|      1|		unused, cleanup(_frr_mtx_unlock))) = _frr_mtx_lock(mutex),     \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  145|      1|			_10, _9, _8, _7, _6, _5, _4, _3, _2, _1, _0))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  224|      2|	     *_once = NULL; _once == NULL; _once = (void *)1)                  \
  |  |  ------------------
  |  |  |  Branch (224:22): [True: 1, False: 1]
  |  |  ------------------
  ------------------
  175|      1|		refs = hash_create(ferr_hash_key, ferr_hash_cmp,
  176|      1|				   "Error Reference Texts");
  177|      1|	}
  178|      1|}
ferr.c:ferr_hash_key:
   66|     83|{
   67|     83|	const struct log_ref *f = a;
   68|       |
   69|     83|	return f->code;
   70|     83|}

access_list_add_hook:
  296|      1|{
  297|      1|	access_master_ipv4.add_hook = func;
  298|      1|	access_master_ipv6.add_hook = func;
  299|      1|	access_master_mac.add_hook = func;
  300|      1|}
access_list_delete_hook:
  304|      1|{
  305|      1|	access_master_ipv4.delete_hook = func;
  306|      1|	access_master_ipv6.delete_hook = func;
  307|      1|	access_master_mac.delete_hook = func;
  308|      1|}
access_list_init:
  889|      1|{
  890|      1|	cmd_variable_handler_register(access_list_handlers);
  891|       |
  892|      1|	access_list_init_ipv4();
  893|      1|	access_list_init_ipv6();
  894|      1|	access_list_init_mac();
  895|       |
  896|      1|	filter_cli_init();
  897|      1|}
filter.c:access_list_init_ipv4:
  798|      1|{
  799|      1|	install_node(&access_node);
  800|       |
  801|      1|	install_element(ENABLE_NODE, &show_ip_access_list_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  802|      1|	install_element(ENABLE_NODE, &show_ip_access_list_name_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  803|      1|}
filter.c:access_list_init_ipv6:
  881|      1|{
  882|      1|	install_node(&access_ipv6_node);
  883|       |
  884|      1|	install_element(ENABLE_NODE, &show_ipv6_access_list_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  885|      1|	install_element(ENABLE_NODE, &show_ipv6_access_list_name_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  886|      1|}
filter.c:access_list_init_mac:
  747|      1|{
  748|      1|	install_node(&access_mac_node);
  749|       |
  750|      1|	install_element(ENABLE_NODE, &show_mac_access_list_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  751|      1|	install_element(ENABLE_NODE, &show_mac_access_list_name_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  752|      1|}

filter_cli_init:
 1732|      1|{
 1733|       |	/* access-list cisco-style (legacy). */
 1734|      1|	install_element(CONFIG_NODE, &access_list_std_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1735|      1|	install_element(CONFIG_NODE, &no_access_list_std_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1736|      1|	install_element(CONFIG_NODE, &access_list_ext_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1737|      1|	install_element(CONFIG_NODE, &no_access_list_ext_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1738|       |
 1739|       |	/* access-list zebra-style. */
 1740|      1|	install_element(CONFIG_NODE, &access_list_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1741|      1|	install_element(CONFIG_NODE, &no_access_list_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1742|      1|	install_element(CONFIG_NODE, &no_access_list_all_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1743|      1|	install_element(CONFIG_NODE, &access_list_remark_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1744|      1|	install_element(CONFIG_NODE, &no_access_list_remark_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1745|      1|	install_element(CONFIG_NODE, &no_access_list_remark_line_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1746|       |
 1747|      1|	install_element(CONFIG_NODE, &ipv6_access_list_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1748|      1|	install_element(CONFIG_NODE, &no_ipv6_access_list_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1749|      1|	install_element(CONFIG_NODE, &no_ipv6_access_list_all_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1750|      1|	install_element(CONFIG_NODE, &ipv6_access_list_remark_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1751|      1|	install_element(CONFIG_NODE, &no_ipv6_access_list_remark_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1752|      1|	install_element(CONFIG_NODE, &no_ipv6_access_list_remark_line_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1753|       |
 1754|      1|	install_element(CONFIG_NODE, &mac_access_list_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1755|      1|	install_element(CONFIG_NODE, &no_mac_access_list_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1756|      1|	install_element(CONFIG_NODE, &no_mac_access_list_all_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1757|      1|	install_element(CONFIG_NODE, &mac_access_list_remark_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1758|      1|	install_element(CONFIG_NODE, &no_mac_access_list_remark_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1759|      1|	install_element(CONFIG_NODE, &no_mac_access_list_remark_line_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1760|       |
 1761|       |	/* prefix lists. */
 1762|      1|	install_element(CONFIG_NODE, &ip_prefix_list_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1763|      1|	install_element(CONFIG_NODE, &no_ip_prefix_list_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1764|      1|	install_element(CONFIG_NODE, &no_ip_prefix_list_seq_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1765|      1|	install_element(CONFIG_NODE, &no_ip_prefix_list_all_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1766|      1|	install_element(CONFIG_NODE, &ip_prefix_list_remark_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1767|      1|	install_element(CONFIG_NODE, &no_ip_prefix_list_remark_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1768|      1|	install_element(CONFIG_NODE, &no_ip_prefix_list_remark_line_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1769|       |
 1770|      1|	install_element(CONFIG_NODE, &ipv6_prefix_list_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1771|      1|	install_element(CONFIG_NODE, &no_ipv6_prefix_list_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1772|      1|	install_element(CONFIG_NODE, &no_ipv6_prefix_list_seq_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1773|      1|	install_element(CONFIG_NODE, &no_ipv6_prefix_list_all_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1774|      1|	install_element(CONFIG_NODE, &ipv6_prefix_list_remark_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1775|      1|	install_element(CONFIG_NODE, &no_ipv6_prefix_list_remark_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1776|      1|	install_element(CONFIG_NODE, &no_ipv6_prefix_list_remark_line_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1777|      1|}

ferr.c:_frr_mtx_lock:
  240|      5|{
  241|      5|	pthread_mutex_lock(mutex);
  242|      5|	return mutex;
  243|      5|}
ferr.c:_frr_mtx_unlock:
  246|      5|{
  247|      5|	if (!*mutex)
  ------------------
  |  Branch (247:6): [True: 0, False: 5]
  ------------------
  248|      0|		return;
  249|      5|	pthread_mutex_unlock(*mutex);
  250|       |	*mutex = NULL;
  251|      5|}
hash.c:_frr_mtx_lock:
  240|    124|{
  241|    124|	pthread_mutex_lock(mutex);
  242|    124|	return mutex;
  243|    124|}
hash.c:_frr_mtx_unlock:
  246|    124|{
  247|    124|	if (!*mutex)
  ------------------
  |  Branch (247:6): [True: 0, False: 124]
  ------------------
  248|      0|		return;
  249|    124|	pthread_mutex_unlock(*mutex);
  250|       |	*mutex = NULL;
  251|    124|}
event.c:_frr_mtx_lock:
  240|      1|{
  241|      1|	pthread_mutex_lock(mutex);
  242|      1|	return mutex;
  243|      1|}
event.c:_frr_mtx_unlock:
  246|      1|{
  247|      1|	if (!*mutex)
  ------------------
  |  Branch (247:6): [True: 0, False: 1]
  ------------------
  248|      0|		return;
  249|      1|	pthread_mutex_unlock(*mutex);
  250|       |	*mutex = NULL;
  251|      1|}
zlog_targets.c:_frr_mtx_lock:
  240|      1|{
  241|      1|	pthread_mutex_lock(mutex);
  242|      1|	return mutex;
  243|      1|}
zlog_targets.c:_frr_mtx_unlock:
  246|      1|{
  247|      1|	if (!*mutex)
  ------------------
  |  Branch (247:6): [True: 0, False: 1]
  ------------------
  248|      0|		return;
  249|      1|	pthread_mutex_unlock(*mutex);
  250|       |	*mutex = NULL;
  251|      1|}

frrcu.c:rcu_preinit:
  126|      2|{
  127|      2|	struct rcu_thread *rt;
  128|       |
  129|      2|	rt = &rcu_thread_main;
  130|      2|	rt->depth = 1;
  131|      2|	seqlock_init(&rt->rcu);
  132|      2|	seqlock_acquire_val(&rt->rcu, SEQLOCK_STARTVAL);
  ------------------
  |  |   60|      2|#define SEQLOCK_STARTVAL	1U
  ------------------
  133|       |
  134|      2|	pthread_key_create(&rcu_thread_key, rcu_thread_end);
  135|      2|	pthread_setspecific(rcu_thread_key, rt);
  136|       |
  137|      2|	rcu_threads_add_tail(&rcu_threads, rt);
  138|       |
  139|       |	/* RCU sweeper's rcu_thread is a dummy, NOT added to rcu_threads */
  140|      2|	rt = &rcu_thread_rcu;
  141|      2|	rt->depth = 1;
  142|       |
  143|      2|	seqlock_init(&rcu_seq);
  144|      2|	seqlock_acquire_val(&rcu_seq, SEQLOCK_STARTVAL);
  ------------------
  |  |   60|      2|#define SEQLOCK_STARTVAL	1U
  ------------------
  145|      2|}

graph_new:
   16|     16|{
   17|     16|	struct graph *graph = XCALLOC(MTYPE_GRAPH, sizeof(struct graph));
  ------------------
  |  |  165|     16|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
   18|     16|	graph->nodes = vector_init(VECTOR_MIN_SIZE);
  ------------------
  |  |   25|     16|#define VECTOR_MIN_SIZE 1
  ------------------
   19|       |
   20|     16|	return graph;
   21|     16|}
graph_new_node:
   35|     16|{
   36|     16|	struct graph_node *node =
   37|     16|		XCALLOC(MTYPE_GRAPH_NODE, sizeof(struct graph_node));
  ------------------
  |  |  165|     16|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
   38|       |
   39|     16|	node->from = vector_init(VECTOR_MIN_SIZE);
  ------------------
  |  |   25|     16|#define VECTOR_MIN_SIZE 1
  ------------------
   40|     16|	node->to = vector_init(VECTOR_MIN_SIZE);
  ------------------
  |  |   25|     16|#define VECTOR_MIN_SIZE 1
  ------------------
   41|     16|	node->data = data;
   42|     16|	node->del = del;
   43|       |
   44|     16|	vector_set(graph->nodes, node);
   45|       |
   46|     16|	return node;
   47|     16|}

hash_create_size:
   30|    124|{
   31|    124|	struct hash *hash;
   32|       |
   33|    124|	assert((size & (size - 1)) == 0);
  ------------------
  |  |   51|    124|	({                                                                     \
  |  |   52|    124|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|    124|			(used)) = {                                            \
  |  |   54|    124|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|    124|	{                                                                      \
  |  |  |  |  284|    124|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|    124|		/* .type = */ (type_),                                         \
  |  |  |  |  286|    124|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|    124|		/* .func = */ func_,                                           \
  |  |  |  |  289|    124|	}                                                                      \
  |  |  ------------------
  |  |   55|    124|			.expr = #expr_,                                        \
  |  |   56|    124|		};                                                             \
  |  |   57|    124|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|    124|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|    124|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|    124|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|    124|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 124]
  |  |  |  Branch (58:24): [True: 124, False: 0]
  |  |  ------------------
  |  |   59|    124|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|    124|	})
  ------------------
   34|    124|	hash = XCALLOC(MTYPE_HASH, sizeof(struct hash));
  ------------------
  |  |  165|    124|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
   35|    124|	hash->index =
   36|    124|		XCALLOC(MTYPE_HASH_INDEX, sizeof(struct hash_bucket *) * size);
  ------------------
  |  |  165|    124|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
   37|    124|	hash->size = size;
   38|    124|	hash->hash_key = hash_key;
   39|    124|	hash->hash_cmp = hash_cmp;
   40|    124|	hash->count = 0;
   41|    124|	hash->name = name ? XSTRDUP(MTYPE_HASH, name) : NULL;
  ------------------
  |  |  167|    124|#define XSTRDUP(mtype, str)		qstrdup(mtype, str)
  ------------------
  |  Branch (41:15): [True: 124, False: 0]
  ------------------
   42|    124|	hash->stats.empty = hash->size;
   43|       |
   44|    124|	frr_with_mutex (&_hashes_mtx) {
  ------------------
  |  |  223|    124|	for (pthread_mutex_t MACRO_REPEAT(_frr_with_mutex, ##__VA_ARGS__)      \
  |  |  ------------------
  |  |  |  |  173|    124|	MACRO_VARIANT(_MACRO_REPEAT, ##__VA_ARGS__)(NAME, ##__VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|    124|	_CONCAT(NAME, _MACRO_VARIANT(0, ##__VA_ARGS__, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  141|    124|#define _CONCAT(a, b) _CONCAT2(a,b)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  140|    124|#define _CONCAT2(a, b) a ## b
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  156|    124|	NAME(A1)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  223|    124|	for (pthread_mutex_t MACRO_REPEAT(_frr_with_mutex, ##__VA_ARGS__)      \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  218|    124|	*NAMECTR(_mtx_) __attribute__((                                        \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  219|    124|		unused, cleanup(_frr_mtx_unlock))) = _frr_mtx_lock(mutex),     \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  145|    124|			_10, _9, _8, _7, _6, _5, _4, _3, _2, _1, _0))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  224|    248|	     *_once = NULL; _once == NULL; _once = (void *)1)                  \
  |  |  ------------------
  |  |  |  Branch (224:22): [True: 124, False: 124]
  |  |  ------------------
  ------------------
   45|    124|		if (!_hashes)
  ------------------
  |  Branch (45:7): [True: 1, False: 123]
  ------------------
   46|      1|			_hashes = list_new();
   47|       |
   48|    124|		listnode_add(_hashes, hash);
   49|    124|	}
   50|       |
   51|    124|	return hash;
   52|    124|}
hash_create:
   57|      3|{
   58|      3|	return hash_create_size(HASH_INITIAL_SIZE, hash_key, hash_cmp, name);
  ------------------
  |  |   17|      3|#define HASH_INITIAL_SIZE 256
  ------------------
   59|      3|}
hash_alloc_intern:
   62|     83|{
   63|     83|	return arg;
   64|     83|}
hash_get:
  126|  2.69k|{
  127|  2.69k|	frrtrace(2, frr_libfrr, hash_get, hash, data);
  ------------------
  |  |   61|  2.69k|#define frrtrace(nargs, provider, name, ...) (void)0
  ------------------
  128|       |
  129|  2.69k|	unsigned int key;
  130|  2.69k|	unsigned int index;
  131|  2.69k|	void *newdata;
  132|  2.69k|	struct hash_bucket *bucket;
  133|       |
  134|  2.69k|	if (!alloc_func && !hash->count)
  ------------------
  |  Branch (134:6): [True: 2.61k, False: 83]
  |  Branch (134:21): [True: 2.61k, False: 0]
  ------------------
  135|  2.61k|		return NULL;
  136|       |
  137|     83|	key = (*hash->hash_key)(data);
  138|     83|	index = key & (hash->size - 1);
  139|       |
  140|    108|	for (bucket = hash->index[index]; bucket != NULL;
  ------------------
  |  Branch (140:36): [True: 25, False: 83]
  ------------------
  141|     83|	     bucket = bucket->next) {
  142|     25|		if (bucket->key == key && (*hash->hash_cmp)(bucket->data, data))
  ------------------
  |  Branch (142:7): [True: 0, False: 25]
  |  Branch (142:29): [True: 0, False: 0]
  ------------------
  143|      0|			return bucket->data;
  144|     25|	}
  145|       |
  146|     83|	if (alloc_func) {
  ------------------
  |  Branch (146:6): [True: 83, False: 0]
  ------------------
  147|     83|		newdata = (*alloc_func)(data);
  148|     83|		if (newdata == NULL)
  ------------------
  |  Branch (148:7): [True: 0, False: 83]
  ------------------
  149|      0|			return NULL;
  150|       |
  151|     83|		if (HASH_THRESHOLD(hash->count + 1, hash->size)) {
  ------------------
  |  |   19|     83|#define HASH_THRESHOLD(used, size) ((used) > (size))
  |  |  ------------------
  |  |  |  Branch (19:36): [True: 0, False: 83]
  |  |  ------------------
  ------------------
  152|      0|			hash_expand(hash);
  153|      0|			index = key & (hash->size - 1);
  154|      0|		}
  155|       |
  156|     83|		bucket = XCALLOC(MTYPE_HASH_BUCKET, sizeof(struct hash_bucket));
  ------------------
  |  |  165|     83|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  157|     83|		bucket->data = newdata;
  158|     83|		bucket->key = key;
  159|     83|		bucket->next = hash->index[index];
  160|     83|		hash->index[index] = bucket;
  161|     83|		hash->count++;
  162|       |
  163|     83|		frrtrace(3, frr_libfrr, hash_insert, hash, data, key);
  ------------------
  |  |   61|     83|#define frrtrace(nargs, provider, name, ...) (void)0
  ------------------
  164|       |
  165|     83|		int oldlen = bucket->next ? bucket->next->len : 0;
  ------------------
  |  Branch (165:16): [True: 25, False: 58]
  ------------------
  166|     83|		int newlen = oldlen + 1;
  167|       |
  168|     83|		if (newlen == 1)
  ------------------
  |  Branch (168:7): [True: 58, False: 25]
  ------------------
  169|     58|			hash->stats.empty--;
  170|     25|		else
  171|     25|			bucket->next->len = 0;
  172|       |
  173|     83|		bucket->len = newlen;
  174|       |
  175|     83|		hash_update_ssq(hash, oldlen, newlen);
  ------------------
  |  |   71|     83|	do {                                                                   \
  |  |   72|     83|		int _adjust = (new + old) * (new - old);                       \
  |  |   73|     83|		if (_adjust < 0)                                               \
  |  |  ------------------
  |  |  |  Branch (73:7): [True: 0, False: 83]
  |  |  ------------------
  |  |   74|     83|			atomic_fetch_sub_explicit(&hz->stats.ssq, -_adjust,    \
  |  |   75|      0|						  memory_order_relaxed);       \
  |  |   76|     83|		else                                                           \
  |  |   77|     83|			atomic_fetch_add_explicit(&hz->stats.ssq, _adjust,     \
  |  |   78|     83|						  memory_order_relaxed);       \
  |  |   79|     83|	} while (0)
  |  |  ------------------
  |  |  |  Branch (79:11): [Folded, False: 83]
  |  |  ------------------
  ------------------
  176|       |
  177|     83|		return bucket->data;
  178|     83|	}
  179|      0|	return NULL;
  180|     83|}
hash_lookup:
  183|  2.61k|{
  184|       |	return hash_get(hash, data, NULL);
  185|  2.61k|}
hash_cmd_init:
  457|      1|{
  458|      1|	install_element(ENABLE_NODE, &show_hash_stats_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  459|      1|}

_hook_register:
   20|     20|{
   21|     20|	struct hookent *he, **pos;
   22|       |
   23|     20|	if (!stackent->ent_used)
  ------------------
  |  Branch (23:6): [True: 20, False: 0]
  ------------------
   24|     20|		he = stackent;
   25|      0|	else {
   26|      0|		he = XCALLOC(MTYPE_HOOK_ENTRY, sizeof(*he));
  ------------------
  |  |  165|      0|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
   27|      0|		he->ent_on_heap = true;
   28|      0|	}
   29|     20|	he->ent_used = true;
   30|     20|	he->hookfn = funcptr;
   31|     20|	he->hookarg = arg;
   32|     20|	he->has_arg = has_arg;
   33|     20|	he->module = module;
   34|     20|	he->fnname = funcname;
   35|     20|	he->priority = priority;
   36|       |
   37|     21|	for (pos = &hook->entries; *pos; pos = &(*pos)->next)
  ------------------
  |  Branch (37:29): [True: 3, False: 18]
  ------------------
   38|      3|		if (hook->reverse ? (*pos)->priority < priority
  ------------------
  |  Branch (38:7): [True: 1, False: 2]
  |  Branch (38:7): [True: 2, False: 1]
  ------------------
   39|      3|				  : (*pos)->priority >= priority)
   40|      2|			break;
   41|       |
   42|     20|	he->next = *pos;
   43|     20|	*pos = he;
   44|     20|}

ospf_interface.c:_hook_typecheck_if_add:
  192|      1|	{                                                                      \
  193|      1|		return (void *)funcptr;                                        \
  194|      1|	}                                                                      \
ospf_interface.c:_hook_typecheck_if_del:
  192|      1|	{                                                                      \
  193|      1|		return (void *)funcptr;                                        \
  194|      1|	}                                                                      \
bfd.c:_hook_typecheck_frr_fini:
  192|      1|	{                                                                      \
  193|      1|		return (void *)funcptr;                                        \
  194|      1|	}                                                                      \
command.c:_hook_typecheck_cmd_execute:
  192|      1|	{                                                                      \
  193|      1|		return (void *)funcptr;                                        \
  194|      1|	}                                                                      \
command.c:_hook_typecheck_cmd_execute_done:
  192|      1|	{                                                                      \
  193|      1|		return (void *)funcptr;                                        \
  194|      1|	}                                                                      \
if.c:hook_call_if_add:
  213|      1|	{                                                                      \
  214|      1|		int hooksum = 0;                                               \
  215|      1|		struct hookent *he = _hook_##hookname.entries;                 \
  216|      1|		void *hookarg;                                                 \
  217|      1|		union {                                                        \
  218|      1|			void *voidptr;                                         \
  219|      1|			int(*fptr) HOOK_VOIDIFY arglist;                       \
  220|      1|			int(*farg) HOOK_ADDDEF arglist;                        \
  221|      1|		} hookp;                                                       \
  222|      2|		for (; he; he = he->next) {                                    \
  ------------------
  |  Branch (222:10): [True: 1, False: 1]
  ------------------
  223|      1|			hookarg = he->hookarg;                                 \
  224|      1|			hookp.voidptr = he->hookfn;                            \
  225|      1|			if (!he->has_arg)                                      \
  ------------------
  |  Branch (225:8): [True: 1, False: 0]
  ------------------
  226|      1|				hooksum += hookp.fptr passlist;                \
  227|      1|			else                                                   \
  228|      1|				hooksum += hookp.farg HOOK_ADDARG passlist;    \
  ------------------
  |  |  173|      0|#define HOOK_ADDARG(...) (hookarg , ## __VA_ARGS__)
  ------------------
  229|      1|		}                                                              \
  230|      1|		return hooksum;                                                \
  231|      1|	}                                                                      \
log_vty.c:_hook_typecheck_zlog_init:
  192|      2|	{                                                                      \
  193|      2|		return (void *)funcptr;                                        \
  194|      2|	}                                                                      \
zlog.c:hook_call_zlog_init:
  213|      1|	{                                                                      \
  214|      1|		int hooksum = 0;                                               \
  215|      1|		struct hookent *he = _hook_##hookname.entries;                 \
  216|      1|		void *hookarg;                                                 \
  217|      1|		union {                                                        \
  218|      1|			void *voidptr;                                         \
  219|      1|			int(*fptr) HOOK_VOIDIFY arglist;                       \
  220|      1|			int(*farg) HOOK_ADDDEF arglist;                        \
  221|      1|		} hookp;                                                       \
  222|      3|		for (; he; he = he->next) {                                    \
  ------------------
  |  Branch (222:10): [True: 2, False: 1]
  ------------------
  223|      2|			hookarg = he->hookarg;                                 \
  224|      2|			hookp.voidptr = he->hookfn;                            \
  225|      2|			if (!he->has_arg)                                      \
  ------------------
  |  Branch (225:8): [True: 2, False: 0]
  ------------------
  226|      2|				hooksum += hookp.fptr passlist;                \
  227|      2|			else                                                   \
  228|      2|				hooksum += hookp.farg HOOK_ADDARG passlist;    \
  ------------------
  |  |  173|      0|#define HOOK_ADDARG(...) (hookarg , ## __VA_ARGS__)
  ------------------
  229|      2|		}                                                              \
  230|      1|		return hooksum;                                                \
  231|      1|	}                                                                      \
zlog_5424_cli.c:_hook_typecheck_zlog_cli_show:
  192|      1|	{                                                                      \
  193|      1|		return (void *)funcptr;                                        \
  194|      1|	}                                                                      \
zlog_5424_cli.c:_hook_typecheck_frr_early_init:
  192|      2|	{                                                                      \
  193|      2|		return (void *)funcptr;                                        \
  194|      2|	}                                                                      \
zlog_5424_cli.c:_hook_typecheck_zlog_rotate:
  192|      2|	{                                                                      \
  193|      2|		return (void *)funcptr;                                        \
  194|      2|	}                                                                      \
zlog_5424_cli.c:_hook_typecheck_frr_fini:
  192|      2|	{                                                                      \
  193|      2|		return (void *)funcptr;                                        \
  194|      2|	}                                                                      \
zlog_targets.c:_hook_typecheck_zlog_aux_init:
  192|      2|	{                                                                      \
  193|      2|		return (void *)funcptr;                                        \
  194|      2|	}                                                                      \
zlog_targets.c:_hook_typecheck_zlog_init:
  192|      2|	{                                                                      \
  193|      2|		return (void *)funcptr;                                        \
  194|      2|	}                                                                      \
zlog_targets.c:_hook_typecheck_zlog_fini:
  192|      2|	{                                                                      \
  193|      2|		return (void *)funcptr;                                        \
  194|      2|	}                                                                      \

if_cmp_name_func:
   64|      1|{
   65|      1|	unsigned int l1, l2;
   66|      1|	long int x1, x2;
   67|      1|	int res;
   68|       |
   69|      1|	while (*p1 && *p2) {
  ------------------
  |  Branch (69:9): [True: 0, False: 1]
  |  Branch (69:16): [True: 0, False: 0]
  ------------------
   70|      0|		char *tmp1, *tmp2;
   71|       |
   72|       |		/* look up to any number */
   73|      0|		l1 = strcspn(p1, "0123456789");
   74|      0|		l2 = strcspn(p2, "0123456789");
   75|       |
   76|       |		/* name lengths are different -> compare names */
   77|      0|		if (l1 != l2)
  ------------------
  |  Branch (77:7): [True: 0, False: 0]
  ------------------
   78|      0|			return (strcmp(p1, p2));
   79|       |
   80|       |		/* Note that this relies on all numbers being less than all
   81|       |		 * letters, so
   82|       |		 * that de0 < del0.
   83|       |		 */
   84|      0|		res = strncmp(p1, p2, l1);
   85|       |
   86|       |		/* names are different -> compare them */
   87|      0|		if (res)
  ------------------
  |  Branch (87:7): [True: 0, False: 0]
  ------------------
   88|      0|			return res;
   89|       |
   90|       |		/* with identical name part, go to numeric part */
   91|      0|		p1 += l1;
   92|      0|		p2 += l1;
   93|       |
   94|      0|		if (!*p1 && !*p2)
  ------------------
  |  Branch (94:7): [True: 0, False: 0]
  |  Branch (94:15): [True: 0, False: 0]
  ------------------
   95|      0|			return 0;
   96|      0|		if (!*p1)
  ------------------
  |  Branch (96:7): [True: 0, False: 0]
  ------------------
   97|      0|			return -1;
   98|      0|		if (!*p2)
  ------------------
  |  Branch (98:7): [True: 0, False: 0]
  ------------------
   99|      0|			return 1;
  100|       |
  101|      0|		x1 = strtol(p1, (char **)&tmp1, 10);
  102|      0|		x2 = strtol(p2, (char **)&tmp2, 10);
  103|       |
  104|       |		/* let's compare numbers now */
  105|      0|		if (x1 < x2)
  ------------------
  |  Branch (105:7): [True: 0, False: 0]
  ------------------
  106|      0|			return -1;
  107|      0|		if (x1 > x2)
  ------------------
  |  Branch (107:7): [True: 0, False: 0]
  ------------------
  108|      0|			return 1;
  109|       |
  110|       |		/* Compare string if numbers are equal (distinguish foo-1 from foo-001) */
  111|      0|		l1 = strspn(p1, "0123456789");
  112|      0|		l2 = strspn(p2, "0123456789");
  113|      0|		if (l1 != l2)
  ------------------
  |  Branch (113:7): [True: 0, False: 0]
  ------------------
  114|      0|			return (strcmp(p1, p2));
  115|       |
  116|       |		/* Continue to parse the rest of the string */
  117|      0|		p1 = (const char *)tmp1;
  118|      0|		p2 = (const char *)tmp2;
  119|       |
  120|       |		/* numbers were equal, lets do it again..
  121|       |		(it happens with name like "eth123.456:789") */
  122|      0|	}
  123|      1|	if (*p1)
  ------------------
  |  Branch (123:6): [True: 0, False: 1]
  ------------------
  124|      0|		return 1;
  125|      1|	if (*p2)
  ------------------
  |  Branch (125:6): [True: 1, False: 0]
  ------------------
  126|      1|		return -1;
  127|      0|	return 0;
  128|      1|}
if_create_name:
  215|      1|{
  216|      1|	struct interface *ifp;
  217|       |
  218|      1|	ifp = if_new(vrf);
  219|       |
  220|      1|	if_set_name(ifp, name);
  221|       |
  222|      1|	hook_call(if_add, ifp);
  ------------------
  |  |  169|      1|#define hook_call(hookname, ...) hook_call_##hookname(__VA_ARGS__)
  ------------------
  223|      1|	return ifp;
  224|      1|}
if_lookup_by_name_vrf:
  382|      1|{
  383|      1|	struct interface if_tmp;
  384|       |
  385|      1|	if (!name || strnlen(name, INTERFACE_NAMSIZ) == INTERFACE_NAMSIZ)
  ------------------
  |  |   92|      1|#define INTERFACE_NAMSIZ      IFNAMSIZ
  ------------------
              	if (!name || strnlen(name, INTERFACE_NAMSIZ) == INTERFACE_NAMSIZ)
  ------------------
  |  |   92|      1|#define INTERFACE_NAMSIZ      IFNAMSIZ
  ------------------
  |  Branch (385:6): [True: 0, False: 1]
  |  Branch (385:15): [True: 0, False: 1]
  ------------------
  386|      0|		return NULL;
  387|       |
  388|      1|	strlcpy(if_tmp.name, name, sizeof(if_tmp.name));
  389|      1|	return RB_FIND(if_name_head, &vrf->ifaces_by_name, &if_tmp);
  ------------------
  |  |  511|      1|#define RB_FIND(_name, _head, _key)	_name##_RB_FIND(_head, _key)
  ------------------
  390|      1|}
if_get_by_name:
  575|      1|{
  576|      1|	struct interface *ifp = NULL;
  577|      1|	struct vrf *vrf;
  578|       |
  579|      1|	switch (vrf_get_backend()) {
  580|      1|	case VRF_BACKEND_UNKNOWN:
  ------------------
  |  Branch (580:2): [True: 1, False: 0]
  ------------------
  581|      1|	case VRF_BACKEND_NETNS:
  ------------------
  |  Branch (581:2): [True: 0, False: 1]
  ------------------
  582|      1|		vrf = vrf_get(vrf_id, vrf_name);
  583|      1|		assert(vrf);
  ------------------
  |  |   51|      1|	({                                                                     \
  |  |   52|      1|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|      1|			(used)) = {                                            \
  |  |   54|      1|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |   55|      1|			.expr = #expr_,                                        \
  |  |   56|      1|		};                                                             \
  |  |   57|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|      1|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 1]
  |  |  |  Branch (58:24): [True: 1, False: 0]
  |  |  ------------------
  |  |   59|      1|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|      1|	})
  ------------------
  584|       |
  585|      1|		ifp = if_lookup_by_name_vrf(name, vrf);
  586|      1|		if (ifp) {
  ------------------
  |  Branch (586:7): [True: 0, False: 1]
  ------------------
  587|       |			/* If it came from the kernel or by way of zclient,
  588|       |			 * believe it and update the ifp accordingly.
  589|       |			 */
  590|      0|			if (ifp->vrf->vrf_id != vrf_id && vrf_id != VRF_UNKNOWN)
  ------------------
  |  |   21|      0|#define VRF_UNKNOWN UINT32_MAX
  ------------------
  |  Branch (590:8): [True: 0, False: 0]
  |  Branch (590:38): [True: 0, False: 0]
  ------------------
  591|      0|				if_update_to_new_vrf(ifp, vrf_id);
  592|       |
  593|      0|			return ifp;
  594|      0|		}
  595|       |
  596|      1|		break;
  597|      1|	case VRF_BACKEND_VRF_LITE:
  ------------------
  |  Branch (597:2): [True: 0, False: 1]
  ------------------
  598|      0|		ifp = if_lookup_by_name_all_vrf(name);
  599|      0|		if (ifp) {
  ------------------
  |  Branch (599:7): [True: 0, False: 0]
  ------------------
  600|       |			/* If it came from the kernel or by way of zclient,
  601|       |			 * believe it and update the ifp accordingly.
  602|       |			 */
  603|      0|			if (ifp->vrf->vrf_id != vrf_id && vrf_id != VRF_UNKNOWN)
  ------------------
  |  |   21|      0|#define VRF_UNKNOWN UINT32_MAX
  ------------------
  |  Branch (603:8): [True: 0, False: 0]
  |  Branch (603:38): [True: 0, False: 0]
  ------------------
  604|      0|				if_update_to_new_vrf(ifp, vrf_id);
  605|       |
  606|      0|			return ifp;
  607|      0|		}
  608|       |
  609|      0|		vrf = vrf_get(vrf_id, vrf_name);
  610|      0|		assert(vrf);
  ------------------
  |  |   51|      0|	({                                                                     \
  |  |   52|      0|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|      0|			(used)) = {                                            \
  |  |   54|      0|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|      0|	{                                                                      \
  |  |  |  |  284|      0|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      0|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      0|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      0|		/* .func = */ func_,                                           \
  |  |  |  |  289|      0|	}                                                                      \
  |  |  ------------------
  |  |   55|      0|			.expr = #expr_,                                        \
  |  |   56|      0|		};                                                             \
  |  |   57|      0|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      0|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      0|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      0|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|      0|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 0]
  |  |  |  Branch (58:24): [True: 0, False: 0]
  |  |  ------------------
  |  |   59|      0|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|      0|	})
  ------------------
  611|       |
  612|      0|		break;
  613|      0|	default:
  ------------------
  |  Branch (613:2): [True: 0, False: 1]
  ------------------
  614|      0|		return NULL;
  615|      1|	}
  616|       |
  617|      1|	return if_create_name(name, vrf);
  618|      1|}
if_is_up:
  666|  2.74k|{
  667|       |	return ifp->flags & IFF_UP;
  668|  2.74k|}
if_is_operative:
  680|      1|{
  681|      1|	return ((ifp->flags & IFF_UP)
  ------------------
  |  Branch (681:10): [True: 0, False: 1]
  ------------------
  682|      0|		&& (((ifp->flags & IFF_RUNNING)
  ------------------
  |  Branch (682:8): [True: 0, False: 0]
  ------------------
  683|      0|		     && (ifp->ptm_status || !ifp->ptm_enable))
  ------------------
  |  Branch (683:12): [True: 0, False: 0]
  |  Branch (683:31): [True: 0, False: 0]
  ------------------
  684|      0|		    || !CHECK_FLAG(ifp->status,
  ------------------
  |  |  394|      0|#define CHECK_FLAG(V,F)      ((V) & (F))
  ------------------
  |  Branch (684:10): [True: 0, False: 0]
  ------------------
  685|      0|				   ZEBRA_INTERFACE_LINKDETECTION)));
  686|      1|}
if_is_loopback_exact:
  700|  5.29k|{
  701|       |	/* XXX: Do this better, eg what if IFF_WHATEVER means X on platform M
  702|       |	 * but Y on platform N?
  703|       |	 */
  704|  5.29k|	return (ifp->flags & (IFF_LOOPBACK | IFF_NOXMIT | IFF_VIRTUAL));
  ------------------
  |  |  487|  5.29k|#define IFF_NOXMIT 0x0
  ------------------
              	return (ifp->flags & (IFF_LOOPBACK | IFF_NOXMIT | IFF_VIRTUAL));
  ------------------
  |  |  499|  5.29k|#define IFF_VIRTUAL 0x0
  ------------------
  705|  5.29k|}
if_is_vrf:
  709|  5.29k|{
  710|  5.29k|	return CHECK_FLAG(ifp->status, ZEBRA_INTERFACE_VRF_LOOPBACK);
  ------------------
  |  |  394|  5.29k|#define CHECK_FLAG(V,F)      ((V) & (F))
  ------------------
  711|  5.29k|}
if_is_loopback:
  715|  5.29k|{
  716|  5.29k|	if (if_is_loopback_exact(ifp) || if_is_vrf(ifp))
  ------------------
  |  Branch (716:6): [True: 0, False: 5.29k]
  |  Branch (716:35): [True: 0, False: 5.29k]
  ------------------
  717|      0|		return true;
  718|       |
  719|  5.29k|	return false;
  720|  5.29k|}
connected_new:
  811|      1|{
  812|      1|	return XCALLOC(MTYPE_CONNECTED, sizeof(struct connected));
  ------------------
  |  |  165|      1|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  813|      1|}
connected_add_by_prefix:
  989|      1|{
  990|      1|	struct connected *ifc;
  991|       |
  992|       |	/* Allocate new connected address. */
  993|      1|	ifc = connected_new();
  994|      1|	ifc->ifp = ifp;
  995|       |
  996|       |	/* Fetch interface address */
  997|      1|	ifc->address = prefix_new();
  998|      1|	memcpy(ifc->address, p, sizeof(struct prefix));
  999|       |
 1000|       |	/* Fetch dest address */
 1001|      1|	if (destination) {
  ------------------
  |  Branch (1001:6): [True: 0, False: 1]
  ------------------
 1002|      0|		ifc->destination = prefix_new();
 1003|      0|		memcpy(ifc->destination, destination, sizeof(struct prefix));
 1004|      0|	}
 1005|       |
 1006|       |	/* Add connected address to the interface. */
 1007|      1|	listnode_add(ifp->connected, ifc);
 1008|      1|	return ifc;
 1009|      1|}
if_zapi_callbacks:
 1487|      1|{
 1488|      1|	ifp_master.create_hook = create;
 1489|      1|	ifp_master.up_hook = up;
 1490|      1|	ifp_master.down_hook = down;
 1491|      1|	ifp_master.destroy_hook = destroy;
 1492|      1|}
if.c:if_new:
  156|      1|{
  157|      1|	struct interface *ifp;
  158|       |
  159|      1|	assert(vrf);
  ------------------
  |  |   51|      1|	({                                                                     \
  |  |   52|      1|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|      1|			(used)) = {                                            \
  |  |   54|      1|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |   55|      1|			.expr = #expr_,                                        \
  |  |   56|      1|		};                                                             \
  |  |   57|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|      1|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 1]
  |  |  |  Branch (58:24): [True: 1, False: 0]
  |  |  ------------------
  |  |   59|      1|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|      1|	})
  ------------------
  160|       |
  161|      1|	ifp = XCALLOC(MTYPE_IF, sizeof(struct interface));
  ------------------
  |  |  165|      1|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  162|       |
  163|      1|	ifp->ifindex = IFINDEX_INTERNAL;
  ------------------
  |  |  237|      1|#define IFINDEX_INTERNAL	0
  ------------------
  164|      1|	ifp->name[0] = '\0';
  165|       |
  166|      1|	ifp->vrf = vrf;
  167|       |
  168|      1|	ifp->connected = list_new();
  169|      1|	ifp->connected->del = ifp_connected_free;
  170|       |
  171|      1|	ifp->nbr_connected = list_new();
  172|      1|	ifp->nbr_connected->del = (void (*)(void *))nbr_connected_free;
  173|       |
  174|       |	/* Enable Link-detection by default */
  175|      1|	SET_FLAG(ifp->status, ZEBRA_INTERFACE_LINKDETECTION);
  ------------------
  |  |  395|      1|#define SET_FLAG(V,F)        (V) |= (F)
  ------------------
  176|       |
  177|      1|	QOBJ_REG(ifp, interface);
  ------------------
  |  |   88|      1|#define QOBJ_REG(n, structname) qobj_reg(&n->qobj_node, &qobj_t_##structname)
  ------------------
  178|      1|	return ifp;
  179|      1|}
if.c:if_set_name:
  651|      1|{
  652|      1|	if (if_cmp_name_func(ifp->name, name) == 0)
  ------------------
  |  Branch (652:6): [True: 0, False: 1]
  ------------------
  653|      0|		return;
  654|       |
  655|      1|	if (ifp->name[0] != '\0')
  ------------------
  |  Branch (655:6): [True: 0, False: 1]
  ------------------
  656|      0|		IFNAME_RB_REMOVE(ifp->vrf, ifp);
  ------------------
  |  |  332|      0|	({                                                                            \
  |  |  333|      0|		struct interface *_iz =                                               \
  |  |  334|      0|			RB_REMOVE(if_name_head, &v->ifaces_by_name, (ifp));           \
  |  |  ------------------
  |  |  |  |  510|      0|#define RB_REMOVE(_name, _head, _elm)	_name##_RB_REMOVE(_head, _elm)
  |  |  ------------------
  |  |  335|      0|		if (_iz == NULL)                                                      \
  |  |  ------------------
  |  |  |  Branch (335:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  336|      0|			flog_err(                                                     \
  |  |  ------------------
  |  |  |  |  136|      0|#define flog_err(ferr_id, format, ...) 0
  |  |  ------------------
  |  |  337|      0|				EC_LIB_INTERFACE,                                     \
  |  |  338|      0|				"%s(%s): corruption detected -- interface with this " \
  |  |  339|      0|				"name doesn't exist in VRF %s!",                      \
  |  |  340|      0|				__func__, (ifp)->name, (ifp)->vrf->name);             \
  |  |  341|      0|		_iz;                                                                  \
  |  |  342|      0|	})
  ------------------
  657|       |
  658|      1|	strlcpy(ifp->name, name, sizeof(ifp->name));
  659|       |
  660|      1|	if (ifp->name[0] != '\0')
  ------------------
  |  Branch (660:6): [True: 1, False: 0]
  ------------------
  661|      1|		IFNAME_RB_INSERT(ifp->vrf, ifp);
  ------------------
  |  |  319|      1|	({                                                                            \
  |  |  320|      1|		struct interface *_iz =                                               \
  |  |  321|      1|			RB_INSERT(if_name_head, &v->ifaces_by_name, (ifp));           \
  |  |  ------------------
  |  |  |  |  509|      1|#define RB_INSERT(_name, _head, _elm)	_name##_RB_INSERT(_head, _elm)
  |  |  ------------------
  |  |  322|      1|		if (_iz)                                                              \
  |  |  ------------------
  |  |  |  Branch (322:7): [True: 0, False: 1]
  |  |  ------------------
  |  |  323|      1|			flog_err(                                                     \
  |  |  ------------------
  |  |  |  |  136|      0|#define flog_err(ferr_id, format, ...) 0
  |  |  ------------------
  |  |  324|      1|				EC_LIB_INTERFACE,                                     \
  |  |  325|      1|				"%s(%s): corruption detected -- interface with this " \
  |  |  326|      1|				"name exists already in VRF %s!",                     \
  |  |  327|      1|				__func__, (ifp)->name, (ifp)->vrf->name);             \
  |  |  328|      1|		_iz;                                                                  \
  |  |  329|      1|	})
  ------------------
  662|      1|}

jhash:
   64|  63.7k|{
   65|  63.7k|	uint32_t a, b, c, len;
   66|  63.7k|	const uint8_t *k = key;
   67|       |
   68|  63.7k|	len = length;
   69|  63.7k|	a = b = JHASH_GOLDEN_RATIO;
  ------------------
  |  |   24|  63.7k|#define JHASH_GOLDEN_RATIO  0x9e3779b9
  ------------------
   70|  63.7k|	c = initval;
   71|       |
   72|   124k|	while (len >= 12) {
  ------------------
  |  Branch (72:9): [True: 60.8k, False: 63.7k]
  ------------------
   73|  60.8k|		a += (k[0] + ((uint32_t)k[1] << 8) + ((uint32_t)k[2] << 16)
   74|  60.8k|		      + ((uint32_t)k[3] << 24));
   75|  60.8k|		b += (k[4] + ((uint32_t)k[5] << 8) + ((uint32_t)k[6] << 16)
   76|  60.8k|		      + ((uint32_t)k[7] << 24));
   77|  60.8k|		c += (k[8] + ((uint32_t)k[9] << 8) + ((uint32_t)k[10] << 16)
   78|  60.8k|		      + ((uint32_t)k[11] << 24));
   79|       |
   80|  60.8k|		__jhash_mix(a, b, c);
  ------------------
  |  |   28|  60.8k|	{                                                                      \
  |  |   29|  60.8k|		a -= b;                                                        \
  |  |   30|  60.8k|		a -= c;                                                        \
  |  |   31|  60.8k|		a ^= (c >> 13);                                                \
  |  |   32|  60.8k|		b -= c;                                                        \
  |  |   33|  60.8k|		b -= a;                                                        \
  |  |   34|  60.8k|		b ^= (a << 8);                                                 \
  |  |   35|  60.8k|		c -= a;                                                        \
  |  |   36|  60.8k|		c -= b;                                                        \
  |  |   37|  60.8k|		c ^= (b >> 13);                                                \
  |  |   38|  60.8k|		a -= b;                                                        \
  |  |   39|  60.8k|		a -= c;                                                        \
  |  |   40|  60.8k|		a ^= (c >> 12);                                                \
  |  |   41|  60.8k|		b -= c;                                                        \
  |  |   42|  60.8k|		b -= a;                                                        \
  |  |   43|  60.8k|		b ^= (a << 16);                                                \
  |  |   44|  60.8k|		c -= a;                                                        \
  |  |   45|  60.8k|		c -= b;                                                        \
  |  |   46|  60.8k|		c ^= (b >> 5);                                                 \
  |  |   47|  60.8k|		a -= b;                                                        \
  |  |   48|  60.8k|		a -= c;                                                        \
  |  |   49|  60.8k|		a ^= (c >> 3);                                                 \
  |  |   50|  60.8k|		b -= c;                                                        \
  |  |   51|  60.8k|		b -= a;                                                        \
  |  |   52|  60.8k|		b ^= (a << 10);                                                \
  |  |   53|  60.8k|		c -= a;                                                        \
  |  |   54|  60.8k|		c -= b;                                                        \
  |  |   55|  60.8k|		c ^= (b >> 15);                                                \
  |  |   56|  60.8k|	}
  ------------------
   81|       |
   82|  60.8k|		k += 12;
   83|  60.8k|		len -= 12;
   84|  60.8k|	}
   85|       |
   86|  63.7k|	c += length;
   87|  63.7k|	switch (len) {
  ------------------
  |  Branch (87:10): [True: 58.3k, False: 5.42k]
  ------------------
   88|    552|	case 11:
  ------------------
  |  Branch (88:2): [True: 552, False: 63.2k]
  ------------------
   89|    552|		c += ((uint32_t)k[10] << 24);
   90|       |	/* fallthru */
   91|  1.29k|	case 10:
  ------------------
  |  Branch (91:2): [True: 740, False: 63.0k]
  ------------------
   92|  1.29k|		c += ((uint32_t)k[9] << 16);
   93|       |	/* fallthru */
   94|  2.65k|	case 9:
  ------------------
  |  Branch (94:2): [True: 1.35k, False: 62.4k]
  ------------------
   95|  2.65k|		c += ((uint32_t)k[8] << 8);
   96|       |	/* fallthru */
   97|  2.95k|	case 8:
  ------------------
  |  Branch (97:2): [True: 304, False: 63.4k]
  ------------------
   98|  2.95k|		b += ((uint32_t)k[7] << 24);
   99|       |	/* fallthru */
  100|  2.95k|	case 7:
  ------------------
  |  Branch (100:2): [True: 0, False: 63.7k]
  ------------------
  101|  2.95k|		b += ((uint32_t)k[6] << 16);
  102|       |	/* fallthru */
  103|  2.95k|	case 6:
  ------------------
  |  Branch (103:2): [True: 1, False: 63.7k]
  ------------------
  104|  2.95k|		b += ((uint32_t)k[5] << 8);
  105|       |	/* fallthru */
  106|  2.95k|	case 5:
  ------------------
  |  Branch (106:2): [True: 0, False: 63.7k]
  ------------------
  107|  2.95k|		b += k[4];
  108|       |	/* fallthru */
  109|  57.4k|	case 4:
  ------------------
  |  Branch (109:2): [True: 54.5k, False: 9.28k]
  ------------------
  110|  57.4k|		a += ((uint32_t)k[3] << 24);
  111|       |	/* fallthru */
  112|  57.7k|	case 3:
  ------------------
  |  Branch (112:2): [True: 296, False: 63.4k]
  ------------------
  113|  57.7k|		a += ((uint32_t)k[2] << 16);
  114|       |	/* fallthru */
  115|  58.0k|	case 2:
  ------------------
  |  Branch (115:2): [True: 268, False: 63.5k]
  ------------------
  116|  58.0k|		a += ((uint32_t)k[1] << 8);
  117|       |	/* fallthru */
  118|  58.3k|	case 1:
  ------------------
  |  Branch (118:2): [True: 339, False: 63.4k]
  ------------------
  119|  58.3k|		a += k[0];
  120|  63.7k|	}
  121|       |
  122|  63.7k|	__jhash_mix(a, b, c);
  ------------------
  |  |   28|  63.7k|	{                                                                      \
  |  |   29|  63.7k|		a -= b;                                                        \
  |  |   30|  63.7k|		a -= c;                                                        \
  |  |   31|  63.7k|		a ^= (c >> 13);                                                \
  |  |   32|  63.7k|		b -= c;                                                        \
  |  |   33|  63.7k|		b -= a;                                                        \
  |  |   34|  63.7k|		b ^= (a << 8);                                                 \
  |  |   35|  63.7k|		c -= a;                                                        \
  |  |   36|  63.7k|		c -= b;                                                        \
  |  |   37|  63.7k|		c ^= (b >> 13);                                                \
  |  |   38|  63.7k|		a -= b;                                                        \
  |  |   39|  63.7k|		a -= c;                                                        \
  |  |   40|  63.7k|		a ^= (c >> 12);                                                \
  |  |   41|  63.7k|		b -= c;                                                        \
  |  |   42|  63.7k|		b -= a;                                                        \
  |  |   43|  63.7k|		b ^= (a << 16);                                                \
  |  |   44|  63.7k|		c -= a;                                                        \
  |  |   45|  63.7k|		c -= b;                                                        \
  |  |   46|  63.7k|		c ^= (b >> 5);                                                 \
  |  |   47|  63.7k|		a -= b;                                                        \
  |  |   48|  63.7k|		a -= c;                                                        \
  |  |   49|  63.7k|		a ^= (c >> 3);                                                 \
  |  |   50|  63.7k|		b -= c;                                                        \
  |  |   51|  63.7k|		b -= a;                                                        \
  |  |   52|  63.7k|		b ^= (a << 10);                                                \
  |  |   53|  63.7k|		c -= a;                                                        \
  |  |   54|  63.7k|		c -= b;                                                        \
  |  |   55|  63.7k|		c ^= (b >> 15);                                                \
  |  |   56|  63.7k|	}
  ------------------
  123|       |
  124|  63.7k|	return c;
  125|  63.7k|}

json_object_free:
  106|      1|{
  107|      1|	json_object_put(obj);
  108|      1|}

ldp_sync_if_is_enabled:
   52|      1|{
   53|       |	/* return true if LDP-SYNC is configured on this interface */
   54|      1|	if (ldp_sync_info &&
  ------------------
  |  Branch (54:6): [True: 0, False: 1]
  ------------------
   55|      0|	    ldp_sync_info->enabled == LDP_IGP_SYNC_ENABLED &&
  ------------------
  |  |   21|      1|#define LDP_IGP_SYNC_ENABLED        1
  ------------------
  |  Branch (55:6): [True: 0, False: 0]
  ------------------
   56|      0|	    ldp_sync_info->state == LDP_IGP_SYNC_STATE_REQUIRED_NOT_UP)
  ------------------
  |  |   24|      0|#define LDP_IGP_SYNC_STATE_REQUIRED_NOT_UP  1
  ------------------
  |  Branch (56:6): [True: 0, False: 0]
  ------------------
   57|      0|		return true;
   58|       |
   59|      1|	return false;
   60|      1|}

lib_error_init:
  377|      1|{
  378|      1|	log_ref_add(ferr_lib_warn);
  379|      1|	log_ref_add(ferr_lib_err);
  380|      1|}

frr_init_vtydir:
  317|      1|{
  318|      1|	snprintf(frr_vtydir, sizeof(frr_vtydir), DAEMON_VTY_DIR, "", "");
  ------------------
  |  |   32|      1|#define DAEMON_VTY_DIR "/var/run%s%s"
  ------------------
  319|      1|}
frr_preinit:
  322|      1|{
  323|      1|	di = daemon;
  324|      1|	frr_is_after_fork = false;
  325|       |
  326|       |	/* basename(), opencoded. */
  327|      1|	char *p = strrchr(argv[0], '/');
  328|      1|	di->progname = p ? p + 1 : argv[0];
  ------------------
  |  Branch (328:17): [True: 0, False: 1]
  ------------------
  329|       |
  330|      1|	umask(0027);
  331|       |
  332|      1|	log_args_init(daemon->early_logging);
  333|       |
  334|      1|	opt_extend(&os_always);
  335|      1|	if (!(di->flags & FRR_NO_SPLIT_CONFIG))
  ------------------
  |  |   31|      1|#define FRR_NO_SPLIT_CONFIG	(1 << 3)
  ------------------
  |  Branch (335:6): [True: 1, False: 0]
  ------------------
  336|      1|		opt_extend(&os_cfg);
  337|      1|	if (!(di->flags & FRR_LIMITED_CLI))
  ------------------
  |  |   30|      1|#define FRR_LIMITED_CLI		(1 << 2)
  ------------------
  |  Branch (337:6): [True: 1, False: 0]
  ------------------
  338|      1|		opt_extend(&os_fullcli);
  339|      1|	if (!(di->flags & FRR_NO_PID))
  ------------------
  |  |   32|      1|#define FRR_NO_PID		(1 << 4)
  ------------------
  |  Branch (339:6): [True: 1, False: 0]
  ------------------
  340|      1|		opt_extend(&os_pid);
  341|      1|	if (!(di->flags & FRR_NO_PRIVSEP))
  ------------------
  |  |   28|      1|#define FRR_NO_PRIVSEP		(1 << 0)
  ------------------
  |  Branch (341:6): [True: 1, False: 0]
  ------------------
  342|      1|		opt_extend(&os_user);
  343|      1|	if (!(di->flags & FRR_NO_ZCLIENT))
  ------------------
  |  |   34|      1|#define FRR_NO_ZCLIENT		(1 << 5)
  ------------------
  |  Branch (343:6): [True: 1, False: 0]
  ------------------
  344|      1|		opt_extend(&os_zclient);
  345|      1|	if (!(di->flags & FRR_NO_TCPVTY))
  ------------------
  |  |   29|      1|#define FRR_NO_TCPVTY		(1 << 1)
  ------------------
  |  Branch (345:6): [True: 1, False: 0]
  ------------------
  346|      1|		opt_extend(&os_vty);
  347|      1|	if (di->flags & FRR_DETACH_LATER)
  ------------------
  |  |   41|      1|#define FRR_DETACH_LATER	(1 << 6)
  ------------------
  |  Branch (347:6): [True: 0, False: 1]
  ------------------
  348|      0|		nodetach_daemon = true;
  349|       |
  350|      1|	frr_init_vtydir();
  351|      1|	snprintf(config_default, sizeof(config_default), "%s/%s.conf",
  352|      1|		 frr_sysconfdir, di->name);
  353|      1|	snprintf(pidfile_default, sizeof(pidfile_default), "%s/%s.pid",
  354|      1|		 frr_vtydir, di->name);
  355|      1|	snprintf(frr_zclientpath, sizeof(frr_zclientpath),
  356|      1|		 ZEBRA_SERV_PATH, "", "");
  ------------------
  |  |  792|      1|#define ZEBRA_SERV_PATH "/var/run%s%s/zserv.api"
  ------------------
  357|       |#ifdef HAVE_SQLITE3
  358|       |	snprintf(dbfile_default, sizeof(dbfile_default), "%s/%s.db",
  359|       |		 frr_dbdir, di->name);
  360|       |#endif
  361|       |
  362|      1|	strlcpy(frr_protoname, di->logname, sizeof(frr_protoname));
  363|      1|	strlcpy(frr_protonameinst, di->logname, sizeof(frr_protonameinst));
  364|       |
  365|      1|	di->cli_mode = FRR_CLI_CLASSIC;
  366|       |
  367|       |	/* we may be starting with extra FDs open for whatever purpose,
  368|       |	 * e.g. logging, some module, etc.  Recording them here allows later
  369|       |	 * checking whether an fd is valid for such extension purposes,
  370|       |	 * without this we could end up e.g. logging to a BGP session fd.
  371|       |	 */
  372|      1|	startup_fds = 0;
  373|     65|	for (int i = 0; i < 64; i++) {
  ------------------
  |  Branch (373:18): [True: 64, False: 1]
  ------------------
  374|     64|		struct stat st;
  375|       |
  376|     64|		if (fstat(i, &st))
  ------------------
  |  Branch (376:7): [True: 60, False: 4]
  ------------------
  377|     60|			continue;
  378|      4|		if (S_ISDIR(st.st_mode) || S_ISBLK(st.st_mode))
  ------------------
  |  Branch (378:7): [True: 0, False: 4]
  |  Branch (378:30): [True: 0, False: 4]
  ------------------
  379|      0|			continue;
  380|       |
  381|      4|		startup_fds |= UINT64_C(0x1) << (uint64_t)i;
  382|      4|	}
  383|       |
  384|       |	/* note this doesn't do anything, it just grabs state, so doing it
  385|       |	 * early in _preinit is perfect.
  386|       |	 */
  387|      1|	systemd_init_env();
  388|      1|}
frr_init_fast:
  827|      1|{
  828|      1|	struct log_arg *log_arg;
  829|       |#if 0
  830|       |	struct option_chain *oc;
  831|       |	struct frrmod_runtime *module;
  832|       |	char moderr[256];
  833|       |	const char *dir;
  834|       |	dir = di->module_path ? di->module_path : frr_moduledir;
  835|       |#endif
  836|       |#if 0
  837|       |#ifdef HAVE_SQLITE3
  838|       |	snprintf(dbfile_default, sizeof(dbfile_default), "%s/%s%s%s.db",
  839|       |		 frr_dbdir, p_pathspace, di->name, p_instance);
  840|       |#endif
  841|       |#endif
  842|      1|	struct zprivs_ids_t ids;
  843|       |
  844|      1|	zprivs_preinit(di->privs);
  845|      1|	zprivs_get_ids(&ids);
  846|       |
  847|      1|	zlog_init(di->progname, di->logname, di->instance,
  848|      1|		  ids.uid_normal, ids.gid_normal);
  849|      1|	zlog_tls_buffer_init();
  850|       |
  851|      1|	while ((log_arg = log_args_pop(di->early_logging))) {
  ------------------
  |  Branch (851:9): [True: 0, False: 1]
  ------------------
  852|      0|		command_setup_early_logging(log_arg->target,
  853|      0|					    di->early_loglevel);
  854|       |		/* this is a bit of a hack,
  855|       |		   but need to notice when
  856|       |		   the target is stdout */
  857|      0|		if (strcmp(log_arg->target, "stdout") == 0)
  ------------------
  |  Branch (857:7): [True: 0, False: 0]
  ------------------
  858|      0|			logging_to_stdout = true;
  859|      0|		XFREE(MTYPE_TMP, log_arg);
  ------------------
  |  |  170|      0|	do {                                                                   \
  |  |  171|      0|		qfree(mtype, ptr);                                             \
  |  |  172|      0|		ptr = NULL;                                                    \
  |  |  173|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  860|      0|	}
  861|       |
  862|       |#if 0
  863|       |	if (!frr_zclient_addr(&zclient_addr, &zclient_addr_len,
  864|       |			      frr_zclientpath)) {
  865|       |		fprintf(stderr, "Invalid zserv socket path: %s\n",
  866|       |			frr_zclientpath);
  867|       |		exit(1);
  868|       |	}
  869|       |
  870|       |	/* don't mkdir these as root... */
  871|       |	if (!(di->flags & FRR_NO_PRIVSEP)) {
  872|       |		if (!di->pid_file || !di->vty_path)
  873|       |			frr_mkdir(frr_vtydir, false);
  874|       |		if (di->pid_file)
  875|       |			frr_mkdir(di->pid_file, true);
  876|       |		if (di->vty_path)
  877|       |			frr_mkdir(di->vty_path, true);
  878|       |	}
  879|       |#endif
  880|       |
  881|       |#if 0
  882|       |	frrmod_init(di->module);
  883|       |	while (modules) {
  884|       |		modules = (oc = modules)->next;
  885|       |		module = frrmod_load(oc->arg, dir, moderr, sizeof(moderr));
  886|       |		if (!module) {
  887|       |			fprintf(stderr, "%s\n", moderr);
  888|       |			exit(1);
  889|       |		}
  890|       |		XFREE(MTYPE_TMP, oc);
  891|       |	}
  892|       |
  893|       |#endif
  894|       |
  895|      1|	zprivs_init(di->privs);
  896|      1|	master = event_master_create(NULL);
  897|       |
  898|       |/* We don't want signal handlers for fuzzing, libFuzzer uses signals for
  899|       | * process control */
  900|       |#if 0
  901|       |	signal_init(master, di->n_signals, di->signals);
  902|       |#endif
  903|       |
  904|       |#if 0
  905|       |#ifdef HAVE_SQLITE3
  906|       |	if (!di->db_file)
  907|       |		di->db_file = dbfile_default;
  908|       |	db_init(di->db_file);
  909|       |#endif
  910|       |
  911|       |#endif
  912|      1|	if (di->flags & FRR_LIMITED_CLI)
  ------------------
  |  |   30|      1|#define FRR_LIMITED_CLI		(1 << 2)
  ------------------
  |  Branch (912:6): [True: 0, False: 1]
  ------------------
  913|      0|		cmd_init(-1);
  914|      1|	else
  915|      1|		cmd_init(1);
  916|       |
  917|      1|	vty_init(master, di->log_always);
  918|       |
  919|       |#if 0
  920|       |	log_filter_cmd_init();
  921|       |#endif
  922|       |
  923|       |#if 0
  924|       |	frr_pthread_init();
  925|       |#endif
  926|       |
  927|      1|	log_ref_init();
  928|       |#if 0
  929|       |	log_ref_vty_init();
  930|       |#endif
  931|      1|	lib_error_init();
  932|       |
  933|       |#if 0
  934|       |	yang_init();
  935|       |
  936|       |	debug_init_cli();
  937|       |
  938|       |	nb_init(master, di->yang_modules, di->n_yang_modules);
  939|       |	if (nb_db_init() != NB_OK)
  940|       |		flog_warn(EC_LIB_NB_DATABASE,
  941|       |			  "%s: failed to initialize northbound database",
  942|       |			  __func__);
  943|       |#endif
  944|       |
  945|      1|	return master;
  946|      1|}
frr_get_cli_mode:
  955|      4|{
  956|      4|	return di ? di->cli_mode : FRR_CLI_CLASSIC;
  ------------------
  |  Branch (956:9): [True: 4, False: 0]
  ------------------
  957|      4|}
frr_get_fd_limit:
  960|      1|{
  961|      1|	return di ? di->limit_fds : 0;
  ------------------
  |  Branch (961:9): [True: 1, False: 0]
  ------------------
  962|      1|}
libfrr.c:opt_extend:
   88|      7|{
   89|      7|	const struct option *lo;
   90|       |
   91|      7|	strlcat(comb_optstr, os->optstr, sizeof(comb_optstr));
   92|      7|	strlcat(comb_helpstr, os->helpstr, sizeof(comb_helpstr));
   93|     31|	for (lo = os->longopts; lo->name; lo++)
  ------------------
  |  Branch (93:26): [True: 24, False: 7]
  ------------------
   94|     24|		memcpy(comb_next_lo++, lo, sizeof(*lo));
   95|      7|}

list_new:
   48|  1.82k|{
   49|  1.82k|	return XCALLOC(MTYPE_LINK_LIST, sizeof(struct list));
  ------------------
  |  |  165|  1.82k|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
   50|  1.82k|}
listnode_add:
   85|  22.7k|{
   86|  22.7k|	frrtrace(2, frr_libfrr, list_add, list, val);
  ------------------
  |  |   61|  22.7k|#define frrtrace(nargs, provider, name, ...) (void)0
  ------------------
   87|       |
   88|  22.7k|	struct listnode *node;
   89|       |
   90|  22.7k|	assert(val != NULL);
  ------------------
  |  |   51|  22.7k|	({                                                                     \
  |  |   52|  22.7k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  22.7k|			(used)) = {                                            \
  |  |   54|  22.7k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  22.7k|	{                                                                      \
  |  |  |  |  284|  22.7k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  22.7k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  22.7k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  22.7k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  22.7k|	}                                                                      \
  |  |  ------------------
  |  |   55|  22.7k|			.expr = #expr_,                                        \
  |  |   56|  22.7k|		};                                                             \
  |  |   57|  22.7k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  22.7k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  22.7k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  22.7k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  22.7k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 22.7k]
  |  |  |  Branch (58:24): [True: 22.7k, False: 0]
  |  |  ------------------
  |  |   59|  22.7k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  22.7k|	})
  ------------------
   91|       |
   92|  22.7k|	node = listnode_new(list, val);
   93|       |
   94|  22.7k|	node->prev = list->tail;
   95|       |
   96|  22.7k|	if (list->head == NULL)
  ------------------
  |  Branch (96:6): [True: 1.37k, False: 21.3k]
  ------------------
   97|  1.37k|		list->head = node;
   98|  21.3k|	else
   99|  21.3k|		list->tail->next = node;
  100|  22.7k|	list->tail = node;
  101|       |
  102|  22.7k|	list->count++;
  103|       |
  104|  22.7k|	return node;
  105|  22.7k|}
listnode_delete:
  303|  18.2k|{
  304|  18.2k|	frrtrace(2, frr_libfrr, list_remove, list, val);
  ------------------
  |  |   61|  18.2k|#define frrtrace(nargs, provider, name, ...) (void)0
  ------------------
  305|       |
  306|  18.2k|	struct listnode *node = listnode_lookup(list, val);
  307|       |
  308|  18.2k|	if (node)
  ------------------
  |  Branch (308:6): [True: 18.2k, False: 0]
  ------------------
  309|  18.2k|		list_delete_node(list, node);
  310|  18.2k|}
list_delete_all_node:
  325|  1.76k|{
  326|  1.76k|	struct listnode *node;
  327|  1.76k|	struct listnode *next;
  328|       |
  329|  1.76k|	assert(list);
  ------------------
  |  |   51|  1.76k|	({                                                                     \
  |  |   52|  1.76k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  1.76k|			(used)) = {                                            \
  |  |   54|  1.76k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  1.76k|	{                                                                      \
  |  |  |  |  284|  1.76k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  1.76k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  1.76k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  1.76k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  1.76k|	}                                                                      \
  |  |  ------------------
  |  |   55|  1.76k|			.expr = #expr_,                                        \
  |  |   56|  1.76k|		};                                                             \
  |  |   57|  1.76k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  1.76k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  1.76k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  1.76k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  1.76k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 1.76k]
  |  |  |  Branch (58:24): [True: 1.76k, False: 0]
  |  |  ------------------
  |  |   59|  1.76k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  1.76k|	})
  ------------------
  330|  2.16k|	for (node = list->head; node; node = next) {
  ------------------
  |  Branch (330:26): [True: 400, False: 1.76k]
  ------------------
  331|    400|		next = node->next;
  332|    400|		if (*list->del)
  ------------------
  |  Branch (332:7): [True: 0, False: 400]
  ------------------
  333|      0|			(*list->del)(node->data);
  334|    400|		listnode_free(list, node);
  335|    400|	}
  336|       |	list->head = list->tail = NULL;
  337|  1.76k|	list->count = 0;
  338|  1.76k|}
list_delete:
  341|  1.76k|{
  342|  1.76k|	assert(*list);
  ------------------
  |  |   51|  1.76k|	({                                                                     \
  |  |   52|  1.76k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  1.76k|			(used)) = {                                            \
  |  |   54|  1.76k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  1.76k|	{                                                                      \
  |  |  |  |  284|  1.76k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  1.76k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  1.76k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  1.76k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  1.76k|	}                                                                      \
  |  |  ------------------
  |  |   55|  1.76k|			.expr = #expr_,                                        \
  |  |   56|  1.76k|		};                                                             \
  |  |   57|  1.76k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  1.76k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  1.76k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  1.76k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  1.76k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 1.76k]
  |  |  |  Branch (58:24): [True: 1.76k, False: 0]
  |  |  ------------------
  |  |   59|  1.76k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  1.76k|	})
  ------------------
  343|  1.76k|	list_delete_all_node(*list);
  344|  1.76k|	list_free_internal(*list);
  345|       |	*list = NULL;
  346|  1.76k|}
listnode_lookup:
  349|  18.2k|{
  350|  18.2k|	struct listnode *node;
  351|       |
  352|  18.2k|	assert(list);
  ------------------
  |  |   51|  18.2k|	({                                                                     \
  |  |   52|  18.2k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  18.2k|			(used)) = {                                            \
  |  |   54|  18.2k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  18.2k|	{                                                                      \
  |  |  |  |  284|  18.2k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  18.2k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  18.2k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  18.2k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  18.2k|	}                                                                      \
  |  |  ------------------
  |  |   55|  18.2k|			.expr = #expr_,                                        \
  |  |   56|  18.2k|		};                                                             \
  |  |   57|  18.2k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  18.2k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  18.2k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  18.2k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  18.2k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 18.2k]
  |  |  |  Branch (58:24): [True: 18.2k, False: 0]
  |  |  ------------------
  |  |   59|  18.2k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  18.2k|	})
  ------------------
  353|  18.2k|	for (node = listhead(list); node; node = listnextnode(node))
  ------------------
  |  |   51|  18.2k|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  ------------------
  |  |  |  Branch (51:22): [True: 18.2k, False: 0]
  |  |  ------------------
  ------------------
              	for (node = listhead(list); node; node = listnextnode(node))
  ------------------
  |  |   49|      0|#define listnextnode(X) ((X) ? ((X)->next) : NULL)
  |  |  ------------------
  |  |  |  Branch (49:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (353:30): [True: 18.2k, False: 0]
  ------------------
  354|  18.2k|		if (data == listgetdata(node))
  ------------------
  |  |   58|  18.2k|#define listgetdata(X) (assert(X), assert((X)->data != NULL), (X)->data)
  |  |  ------------------
  |  |  |  |   51|  18.2k|	({                                                                     \
  |  |  |  |   52|  18.2k|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|  18.2k|			(used)) = {                                            \
  |  |  |  |   54|  18.2k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|  18.2k|	{                                                                      \
  |  |  |  |  |  |  284|  18.2k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|  18.2k|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|  18.2k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|  18.2k|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|  18.2k|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|  18.2k|			.expr = #expr_,                                        \
  |  |  |  |   56|  18.2k|		};                                                             \
  |  |  |  |   57|  18.2k|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|  18.2k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|  18.2k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|  18.2k|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|  18.2k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 18.2k]
  |  |  |  |  |  Branch (58:24): [True: 18.2k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|  18.2k|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|  18.2k|	})
  |  |  ------------------
  |  |               #define listgetdata(X) (assert(X), assert((X)->data != NULL), (X)->data)
  |  |  ------------------
  |  |  |  |   51|  18.2k|	({                                                                     \
  |  |  |  |   52|  18.2k|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|  18.2k|			(used)) = {                                            \
  |  |  |  |   54|  18.2k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|  18.2k|	{                                                                      \
  |  |  |  |  |  |  284|  18.2k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|  18.2k|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|  18.2k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|  18.2k|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|  18.2k|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|  18.2k|			.expr = #expr_,                                        \
  |  |  |  |   56|  18.2k|		};                                                             \
  |  |  |  |   57|  18.2k|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|  18.2k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|  18.2k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|  18.2k|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|  18.2k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 18.2k]
  |  |  |  |  |  Branch (58:24): [True: 18.2k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|  18.2k|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|  18.2k|	})
  |  |  ------------------
  ------------------
  |  Branch (354:7): [True: 18.2k, False: 0]
  ------------------
  355|  18.2k|			return node;
  356|      0|	return NULL;
  357|  18.2k|}
list_delete_node:
  367|  18.2k|{
  368|  18.2k|	frrtrace(2, frr_libfrr, list_delete_node, list, node);
  ------------------
  |  |   61|  18.2k|#define frrtrace(nargs, provider, name, ...) (void)0
  ------------------
  369|       |
  370|  18.2k|	if (node->prev)
  ------------------
  |  Branch (370:6): [True: 0, False: 18.2k]
  ------------------
  371|      0|		node->prev->next = node->next;
  372|  18.2k|	else
  373|  18.2k|		list->head = node->next;
  374|  18.2k|	if (node->next)
  ------------------
  |  Branch (374:6): [True: 16.8k, False: 1.32k]
  ------------------
  375|  16.8k|		node->next->prev = node->prev;
  376|  1.32k|	else
  377|  1.32k|		list->tail = node->prev;
  378|  18.2k|	list->count--;
  379|  18.2k|	listnode_free(list, node);
  380|  18.2k|}
linklist.c:listnode_new:
   61|  22.7k|{
   62|  22.7k|	struct listnode *node;
   63|       |
   64|       |	/* if listnode memory is managed by the app then the val
   65|       |	 * passed in is the listnode
   66|       |	 */
   67|  22.7k|	if (list->flags & LINKLIST_FLAG_NODE_MEM_BY_APP) {
  ------------------
  |  |   35|  22.7k|#define LINKLIST_FLAG_NODE_MEM_BY_APP (1 << 0)
  ------------------
  |  Branch (67:6): [True: 0, False: 22.7k]
  ------------------
   68|      0|		node = val;
   69|      0|		node->prev = node->next = NULL;
   70|  22.7k|	} else {
   71|  22.7k|		node = XCALLOC(MTYPE_LINK_NODE, sizeof(struct listnode));
  ------------------
  |  |  165|  22.7k|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
   72|  22.7k|		node->data = val;
   73|  22.7k|	}
   74|  22.7k|	return node;
   75|  22.7k|}
linklist.c:listnode_free:
   79|  18.6k|{
   80|  18.6k|	if (!(list->flags & LINKLIST_FLAG_NODE_MEM_BY_APP))
  ------------------
  |  |   35|  18.6k|#define LINKLIST_FLAG_NODE_MEM_BY_APP (1 << 0)
  ------------------
  |  Branch (80:6): [True: 18.6k, False: 0]
  ------------------
   81|       |		XFREE(MTYPE_LINK_NODE, node);
  ------------------
  |  |  170|  18.6k|	do {                                                                   \
  |  |  171|  18.6k|		qfree(mtype, ptr);                                             \
  |  |  172|  18.6k|		ptr = NULL;                                                    \
  |  |  173|  18.6k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 18.6k]
  |  |  ------------------
  ------------------
   82|  18.6k|}
linklist.c:list_free_internal:
   54|  1.76k|{
   55|       |	XFREE(MTYPE_LINK_LIST, l);
  ------------------
  |  |  170|  1.76k|	do {                                                                   \
  |  |  171|  1.76k|		qfree(mtype, ptr);                                             \
  |  |  172|  1.76k|		ptr = NULL;                                                    \
  |  |  173|  1.76k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 1.76k]
  |  |  ------------------
  ------------------
   56|  1.76k|}

zlog_filterfile_init:
  139|      1|{
  140|      1|	zlog_file_init(&zcf->parent);
  141|      1|	zcf->parent.zlog_wrap = zlog_filterfile_fd;
  142|      1|}

log_vty.c:log_vty_preinit:
  881|      2|{
  882|      2|	hook_register(zlog_init, log_vty_init);
  ------------------
  |  |  143|      2|	_hook_reg_svar(&_hook_##hookname, _hook_typecheck_##hookname(func),    \
  |  |  ------------------
  |  |  |  |  136|      2|	do {                                                                   \
  |  |  |  |  137|      2|		static struct hookent stack_hookent = {};                      \
  |  |  |  |  138|      2|		_hook_register(hook, &stack_hookent, funcptr, arg, has_arg,    \
  |  |  |  |  139|      2|			       module, funcname, prio);                        \
  |  |  |  |  140|      2|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (140:11): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  144|      2|		       NULL, false, THIS_MODULE, #func, HOOK_DEFAULT_PRIORITY)
  ------------------
  883|      2|}
log_cmd_init:
  886|      1|{
  887|      1|	install_element(VIEW_NODE, &show_logging_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  888|      1|	install_element(ENABLE_NODE, &clear_log_cmdline_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  889|       |
  890|      1|	install_element(CONFIG_NODE, &config_log_stdout_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  891|      1|	install_element(CONFIG_NODE, &no_config_log_stdout_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  892|      1|	install_element(CONFIG_NODE, &config_log_monitor_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  893|      1|	install_element(CONFIG_NODE, &no_config_log_monitor_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  894|      1|	install_element(CONFIG_NODE, &config_log_file_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  895|      1|	install_element(CONFIG_NODE, &no_config_log_file_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  896|      1|	install_element(CONFIG_NODE, &config_log_syslog_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  897|      1|	install_element(CONFIG_NODE, &no_config_log_syslog_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  898|      1|	install_element(CONFIG_NODE, &config_log_facility_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  899|      1|	install_element(CONFIG_NODE, &no_config_log_facility_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  900|      1|	install_element(CONFIG_NODE, &config_log_record_priority_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  901|      1|	install_element(CONFIG_NODE, &no_config_log_record_priority_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  902|      1|	install_element(CONFIG_NODE, &config_log_timestamp_precision_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  903|      1|	install_element(CONFIG_NODE, &no_config_log_timestamp_precision_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  904|      1|	install_element(CONFIG_NODE, &config_log_ec_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  905|      1|	install_element(CONFIG_NODE, &config_log_xid_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  906|       |
  907|      1|	install_element(VIEW_NODE, &show_log_filter_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  908|      1|	install_element(CONFIG_NODE, &log_filter_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  909|      1|	install_element(CONFIG_NODE, &log_filter_clear_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  910|      1|	install_element(CONFIG_NODE, &config_log_filterfile_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  911|      1|	install_element(CONFIG_NODE, &no_config_log_filterfile_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  912|      1|	install_element(CONFIG_NODE, &log_immediate_mode_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  913|       |
  914|      1|	install_element(ENABLE_NODE, &debug_uid_backtrace_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  915|      1|	install_element(CONFIG_NODE, &debug_uid_backtrace_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  916|       |
  917|      1|	log_5424_cmd_init();
  918|      1|}
log_vty.c:log_vty_init:
  862|      1|{
  863|      1|	zlog_progname = progname;
  864|      1|	zlog_protoname = protoname;
  865|       |
  866|      1|	zlog_set_prefix_ec(true);
  867|      1|	zlog_set_prefix_xid(true);
  868|       |
  869|      1|	zlog_filterfile_init(&zt_filterfile);
  870|       |
  871|      1|	if (sd_stdout_is_journal) {
  ------------------
  |  Branch (871:6): [True: 0, False: 1]
  ------------------
  872|      0|		stdout_journald_in_use = true;
  873|      0|		zlog_5424_init(&zt_stdout_journald);
  874|      0|		zlog_5424_apply_dst(&zt_stdout_journald);
  875|      0|	} else
  876|      1|		zlog_file_set_fd(&zt_stdout_file, STDOUT_FILENO);
  877|      1|	return 0;
  878|      1|}

qmalloc:
  103|  3.33k|{
  104|  3.33k|	return mt_checkalloc(mt, malloc(size), size);
  105|  3.33k|}
qcalloc:
  108|  99.0k|{
  109|  99.0k|	return mt_checkalloc(mt, calloc(size, 1), size);
  110|  99.0k|}
qrealloc:
  113|  1.33k|{
  114|  1.33k|	if (ptr)
  ------------------
  |  Branch (114:6): [True: 943, False: 392]
  ------------------
  115|    943|		mt_count_free(mt, ptr);
  116|  1.33k|	return mt_checkalloc(mt, ptr ? realloc(ptr, size) : malloc(size), size);
  ------------------
  |  Branch (116:27): [True: 943, False: 392]
  ------------------
  117|  1.33k|}
qstrdup:
  120|    131|{
  121|    131|	return str ? mt_checkalloc(mt, strdup(str), strlen(str) + 1) : NULL;
  ------------------
  |  Branch (121:9): [True: 131, False: 0]
  ------------------
  122|    131|}
qfree:
  131|  63.2k|{
  132|  63.2k|	if (ptr)
  ------------------
  |  Branch (132:6): [True: 63.2k, False: 2]
  ------------------
  133|  63.2k|		mt_count_free(mt, ptr);
  134|  63.2k|	free(ptr);
  135|  63.2k|}
memory.c:mt_checkalloc:
   88|   103k|{
   89|   103k|	frrtrace(3, frr_libfrr, memalloc, mt, ptr, size);
  ------------------
  |  |   61|   103k|#define frrtrace(nargs, provider, name, ...) (void)0
  ------------------
   90|       |
   91|   103k|	if (__builtin_expect(ptr == NULL, 0)) {
  ------------------
  |  Branch (91:6): [True: 0, False: 103k]
  ------------------
   92|      0|		if (size) {
  ------------------
  |  Branch (92:7): [True: 0, False: 0]
  ------------------
   93|       |			/* malloc(0) is allowed to return NULL */
   94|      0|			memory_oom(size, mt->name);
   95|      0|		}
   96|      0|		return NULL;
   97|      0|	}
   98|   103k|	mt_count_alloc(mt, size, ptr);
   99|   103k|	return ptr;
  100|   103k|}
memory.c:mt_count_alloc:
   35|   103k|{
   36|   103k|	size_t current;
   37|   103k|	size_t oldsize;
   38|       |
   39|   103k|	current = 1 + atomic_fetch_add_explicit(&mt->n_alloc, 1,
   40|   103k|						memory_order_relaxed);
   41|       |
   42|   103k|	oldsize = atomic_load_explicit(&mt->n_max, memory_order_relaxed);
   43|   103k|	if (current > oldsize)
  ------------------
  |  Branch (43:6): [True: 40.2k, False: 63.5k]
  ------------------
   44|       |		/* note that this may fail, but approximation is sufficient */
   45|   103k|		atomic_compare_exchange_weak_explicit(&mt->n_max, &oldsize,
   46|  40.2k|						      current,
   47|  40.2k|						      memory_order_relaxed,
   48|  40.2k|						      memory_order_relaxed);
   49|       |
   50|   103k|	oldsize = atomic_load_explicit(&mt->size, memory_order_relaxed);
   51|   103k|	if (oldsize == 0)
  ------------------
  |  Branch (51:6): [True: 42, False: 103k]
  ------------------
   52|     42|		oldsize = atomic_exchange_explicit(&mt->size, size,
   53|     42|						   memory_order_relaxed);
   54|   103k|	if (oldsize != 0 && oldsize != size && oldsize != SIZE_VAR)
  ------------------
  |  |   30|  32.9k|#define SIZE_VAR ~0UL
  ------------------
  |  Branch (54:6): [True: 103k, False: 42]
  |  Branch (54:22): [True: 32.9k, False: 70.8k]
  |  Branch (54:41): [True: 10, False: 32.9k]
  ------------------
   55|   103k|		atomic_store_explicit(&mt->size, SIZE_VAR,
  ------------------
  |  |   30|     10|#define SIZE_VAR ~0UL
  ------------------
   56|     10|				      memory_order_relaxed);
   57|       |
   58|       |#ifdef HAVE_MALLOC_USABLE_SIZE
   59|       |	size_t mallocsz = malloc_usable_size(ptr);
   60|       |
   61|       |	current = mallocsz + atomic_fetch_add_explicit(&mt->total, mallocsz,
   62|       |						       memory_order_relaxed);
   63|       |	oldsize = atomic_load_explicit(&mt->max_size, memory_order_relaxed);
   64|       |	if (current > oldsize)
   65|       |		/* note that this may fail, but approximation is sufficient */
   66|       |		atomic_compare_exchange_weak_explicit(&mt->max_size, &oldsize,
   67|       |						      current,
   68|       |						      memory_order_relaxed,
   69|       |						      memory_order_relaxed);
   70|       |#endif
   71|   103k|}
memory.c:mt_count_free:
   74|  64.2k|{
   75|  64.2k|	frrtrace(2, frr_libfrr, memfree, mt, ptr);
  ------------------
  |  |   61|  64.2k|#define frrtrace(nargs, provider, name, ...) (void)0
  ------------------
   76|       |
   77|  64.2k|	assert(mt->n_alloc);
  ------------------
  |  |   51|  64.2k|	({                                                                     \
  |  |   52|  64.2k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  64.2k|			(used)) = {                                            \
  |  |   54|  64.2k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  64.2k|	{                                                                      \
  |  |  |  |  284|  64.2k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  64.2k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  64.2k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  64.2k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  64.2k|	}                                                                      \
  |  |  ------------------
  |  |   55|  64.2k|			.expr = #expr_,                                        \
  |  |   56|  64.2k|		};                                                             \
  |  |   57|  64.2k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  64.2k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  64.2k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  64.2k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  64.2k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 64.2k]
  |  |  |  Branch (58:24): [True: 64.2k, False: 0]
  |  |  ------------------
  |  |   59|  64.2k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  64.2k|	})
  ------------------
   78|  64.2k|	atomic_fetch_sub_explicit(&mt->n_alloc, 1, memory_order_relaxed);
   79|       |
   80|       |#ifdef HAVE_MALLOC_USABLE_SIZE
   81|       |	size_t mallocsz = malloc_usable_size(ptr);
   82|       |
   83|       |	atomic_fetch_sub_explicit(&mt->total, mallocsz, memory_order_relaxed);
   84|       |#endif
   85|  64.2k|}

ospf_memory.c:_mginit_OSPFD:
   89|      2|	{                                                                      \
   90|      2|		extern struct memgroup **mg_insert;                            \
   91|      2|		_mg_##mname.ref = mg_insert;                                   \
   92|      2|		*mg_insert = &_mg_##mname;                                     \
   93|      2|		mg_insert = &_mg_##mname.next;                                 \
   94|      2|	}                                                                      \
memory.c:_mginit_LIB:
   89|      2|	{                                                                      \
   90|      2|		extern struct memgroup **mg_insert;                            \
   91|      2|		_mg_##mname.ref = mg_insert;                                   \
   92|      2|		*mg_insert = &_mg_##mname;                                     \
   93|      2|		mg_insert = &_mg_##mname.next;                                 \
   94|      2|	}                                                                      \
zlog_targets.c:_mginit_LOG:
   89|      2|	{                                                                      \
   90|      2|		extern struct memgroup **mg_insert;                            \
   91|      2|		_mg_##mname.ref = mg_insert;                                   \
   92|      2|		*mg_insert = &_mg_##mname;                                     \
   93|      2|		mg_insert = &_mg_##mname.next;                                 \
   94|      2|	}                                                                      \

ospf_lsa.c:monotime_since:
   84|  97.2k|{
   85|  97.2k|	struct timeval tv;
   86|  97.2k|	monotime(&tv);
   87|  97.2k|	timersub(&tv, ref, &tv);
  ------------------
  |  Branch (87:2): [True: 1.13k, False: 96.1k]
  |  Branch (87:2): [Folded, False: 97.2k]
  ------------------
   88|  97.2k|	if (out)
  ------------------
  |  Branch (88:6): [True: 97.2k, False: 0]
  ------------------
   89|  97.2k|		*out = tv;
   90|  97.2k|	return (int64_t)tv.tv_sec * 1000000LL + tv.tv_usec;
   91|  97.2k|}
ospf_lsa.c:monotime:
   63|   125k|{
   64|   125k|	struct timespec ts;
   65|       |
   66|   125k|	clock_gettime(CLOCK_MONOTONIC, &ts);
   67|   125k|	if (tvo) {
  ------------------
  |  Branch (67:6): [True: 125k, False: 135]
  ------------------
   68|       |		TIMESPEC_TO_TIMEVAL(tvo, &ts);
   69|   125k|	}
   70|   125k|	return ts.tv_sec;
   71|   125k|}
ospf_packet.c:monotime_since:
   84|  2.68k|{
   85|  2.68k|	struct timeval tv;
   86|  2.68k|	monotime(&tv);
   87|  2.68k|	timersub(&tv, ref, &tv);
  ------------------
  |  Branch (87:2): [True: 716, False: 1.96k]
  |  Branch (87:2): [Folded, False: 2.68k]
  ------------------
   88|  2.68k|	if (out)
  ------------------
  |  Branch (88:6): [True: 0, False: 2.68k]
  ------------------
   89|      0|		*out = tv;
   90|  2.68k|	return (int64_t)tv.tv_sec * 1000000LL + tv.tv_usec;
   91|  2.68k|}
ospf_packet.c:monotime:
   63|  2.77k|{
   64|  2.77k|	struct timespec ts;
   65|       |
   66|  2.77k|	clock_gettime(CLOCK_MONOTONIC, &ts);
   67|  2.77k|	if (tvo) {
  ------------------
  |  Branch (67:6): [True: 2.77k, False: 0]
  ------------------
   68|       |		TIMESPEC_TO_TIMEVAL(tvo, &ts);
   69|  2.77k|	}
   70|  2.77k|	return ts.tv_sec;
   71|  2.77k|}
ospf_spf.c:monotime:
   63|    451|{
   64|    451|	struct timespec ts;
   65|       |
   66|    451|	clock_gettime(CLOCK_MONOTONIC, &ts);
   67|    451|	if (tvo) {
  ------------------
  |  Branch (67:6): [True: 451, False: 0]
  ------------------
   68|       |		TIMESPEC_TO_TIMEVAL(tvo, &ts);
   69|    451|	}
   70|    451|	return ts.tv_sec;
   71|    451|}
ospf_spf.c:monotime_since:
   84|    451|{
   85|    451|	struct timeval tv;
   86|    451|	monotime(&tv);
   87|    451|	timersub(&tv, ref, &tv);
  ------------------
  |  Branch (87:2): [True: 0, False: 451]
  |  Branch (87:2): [Folded, False: 451]
  ------------------
   88|    451|	if (out)
  ------------------
  |  Branch (88:6): [True: 0, False: 451]
  ------------------
   89|      0|		*out = tv;
   90|    451|	return (int64_t)tv.tv_sec * 1000000LL + tv.tv_usec;
   91|    451|}
ospfd.c:monotime:
   63|      1|{
   64|      1|	struct timespec ts;
   65|       |
   66|      1|	clock_gettime(CLOCK_MONOTONIC, &ts);
   67|      1|	if (tvo) {
  ------------------
  |  Branch (67:6): [True: 0, False: 1]
  ------------------
   68|       |		TIMESPEC_TO_TIMEVAL(tvo, &ts);
   69|      0|	}
   70|      1|	return ts.tv_sec;
   71|      1|}
ospf_flood.c:monotime_since:
   84|  8.78k|{
   85|  8.78k|	struct timeval tv;
   86|  8.78k|	monotime(&tv);
   87|  8.78k|	timersub(&tv, ref, &tv);
  ------------------
  |  Branch (87:2): [True: 1.21k, False: 7.56k]
  |  Branch (87:2): [Folded, False: 8.78k]
  ------------------
   88|  8.78k|	if (out)
  ------------------
  |  Branch (88:6): [True: 0, False: 8.78k]
  ------------------
   89|      0|		*out = tv;
   90|  8.78k|	return (int64_t)tv.tv_sec * 1000000LL + tv.tv_usec;
   91|  8.78k|}
ospf_flood.c:monotime:
   63|  8.87k|{
   64|  8.87k|	struct timespec ts;
   65|       |
   66|  8.87k|	clock_gettime(CLOCK_MONOTONIC, &ts);
   67|  8.87k|	if (tvo) {
  ------------------
  |  Branch (67:6): [True: 8.87k, False: 0]
  ------------------
   68|       |		TIMESPEC_TO_TIMEVAL(tvo, &ts);
   69|  8.87k|	}
   70|  8.87k|	return ts.tv_sec;
   71|  8.87k|}

ns_init:
  451|      1|{
  452|      1|	static int ns_initialised;
  453|       |
  454|      1|	ns_debug = 0;
  455|       |	/* silently return as initialisation done */
  456|      1|	if (ns_initialised == 1)
  ------------------
  |  Branch (456:6): [True: 0, False: 1]
  ------------------
  457|      0|		return;
  458|      1|	errno = 0;
  459|      1|	if (have_netns())
  ------------------
  |  Branch (459:6): [True: 1, False: 0]
  ------------------
  460|      1|		ns_default_ns_fd = open(NS_DEFAULT_NAME, O_RDONLY);
  ------------------
  |  |   27|      1|#define NS_DEFAULT_NAME    "/proc/self/ns/net"
  ------------------
  461|      0|	else {
  462|      0|		ns_default_ns_fd = -1;
  463|       |		default_ns = NULL;
  464|      0|	}
  465|      1|	ns_current_ns_fd = -1;
  466|      1|	ns_initialised = 1;
  467|      1|}
netns_linux.c:have_netns:
   87|      1|{
   88|      1|#ifdef HAVE_NETNS
   89|      1|	if (have_netns_enabled < 0) {
  ------------------
  |  Branch (89:6): [True: 1, False: 0]
  ------------------
   90|      1|		int fd = open(NS_DEFAULT_NAME, O_RDONLY);
  ------------------
  |  |   27|      1|#define NS_DEFAULT_NAME    "/proc/self/ns/net"
  ------------------
   91|       |
   92|      1|		if (fd < 0)
  ------------------
  |  Branch (92:7): [True: 0, False: 1]
  ------------------
   93|      0|			have_netns_enabled = 0;
   94|      1|		else {
   95|      1|			have_netns_enabled = 1;
   96|      1|			close(fd);
   97|      1|		}
   98|      1|	}
   99|      1|	return have_netns_enabled;
  100|       |#else
  101|       |	return 0;
  102|       |#endif
  103|      1|}

set_nonblocking:
   60|      2|{
   61|      2|	int flags;
   62|       |
   63|       |	/* According to the Single UNIX Spec, the return value for F_GETFL
   64|       |	   should
   65|       |	   never be negative. */
   66|      2|	flags = fcntl(fd, F_GETFL);
   67|      2|	if (flags < 0) {
  ------------------
  |  Branch (67:6): [True: 0, False: 2]
  ------------------
   68|      0|		flog_err(EC_LIB_SYSTEM_CALL,
  ------------------
  |  |  136|      0|#define flog_err(ferr_id, format, ...) 0
  ------------------
   69|      0|			 "fcntl(F_GETFL) failed for fd %d: %s", fd,
   70|      0|			 safe_strerror(errno));
   71|      0|		return -1;
   72|      0|	}
   73|      2|	if (fcntl(fd, F_SETFL, (flags | O_NONBLOCK)) < 0) {
  ------------------
  |  Branch (73:6): [True: 0, False: 2]
  ------------------
   74|      0|		flog_err(EC_LIB_SYSTEM_CALL,
  ------------------
  |  |  136|      0|#define flog_err(ferr_id, format, ...) 0
  ------------------
   75|      0|			 "fcntl failed setting fd %d non-blocking: %s", fd,
   76|      0|			 safe_strerror(errno));
   77|      0|		return -1;
   78|      0|	}
   79|      2|	return 0;
   80|      2|}
frr_sequence_next:
  112|      1|{
  113|      1|	static uint64_t last_sequence;
  114|      1|	struct timespec ts;
  115|       |
  116|      1|	(void)clock_gettime(CLOCK_MONOTONIC, &ts);
  117|      1|	if (last_sequence == (uint64_t)ts.tv_sec) {
  ------------------
  |  Branch (117:6): [True: 0, False: 1]
  ------------------
  118|      0|		last_sequence++;
  119|      0|		return last_sequence;
  120|      0|	}
  121|       |
  122|      1|	last_sequence = ts.tv_sec;
  123|      1|	return last_sequence;
  124|      1|}
frr_sequence32_next:
  127|      1|{
  128|       |	/* coverity[Y2K38_SAFETY] */
  129|      1|	return (uint32_t)frr_sequence_next();
  130|      1|}

ospf_lsa.c:frr_weak_random:
  100|    135|{
  101|       |	/* coverity[dont_call] */
  102|    135|	return random();
  103|    135|}
qobj.c:frr_weak_random:
  100|      8|{
  101|       |	/* coverity[dont_call] */
  102|      8|	return random();
  103|      8|}

nexthop_group_enable_vrf:
 1211|      1|{
 1212|      1|	struct nexthop_group_cmd *nhgc;
 1213|      1|	struct nexthop_hold *nhh;
 1214|       |
 1215|      1|	RB_FOREACH (nhgc, nhgc_entry_head, &nhgc_entries) {
  ------------------
  |  |  529|      1|	for ((_e) = RB_MIN(_name, (_head)); (_e) != NULL;                      \
  |  |  ------------------
  |  |  |  |  515|      1|#define RB_MIN(_name, _head)		_name##_RB_MIN(_head)
  |  |  ------------------
  |  |  |  Branch (529:38): [True: 0, False: 1]
  |  |  ------------------
  |  |  530|      1|	     (_e) = RB_NEXT(_name, (_e)))
  |  |  ------------------
  |  |  |  |  517|      0|#define RB_NEXT(_name, _elm)		_name##_RB_NEXT(_elm)
  |  |  ------------------
  ------------------
 1216|      0|		struct listnode *node;
 1217|       |
 1218|      0|		for (ALL_LIST_ELEMENTS_RO(nhgc->nhg_list, node, nhh)) {
  ------------------
  |  |  333|      0|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|      0|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|      0|	(node) != NULL && ((data) = static_cast(data, listgetdata(node)), 1);  \
  |  |  ------------------
  |  |  |  |  204|      0|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (334:2): [True: 0, False: 0]
  |  |  |  Branch (334:20): [True: 0, False: 0]
  |  |  ------------------
  |  |  335|      0|	(node) = listnextnode(node), ((data) = NULL)
  |  |  ------------------
  |  |  |  |   49|      0|#define listnextnode(X) ((X) ? ((X)->next) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1219|      0|			struct nexthop nhop;
 1220|      0|			struct nexthop *nh;
 1221|       |
 1222|      0|			if (!nexthop_group_parse_nhh(&nhop, nhh))
  ------------------
  |  Branch (1222:8): [True: 0, False: 0]
  ------------------
 1223|      0|				continue;
 1224|       |
 1225|      0|			nh = nexthop_exists(&nhgc->nhg, &nhop);
 1226|       |
 1227|      0|			if (nh)
  ------------------
  |  Branch (1227:8): [True: 0, False: 0]
  ------------------
 1228|      0|				continue;
 1229|       |
 1230|      0|			if (nhop.vrf_id != vrf->vrf_id)
  ------------------
  |  Branch (1230:8): [True: 0, False: 0]
  ------------------
 1231|      0|				continue;
 1232|       |
 1233|      0|			nh = nexthop_new();
 1234|       |
 1235|      0|			memcpy(nh, &nhop, sizeof(nhop));
 1236|      0|			_nexthop_add(&nhgc->nhg.nexthop, nh);
 1237|       |
 1238|      0|			if (nhg_hooks.add_nexthop)
  ------------------
  |  Branch (1238:8): [True: 0, False: 0]
  ------------------
 1239|      0|				nhg_hooks.add_nexthop(nhgc, nh);
 1240|      0|		}
 1241|      0|	}
 1242|      1|}

nb_cli_install_default:
 1843|      4|{
 1844|      4|	_install_element(node, &show_config_candidate_section_cmd);
 1845|       |
 1846|      4|	if (frr_get_cli_mode() != FRR_CLI_TRANSACTIONAL)
  ------------------
  |  Branch (1846:6): [True: 4, False: 0]
  ------------------
 1847|      4|		return;
 1848|       |
 1849|      0|	_install_element(node, &config_commit_cmd);
 1850|      0|	_install_element(node, &config_commit_comment_cmd);
 1851|      0|	_install_element(node, &config_commit_check_cmd);
 1852|      0|	_install_element(node, &config_update_cmd);
 1853|      0|	_install_element(node, &config_discard_cmd);
 1854|      0|	_install_element(node, &show_config_running_cmd);
 1855|      0|	_install_element(node, &show_config_candidate_cmd);
 1856|      0|	_install_element(node, &show_config_compare_cmd);
 1857|      0|	_install_element(node, &show_config_transaction_cmd);
 1858|      0|}

_rb_insert:
  367|      3|{
  368|      3|	struct rb_entry *rbe = rb_n2e(t, elm);
  369|      3|	struct rb_entry *tmp;
  370|      3|	struct rb_entry *parent = NULL;
  371|      3|	void *node;
  372|      3|	int comp = 0;
  373|       |
  374|      3|	tmp = RBH_ROOT(rbt);
  ------------------
  |  |   39|      3|#define RBH_ROOT(_rbt)		(_rbt)->rbt_root
  ------------------
  375|      3|	while (tmp != NULL) {
  ------------------
  |  Branch (375:9): [True: 0, False: 3]
  ------------------
  376|      0|		parent = tmp;
  377|       |
  378|      0|		node = rb_e2n(t, tmp);
  379|      0|		comp = (*t->t_compare)(elm, node);
  380|      0|		if (comp < 0)
  ------------------
  |  Branch (380:7): [True: 0, False: 0]
  ------------------
  381|      0|			tmp = RBE_LEFT(tmp);
  ------------------
  |  |   34|      0|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  382|      0|		else if (comp > 0)
  ------------------
  |  Branch (382:12): [True: 0, False: 0]
  ------------------
  383|      0|			tmp = RBE_RIGHT(tmp);
  ------------------
  |  |   35|      0|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  384|      0|		else
  385|      0|			return (node);
  386|      0|	}
  387|       |
  388|      3|	rbe_set(rbe, parent);
  389|       |
  390|      3|	if (parent != NULL) {
  ------------------
  |  Branch (390:6): [True: 0, False: 3]
  ------------------
  391|      0|		if (comp < 0)
  ------------------
  |  Branch (391:7): [True: 0, False: 0]
  ------------------
  392|      0|			RBE_LEFT(parent) = rbe;
  ------------------
  |  |   34|      0|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  393|      0|		else
  394|      0|			RBE_RIGHT(parent) = rbe;
  ------------------
  |  |   35|      0|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  395|       |
  396|      0|		rbe_if_augment(t, parent);
  397|      0|	} else
  398|      3|		RBH_ROOT(rbt) = rbe;
  ------------------
  |  |   39|      3|#define RBH_ROOT(_rbt)		(_rbt)->rbt_root
  ------------------
  399|       |
  400|      3|	rbe_insert_color(t, rbt, rbe);
  401|       |
  402|       |	return NULL;
  403|      3|}
_rb_find:
  408|     10|{
  409|     10|	struct rb_entry *tmp = RBH_ROOT(rbt);
  ------------------
  |  |   39|     10|#define RBH_ROOT(_rbt)		(_rbt)->rbt_root
  ------------------
  410|     10|	void *node;
  411|     10|	int comp;
  412|       |
  413|     10|	while (tmp != NULL) {
  ------------------
  |  Branch (413:9): [True: 7, False: 3]
  ------------------
  414|      7|		node = rb_e2n(t, tmp);
  415|      7|		comp = (*t->t_compare)(key, node);
  416|      7|		if (comp < 0)
  ------------------
  |  Branch (416:7): [True: 0, False: 7]
  ------------------
  417|      0|			tmp = RBE_LEFT(tmp);
  ------------------
  |  |   34|      0|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  418|      7|		else if (comp > 0)
  ------------------
  |  Branch (418:12): [True: 0, False: 7]
  ------------------
  419|      0|			tmp = RBE_RIGHT(tmp);
  ------------------
  |  |   35|      0|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  420|      7|		else
  421|      7|			return (node);
  422|      7|	}
  423|       |
  424|      3|	return NULL;
  425|     10|}
_rb_min:
  503|      1|{
  504|      1|	struct rb_entry *rbe = RBH_ROOT(rbt);
  ------------------
  |  |   39|      1|#define RBH_ROOT(_rbt)		(_rbt)->rbt_root
  ------------------
  505|      1|	struct rb_entry *parent = NULL;
  506|       |
  507|      1|	while (rbe != NULL) {
  ------------------
  |  Branch (507:9): [True: 0, False: 1]
  ------------------
  508|      0|		parent = rbe;
  509|      0|		rbe = RBE_LEFT(rbe);
  ------------------
  |  |   34|      0|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  510|      0|	}
  511|       |
  512|      1|	return (parent == NULL ? NULL : rb_e2n(t, parent));
  ------------------
  |  Branch (512:10): [True: 1, False: 0]
  ------------------
  513|      1|}
openbsd-tree.c:rb_n2e:
   21|      3|{
   22|      3|	unsigned long addr = (unsigned long)node;
   23|       |
   24|      3|	return ((struct rb_entry *)(addr + t->t_offset));
   25|      3|}
openbsd-tree.c:rb_e2n:
   28|      7|{
   29|      7|	unsigned long addr = (unsigned long)rbe;
   30|       |
   31|      7|	return ((void *)(addr - t->t_offset));
   32|      7|}
openbsd-tree.c:rbe_set:
   42|      3|{
   43|      3|	RBE_PARENT(rbe) = parent;
  ------------------
  |  |   36|      3|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
   44|      3|	RBE_LEFT(rbe) = RBE_RIGHT(rbe) = NULL;
  ------------------
  |  |   34|      3|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
              	RBE_LEFT(rbe) = RBE_RIGHT(rbe) = NULL;
  ------------------
  |  |   35|      3|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
   45|      3|	RBE_COLOR(rbe) = RB_RED;
  ------------------
  |  |   37|      3|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              	RBE_COLOR(rbe) = RB_RED;
  ------------------
  |  |  304|      3|#define RB_RED		1
  ------------------
   46|      3|}
openbsd-tree.c:rbe_insert_color:
  134|      3|{
  135|      3|	struct rb_entry *parent, *gparent, *tmp;
  136|       |
  137|      3|	while ((parent = RBE_PARENT(rbe)) != NULL
  ------------------
  |  |   36|      3|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  |  Branch (137:9): [True: 0, False: 3]
  ------------------
  138|      0|	       && RBE_COLOR(parent) == RB_RED) {
  ------------------
  |  |   37|      0|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              	       && RBE_COLOR(parent) == RB_RED) {
  ------------------
  |  |  304|      0|#define RB_RED		1
  ------------------
  |  Branch (138:12): [True: 0, False: 0]
  ------------------
  139|      0|		gparent = RBE_PARENT(parent);
  ------------------
  |  |   36|      0|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  140|       |
  141|      0|		if (parent == RBE_LEFT(gparent)) {
  ------------------
  |  |   34|      0|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (141:7): [True: 0, False: 0]
  ------------------
  142|      0|			tmp = RBE_RIGHT(gparent);
  ------------------
  |  |   35|      0|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  143|      0|			if (tmp != NULL && RBE_COLOR(tmp) == RB_RED) {
  ------------------
  |  |   37|      0|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              			if (tmp != NULL && RBE_COLOR(tmp) == RB_RED) {
  ------------------
  |  |  304|      0|#define RB_RED		1
  ------------------
  |  Branch (143:8): [True: 0, False: 0]
  |  Branch (143:23): [True: 0, False: 0]
  ------------------
  144|      0|				RBE_COLOR(tmp) = RB_BLACK;
  ------------------
  |  |   37|      0|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              				RBE_COLOR(tmp) = RB_BLACK;
  ------------------
  |  |  303|      0|#define RB_BLACK	0
  ------------------
  145|      0|				rbe_set_blackred(parent, gparent);
  146|      0|				rbe = gparent;
  147|      0|				continue;
  148|      0|			}
  149|       |
  150|      0|			if (RBE_RIGHT(parent) == rbe) {
  ------------------
  |  |   35|      0|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  |  Branch (150:8): [True: 0, False: 0]
  ------------------
  151|      0|				rbe_rotate_left(t, rbt, parent);
  152|      0|				tmp = parent;
  153|      0|				parent = rbe;
  154|      0|				rbe = tmp;
  155|      0|			}
  156|       |
  157|      0|			rbe_set_blackred(parent, gparent);
  158|      0|			rbe_rotate_right(t, rbt, gparent);
  159|      0|		} else {
  160|      0|			tmp = RBE_LEFT(gparent);
  ------------------
  |  |   34|      0|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  161|      0|			if (tmp != NULL && RBE_COLOR(tmp) == RB_RED) {
  ------------------
  |  |   37|      0|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              			if (tmp != NULL && RBE_COLOR(tmp) == RB_RED) {
  ------------------
  |  |  304|      0|#define RB_RED		1
  ------------------
  |  Branch (161:8): [True: 0, False: 0]
  |  Branch (161:23): [True: 0, False: 0]
  ------------------
  162|      0|				RBE_COLOR(tmp) = RB_BLACK;
  ------------------
  |  |   37|      0|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              				RBE_COLOR(tmp) = RB_BLACK;
  ------------------
  |  |  303|      0|#define RB_BLACK	0
  ------------------
  163|      0|				rbe_set_blackred(parent, gparent);
  164|      0|				rbe = gparent;
  165|      0|				continue;
  166|      0|			}
  167|       |
  168|      0|			if (RBE_LEFT(parent) == rbe) {
  ------------------
  |  |   34|      0|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (168:8): [True: 0, False: 0]
  ------------------
  169|      0|				rbe_rotate_right(t, rbt, parent);
  170|      0|				tmp = parent;
  171|      0|				parent = rbe;
  172|      0|				rbe = tmp;
  173|      0|			}
  174|       |
  175|      0|			rbe_set_blackred(parent, gparent);
  176|      0|			rbe_rotate_left(t, rbt, gparent);
  177|      0|		}
  178|      0|	}
  179|       |
  180|      3|	RBE_COLOR(RBH_ROOT(rbt)) = RB_BLACK;
  ------------------
  |  |   37|      3|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              	RBE_COLOR(RBH_ROOT(rbt)) = RB_BLACK;
  ------------------
  |  |  303|      3|#define RB_BLACK	0
  ------------------
  181|      3|}

if.c:if_name_head_RB_INSERT:
  371|      1|	{                                                                      \
  372|      1|		return (struct _type *)_rb_insert(_name##_RB_TYPE,             \
  373|      1|						  &head->rbh_root, elm);       \
  374|      1|	}                                                                      \
if.c:if_name_head_RB_FIND:
  386|      1|	{                                                                      \
  387|      1|		return (struct _type *)_rb_find(_name##_RB_TYPE,               \
  388|      1|						&head->rbh_root, key);         \
  389|      1|	}                                                                      \
nexthop_group.c:nhgc_entry_head_RB_MIN:
  414|      1|	{                                                                      \
  415|      1|		return (struct _type *)_rb_min(_name##_RB_TYPE,                \
  416|      1|					       &head->rbh_root);               \
  417|      1|	}                                                                      \
vrf.c:vrf_id_head_RB_COMPARE:
  488|      4|	{                                                                      \
  489|      4|		const struct _type *l = lptr, *r = rptr;                       \
  490|      4|		return _cmp(l, r);                                             \
  491|      4|	}                                                                      \
vrf.c:vrf_name_head_RB_COMPARE:
  488|      3|	{                                                                      \
  489|      3|		const struct _type *l = lptr, *r = rptr;                       \
  490|      3|		return _cmp(l, r);                                             \
  491|      3|	}                                                                      \
vrf.c:vrf_name_head_RB_FIND:
  386|      4|	{                                                                      \
  387|      4|		return (struct _type *)_rb_find(_name##_RB_TYPE,               \
  388|      4|						&head->rbh_root, key);         \
  389|      4|	}                                                                      \
vrf.c:vrf_id_head_RB_INSERT:
  371|      1|	{                                                                      \
  372|      1|		return (struct _type *)_rb_insert(_name##_RB_TYPE,             \
  373|      1|						  &head->rbh_root, elm);       \
  374|      1|	}                                                                      \
vrf.c:vrf_name_head_RB_INSERT:
  371|      1|	{                                                                      \
  372|      1|		return (struct _type *)_rb_insert(_name##_RB_TYPE,             \
  373|      1|						  &head->rbh_root, elm);       \
  374|      1|	}                                                                      \
vrf.c:vrf_id_head_RB_FIND:
  386|      5|	{                                                                      \
  387|      5|		return (struct _type *)_rb_find(_name##_RB_TYPE,               \
  388|      5|						&head->rbh_root, key);         \
  389|      5|	}                                                                      \

prefix_list_add_hook:
  272|      1|{
  273|      1|	prefix_master_ipv4.add_hook = func;
  274|      1|	prefix_master_ipv6.add_hook = func;
  275|      1|}
prefix_list_delete_hook:
  279|      1|{
  280|      1|	prefix_master_ipv4.delete_hook = func;
  281|      1|	prefix_master_ipv6.delete_hook = func;
  282|      1|}
prefix_list_init:
 1657|      1|{
 1658|      1|	plist_init(&prefix_master_ipv4.str);
 1659|      1|	plist_init(&prefix_master_orf_v4.str);
 1660|      1|	plist_init(&prefix_master_ipv6.str);
 1661|      1|	plist_init(&prefix_master_orf_v6.str);
 1662|       |
 1663|      1|	cmd_variable_handler_register(plist_var_handlers);
 1664|       |
 1665|      1|	prefix_list_init_ipv4();
 1666|      1|	prefix_list_init_ipv6();
 1667|      1|}
plist.c:prefix_list_init_ipv4:
 1625|      1|{
 1626|      1|	install_node(&prefix_node);
 1627|       |
 1628|      1|	install_element(VIEW_NODE, &show_ip_prefix_list_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1629|      1|	install_element(VIEW_NODE, &show_ip_prefix_list_prefix_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1630|      1|	install_element(VIEW_NODE, &show_ip_prefix_list_summary_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1631|      1|	install_element(VIEW_NODE, &show_ip_prefix_list_detail_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1632|       |
 1633|      1|	install_element(ENABLE_NODE, &clear_ip_prefix_list_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1634|      1|}
plist.c:prefix_list_init_ipv6:
 1644|      1|{
 1645|      1|	install_node(&prefix_ipv6_node);
 1646|       |
 1647|      1|	install_element(VIEW_NODE, &show_ipv6_prefix_list_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1648|      1|	install_element(VIEW_NODE, &show_ipv6_prefix_list_prefix_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1649|      1|	install_element(VIEW_NODE, &show_ipv6_prefix_list_summary_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1650|      1|	install_element(VIEW_NODE, &show_ipv6_prefix_list_detail_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1651|      1|	install_element(VIEW_NODE, &debug_prefix_list_match_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1652|       |
 1653|      1|	install_element(ENABLE_NODE, &clear_ipv6_prefix_list_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1654|      1|}

prefix_bit:
   67|  33.8k|{
   68|  33.8k|	unsigned int offset = bit_index / 8;
   69|  33.8k|	unsigned int shift = 7 - (bit_index % 8);
   70|       |
   71|  33.8k|	return (prefix[offset] >> shift) & 1;
   72|  33.8k|}
prefix_match:
  187|  27.9k|{
  188|  27.9k|	const struct prefix *n = unet.p;
  189|  27.9k|	const struct prefix *p = upfx.p;
  190|  27.9k|	int offset;
  191|  27.9k|	int shift;
  192|  27.9k|	const uint8_t *np, *pp;
  193|       |
  194|       |	/* If n's prefix is longer than p's one return 0. */
  195|  27.9k|	if (n->prefixlen > p->prefixlen)
  ------------------
  |  Branch (195:6): [True: 0, False: 27.9k]
  ------------------
  196|      0|		return 0;
  197|       |
  198|  27.9k|	if (n->family == AF_FLOWSPEC) {
  ------------------
  |  |  158|  27.9k|#define AF_FLOWSPEC (AF_MAX + 2)
  ------------------
  |  Branch (198:6): [True: 0, False: 27.9k]
  ------------------
  199|       |		/* prefixlen is unused. look at fs prefix len */
  200|      0|		if (n->u.prefix_flowspec.family !=
  ------------------
  |  Branch (200:7): [True: 0, False: 0]
  ------------------
  201|      0|		    p->u.prefix_flowspec.family)
  202|      0|			return 0;
  203|       |
  204|      0|		if (n->u.prefix_flowspec.prefixlen >
  ------------------
  |  Branch (204:7): [True: 0, False: 0]
  ------------------
  205|      0|		    p->u.prefix_flowspec.prefixlen)
  206|      0|			return 0;
  207|       |
  208|       |		/* Set both prefix's head pointer. */
  209|      0|		np = (const uint8_t *)&n->u.prefix_flowspec.ptr;
  210|      0|		pp = (const uint8_t *)&p->u.prefix_flowspec.ptr;
  211|       |
  212|      0|		offset = n->u.prefix_flowspec.prefixlen;
  213|       |
  214|      0|		while (offset--)
  ------------------
  |  Branch (214:10): [True: 0, False: 0]
  ------------------
  215|      0|			if (np[offset] != pp[offset])
  ------------------
  |  Branch (215:8): [True: 0, False: 0]
  ------------------
  216|      0|				return 0;
  217|      0|		return 1;
  218|      0|	}
  219|       |
  220|       |	/* Set both prefix's head pointer. */
  221|  27.9k|	np = n->u.val;
  222|  27.9k|	pp = p->u.val;
  223|       |
  224|  27.9k|	offset = n->prefixlen / PNBBY;
  ------------------
  |  |   30|  27.9k|#define PNBBY 8
  ------------------
  225|  27.9k|	shift = n->prefixlen % PNBBY;
  ------------------
  |  |   30|  27.9k|#define PNBBY 8
  ------------------
  226|       |
  227|  27.9k|	if (shift)
  ------------------
  |  Branch (227:6): [True: 14.9k, False: 12.9k]
  ------------------
  228|  14.9k|		if (maskbit[shift] & (np[offset] ^ pp[offset]))
  ------------------
  |  Branch (228:7): [True: 881, False: 14.0k]
  ------------------
  229|    881|			return 0;
  230|       |
  231|  56.2k|	while (offset--)
  ------------------
  |  Branch (231:9): [True: 32.9k, False: 23.3k]
  ------------------
  232|  32.9k|		if (np[offset] != pp[offset])
  ------------------
  |  Branch (232:7): [True: 3.63k, False: 29.2k]
  ------------------
  233|  3.63k|			return 0;
  234|  23.3k|	return 1;
  235|       |
  236|  27.0k|}
prefix_copy:
  316|   132k|{
  317|   132k|	struct prefix *dest = udest.p;
  318|   132k|	const struct prefix *src = usrc.p;
  319|       |
  320|   132k|	dest->family = src->family;
  321|   132k|	dest->prefixlen = src->prefixlen;
  322|       |
  323|   132k|	if (src->family == AF_INET)
  ------------------
  |  Branch (323:6): [True: 10.2k, False: 122k]
  ------------------
  324|  10.2k|		dest->u.prefix4 = src->u.prefix4;
  325|   122k|	else if (src->family == AF_INET6)
  ------------------
  |  Branch (325:11): [True: 0, False: 122k]
  ------------------
  326|      0|		dest->u.prefix6 = src->u.prefix6;
  327|   122k|	else if (src->family == AF_ETHERNET) {
  ------------------
  |  |  139|   122k|#define AF_ETHERNET AF_PACKET
  ------------------
  |  Branch (327:11): [True: 0, False: 122k]
  ------------------
  328|      0|		memcpy(&dest->u.prefix_eth, &src->u.prefix_eth,
  329|      0|		       sizeof(struct ethaddr));
  330|   122k|	} else if (src->family == AF_EVPN) {
  ------------------
  |  |  154|   122k|#define AF_EVPN (AF_MAX + 1)
  ------------------
  |  Branch (330:13): [True: 0, False: 122k]
  ------------------
  331|      0|		memcpy(&dest->u.prefix_evpn, &src->u.prefix_evpn,
  332|      0|		       sizeof(struct evpn_addr));
  333|   122k|	} else if (src->family == AF_UNSPEC) {
  ------------------
  |  Branch (333:13): [True: 122k, False: 0]
  ------------------
  334|   122k|		dest->u.lp.id = src->u.lp.id;
  335|   122k|		dest->u.lp.adv_router = src->u.lp.adv_router;
  336|   122k|	} else if (src->family == AF_FLOWSPEC) {
  ------------------
  |  |  158|      0|#define AF_FLOWSPEC (AF_MAX + 2)
  ------------------
  |  Branch (336:13): [True: 0, False: 0]
  ------------------
  337|      0|		void *temp;
  338|      0|		int len;
  339|       |
  340|      0|		len = src->u.prefix_flowspec.prefixlen;
  341|      0|		dest->u.prefix_flowspec.prefixlen =
  342|      0|			src->u.prefix_flowspec.prefixlen;
  343|      0|		dest->u.prefix_flowspec.family =
  344|      0|			src->u.prefix_flowspec.family;
  345|      0|		dest->family = src->family;
  346|      0|		temp = XCALLOC(MTYPE_PREFIX_FLOWSPEC, len);
  ------------------
  |  |  165|      0|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  347|      0|		dest->u.prefix_flowspec.ptr = (uintptr_t)temp;
  348|      0|		memcpy((void *)dest->u.prefix_flowspec.ptr,
  349|      0|		       (void *)src->u.prefix_flowspec.ptr, len);
  350|      0|	} else {
  351|      0|		flog_err(EC_LIB_DEVELOPMENT,
  ------------------
  |  |  136|      0|#define flog_err(ferr_id, format, ...) 0
  ------------------
  352|      0|			 "prefix_copy(): Unknown address family %d",
  353|      0|			 src->family);
  354|       |		assert(0);
  ------------------
  |  |   51|      0|	({                                                                     \
  |  |   52|      0|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|      0|			(used)) = {                                            \
  |  |   54|      0|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|      0|	{                                                                      \
  |  |  |  |  284|      0|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      0|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      0|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      0|		/* .func = */ func_,                                           \
  |  |  |  |  289|      0|	}                                                                      \
  |  |  ------------------
  |  |   55|      0|			.expr = #expr_,                                        \
  |  |   56|      0|		};                                                             \
  |  |   57|      0|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      0|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      0|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      0|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|      0|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, Folded]
  |  |  |  Branch (58:24): [Folded, False: 0]
  |  |  ------------------
  |  |   59|      0|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [Folded, False: 0]
  |  |  ------------------
  |  |   62|      0|	})
  ------------------
  355|      0|	}
  356|   132k|}
prefix_cmp:
  421|  26.0k|{
  422|  26.0k|	const struct prefix *p1 = up1.p;
  423|  26.0k|	const struct prefix *p2 = up2.p;
  424|  26.0k|	int offset;
  425|  26.0k|	int shift;
  426|  26.0k|	int i;
  427|       |
  428|       |	/* Set both prefix's head pointer. */
  429|  26.0k|	const uint8_t *pp1;
  430|  26.0k|	const uint8_t *pp2;
  431|       |
  432|  26.0k|	if (p1->family != p2->family)
  ------------------
  |  Branch (432:6): [True: 0, False: 26.0k]
  ------------------
  433|      0|		return numcmp(p1->family, p2->family);
  ------------------
  |  |  243|      0|	({                                                                     \
  |  |  244|      0|		typeof(a) _cmp_a = (a);                                        \
  |  |  245|      0|		typeof(b) _cmp_b = (b);                                        \
  |  |  246|      0|		(_cmp_a < _cmp_b) ? -1 : ((_cmp_a > _cmp_b) ? 1 : 0);          \
  |  |  ------------------
  |  |  |  Branch (246:3): [True: 0, False: 0]
  |  |  |  Branch (246:29): [True: 0, False: 0]
  |  |  ------------------
  |  |  247|      0|	})
  ------------------
  434|  26.0k|	if (p1->family == AF_FLOWSPEC) {
  ------------------
  |  |  158|  26.0k|#define AF_FLOWSPEC (AF_MAX + 2)
  ------------------
  |  Branch (434:6): [True: 0, False: 26.0k]
  ------------------
  435|      0|		pp1 = (const uint8_t *)p1->u.prefix_flowspec.ptr;
  436|      0|		pp2 = (const uint8_t *)p2->u.prefix_flowspec.ptr;
  437|       |
  438|      0|		if (p1->u.prefix_flowspec.family !=
  ------------------
  |  Branch (438:7): [True: 0, False: 0]
  ------------------
  439|      0|		    p2->u.prefix_flowspec.family)
  440|      0|			return 1;
  441|       |
  442|      0|		if (p1->u.prefix_flowspec.prefixlen !=
  ------------------
  |  Branch (442:7): [True: 0, False: 0]
  ------------------
  443|      0|		    p2->u.prefix_flowspec.prefixlen)
  444|      0|			return numcmp(p1->u.prefix_flowspec.prefixlen,
  ------------------
  |  |  243|      0|	({                                                                     \
  |  |  244|      0|		typeof(a) _cmp_a = (a);                                        \
  |  |  245|      0|		typeof(b) _cmp_b = (b);                                        \
  |  |  246|      0|		(_cmp_a < _cmp_b) ? -1 : ((_cmp_a > _cmp_b) ? 1 : 0);          \
  |  |  ------------------
  |  |  |  Branch (246:3): [True: 0, False: 0]
  |  |  |  Branch (246:29): [True: 0, False: 0]
  |  |  ------------------
  |  |  247|      0|	})
  ------------------
  445|      0|				      p2->u.prefix_flowspec.prefixlen);
  446|       |
  447|      0|		offset = p1->u.prefix_flowspec.prefixlen;
  448|      0|		while (offset--)
  ------------------
  |  Branch (448:10): [True: 0, False: 0]
  ------------------
  449|      0|			if (pp1[offset] != pp2[offset])
  ------------------
  |  Branch (449:8): [True: 0, False: 0]
  ------------------
  450|      0|				return numcmp(pp1[offset], pp2[offset]);
  ------------------
  |  |  243|      0|	({                                                                     \
  |  |  244|      0|		typeof(a) _cmp_a = (a);                                        \
  |  |  245|      0|		typeof(b) _cmp_b = (b);                                        \
  |  |  246|      0|		(_cmp_a < _cmp_b) ? -1 : ((_cmp_a > _cmp_b) ? 1 : 0);          \
  |  |  ------------------
  |  |  |  Branch (246:3): [True: 0, False: 0]
  |  |  |  Branch (246:29): [True: 0, False: 0]
  |  |  ------------------
  |  |  247|      0|	})
  ------------------
  451|      0|		return 0;
  452|      0|	}
  453|  26.0k|	pp1 = p1->u.val;
  454|  26.0k|	pp2 = p2->u.val;
  455|       |
  456|  26.0k|	if (p1->prefixlen != p2->prefixlen)
  ------------------
  |  Branch (456:6): [True: 133, False: 25.8k]
  ------------------
  457|    133|		return numcmp(p1->prefixlen, p2->prefixlen);
  ------------------
  |  |  243|    133|	({                                                                     \
  |  |  244|    133|		typeof(a) _cmp_a = (a);                                        \
  |  |  245|    133|		typeof(b) _cmp_b = (b);                                        \
  |  |  246|    133|		(_cmp_a < _cmp_b) ? -1 : ((_cmp_a > _cmp_b) ? 1 : 0);          \
  |  |  ------------------
  |  |  |  Branch (246:3): [True: 132, False: 1]
  |  |  |  Branch (246:29): [True: 1, False: 0]
  |  |  ------------------
  |  |  247|    133|	})
  ------------------
  458|  25.8k|	offset = p1->prefixlen / PNBBY;
  ------------------
  |  |   30|  25.8k|#define PNBBY 8
  ------------------
  459|  25.8k|	shift = p1->prefixlen % PNBBY;
  ------------------
  |  |   30|  25.8k|#define PNBBY 8
  ------------------
  460|       |
  461|  25.8k|	i = memcmp(pp1, pp2, offset);
  462|  25.8k|	if (i)
  ------------------
  |  Branch (462:6): [True: 629, False: 25.2k]
  ------------------
  463|    629|		return i;
  464|       |
  465|       |	/*
  466|       |	 * At this point offset was the same, if we have shift
  467|       |	 * that means we still have data to compare, if shift is
  468|       |	 * 0 then we are at the end of the data structure
  469|       |	 * and should just return, as that we will be accessing
  470|       |	 * memory beyond the end of the party zone
  471|       |	 */
  472|  25.2k|	if (shift)
  ------------------
  |  Branch (472:6): [True: 28, False: 25.2k]
  ------------------
  473|     28|		return numcmp(pp1[offset] & maskbit[shift],
  ------------------
  |  |  243|     28|	({                                                                     \
  |  |  244|     28|		typeof(a) _cmp_a = (a);                                        \
  |  |  245|     28|		typeof(b) _cmp_b = (b);                                        \
  |  |  246|     28|		(_cmp_a < _cmp_b) ? -1 : ((_cmp_a > _cmp_b) ? 1 : 0);          \
  |  |  ------------------
  |  |  |  Branch (246:3): [True: 0, False: 28]
  |  |  |  Branch (246:29): [True: 0, False: 28]
  |  |  ------------------
  |  |  247|     28|	})
  ------------------
  474|  25.2k|			      pp2[offset] & maskbit[shift]);
  475|       |
  476|  25.2k|	return 0;
  477|  25.2k|}
str2prefix_ipv4:
  561|      1|{
  562|      1|	int ret;
  563|      1|	int plen;
  564|      1|	char *pnt;
  565|      1|	char *cp;
  566|       |
  567|       |	/* Find slash inside string. */
  568|      1|	pnt = strchr(str, '/');
  569|       |
  570|       |	/* String doesn't contail slash. */
  571|      1|	if (pnt == NULL) {
  ------------------
  |  Branch (571:6): [True: 0, False: 1]
  ------------------
  572|       |		/* Convert string to prefix. */
  573|      0|		ret = inet_pton(AF_INET, str, &p->prefix);
  574|      0|		if (ret == 0)
  ------------------
  |  Branch (574:7): [True: 0, False: 0]
  ------------------
  575|      0|			return 0;
  576|       |
  577|       |		/* If address doesn't contain slash we assume it host address.
  578|       |		 */
  579|      0|		p->family = AF_INET;
  580|      0|		p->prefixlen = IPV4_MAX_BITLEN;
  ------------------
  |  |  334|      0|#define IPV4_MAX_BITLEN    32
  ------------------
  581|       |
  582|      0|		return ret;
  583|      1|	} else {
  584|      1|		cp = XMALLOC(MTYPE_TMP, (pnt - str) + 1);
  ------------------
  |  |  164|      1|#define XMALLOC(mtype, size)		qmalloc(mtype, size)
  ------------------
  585|      1|		memcpy(cp, str, pnt - str);
  586|      1|		*(cp + (pnt - str)) = '\0';
  587|      1|		ret = inet_pton(AF_INET, cp, &p->prefix);
  588|      1|		XFREE(MTYPE_TMP, cp);
  ------------------
  |  |  170|      1|	do {                                                                   \
  |  |  171|      1|		qfree(mtype, ptr);                                             \
  |  |  172|      1|		ptr = NULL;                                                    \
  |  |  173|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  589|      1|		if (ret == 0)
  ------------------
  |  Branch (589:7): [True: 0, False: 1]
  ------------------
  590|      0|			return 0;
  591|       |
  592|       |		/* Get prefix length. */
  593|      1|		plen = (uint8_t)atoi(++pnt);
  594|      1|		if (plen > IPV4_MAX_BITLEN)
  ------------------
  |  |  334|      1|#define IPV4_MAX_BITLEN    32
  ------------------
  |  Branch (594:7): [True: 0, False: 1]
  ------------------
  595|      0|			return 0;
  596|       |
  597|      1|		p->family = AF_INET;
  598|      1|		p->prefixlen = plen;
  599|      1|	}
  600|       |
  601|      1|	return ret;
  602|      1|}
masklen2ip:
  672|  7.33k|{
  673|  7.33k|	assert(masklen >= 0 && masklen <= IPV4_MAX_BITLEN);
  ------------------
  |  |   51|  7.33k|	({                                                                     \
  |  |   52|  7.33k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  7.33k|			(used)) = {                                            \
  |  |   54|  7.33k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  7.33k|	{                                                                      \
  |  |  |  |  284|  7.33k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  7.33k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  7.33k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  7.33k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  7.33k|	}                                                                      \
  |  |  ------------------
  |  |   55|  7.33k|			.expr = #expr_,                                        \
  |  |   56|  7.33k|		};                                                             \
  |  |   57|  7.33k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  7.33k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  7.33k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  7.33k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  14.6k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 7.33k]
  |  |  |  Branch (58:25): [True: 7.33k, False: 0]
  |  |  |  Branch (58:25): [True: 7.33k, False: 0]
  |  |  ------------------
  |  |   59|  7.33k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  7.33k|	})
  ------------------
  674|       |
  675|       |	/* left shift is only defined for less than the size of the type.
  676|       |	 * we unconditionally use long long in case the target platform
  677|       |	 * has defined behaviour for << 32 (or has a 64-bit left shift) */
  678|       |
  679|  7.33k|	if (sizeof(unsigned long long) > 4)
  ------------------
  |  Branch (679:6): [True: 7.33k, Folded]
  ------------------
  680|  7.33k|		netmask->s_addr =
  681|  7.33k|			htonl((uint32_t)(0xffffffffULL << (32 - masklen)));
  682|      0|	else
  683|      0|		netmask->s_addr =
  684|       |			htonl(masklen ? 0xffffffffU << (32 - masklen) : 0);
  ------------------
  |  Branch (684:4): [True: 0, False: 0]
  ------------------
  685|  7.33k|}
ip_masklen:
  690|    599|{
  691|    599|	uint32_t tmp = ~ntohl(netmask.s_addr);
  692|       |
  693|       |	/*
  694|       |	 * clz: count leading zeroes. sadly, the behaviour of this builtin is
  695|       |	 * undefined for a 0 argument, even though most CPUs give 32
  696|       |	 */
  697|    599|	return tmp ? __builtin_clz(tmp) : 32;
  ------------------
  |  Branch (697:9): [True: 590, False: 9]
  ------------------
  698|    599|}
apply_mask_ipv4:
  702|  4.97k|{
  703|  4.97k|	struct in_addr mask;
  704|  4.97k|	masklen2ip(p->prefixlen, &mask);
  705|  4.97k|	p->prefix.s_addr &= mask.s_addr;
  706|  4.97k|}
apply_mask:
  834|  63.9k|{
  835|  63.9k|	struct prefix *p = pu.p;
  836|       |
  837|  63.9k|	switch (p->family) {
  838|  4.79k|	case AF_INET:
  ------------------
  |  Branch (838:2): [True: 4.79k, False: 59.1k]
  ------------------
  839|  4.79k|		apply_mask_ipv4(pu.p4);
  840|  4.79k|		break;
  841|      0|	case AF_INET6:
  ------------------
  |  Branch (841:2): [True: 0, False: 63.9k]
  ------------------
  842|      0|		apply_mask_ipv6(pu.p6);
  843|      0|		break;
  844|  59.1k|	default:
  ------------------
  |  Branch (844:2): [True: 59.1k, False: 4.79k]
  ------------------
  845|  59.1k|		break;
  846|  63.9k|	}
  847|  63.9k|	return;
  848|  63.9k|}
str2prefix:
  905|      1|{
  906|      1|	int ret;
  907|       |
  908|      1|	if (!str || !p)
  ------------------
  |  Branch (908:6): [True: 0, False: 1]
  |  Branch (908:14): [True: 0, False: 1]
  ------------------
  909|      0|		return 0;
  910|       |
  911|       |	/* First we try to convert string to struct prefix_ipv4. */
  912|      1|	ret = str2prefix_ipv4(str, (struct prefix_ipv4 *)p);
  913|      1|	if (ret)
  ------------------
  |  Branch (913:6): [True: 1, False: 0]
  ------------------
  914|      1|		return ret;
  915|       |
  916|       |	/* Next we try to convert string to struct prefix_ipv6. */
  917|      0|	ret = str2prefix_ipv6(str, (struct prefix_ipv6 *)p);
  918|      0|	if (ret)
  ------------------
  |  Branch (918:6): [True: 0, False: 0]
  ------------------
  919|      0|		return ret;
  920|       |
  921|       |	/* Next we try to convert string to struct prefix_eth. */
  922|      0|	ret = str2prefix_eth(str, (struct prefix_eth *)p);
  923|      0|	if (ret)
  ------------------
  |  Branch (923:6): [True: 0, False: 0]
  ------------------
  924|      0|		return ret;
  925|       |
  926|      0|	return 0;
  927|      0|}
prefix_new:
 1144|      1|{
 1145|      1|	struct prefix *p;
 1146|       |
 1147|      1|	p = XCALLOC(MTYPE_PREFIX, sizeof(*p));
  ------------------
  |  |  165|      1|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
 1148|      1|	return p;
 1149|      1|}
prefix_hash_key:
 1290|  63.7k|{
 1291|  63.7k|	struct prefix copy;
 1292|       |
 1293|  63.7k|	if (((struct prefix *)pp)->family == AF_FLOWSPEC) {
  ------------------
  |  |  158|  63.7k|#define AF_FLOWSPEC (AF_MAX + 2)
  ------------------
  |  Branch (1293:6): [True: 0, False: 63.7k]
  ------------------
 1294|      0|		uint32_t len;
 1295|      0|		void *temp;
 1296|       |
 1297|       |		/* make sure *all* unused bits are zero,
 1298|       |		 * particularly including alignment /
 1299|       |		 * padding and unused prefix bytes.
 1300|       |		 */
 1301|      0|		memset(&copy, 0, sizeof(copy));
 1302|      0|		prefix_copy(&copy, (struct prefix *)pp);
 1303|      0|		len = jhash((void *)copy.u.prefix_flowspec.ptr,
 1304|      0|			    copy.u.prefix_flowspec.prefixlen,
 1305|      0|			    0x55aa5a5a);
 1306|      0|		temp = (void *)copy.u.prefix_flowspec.ptr;
 1307|      0|		XFREE(MTYPE_PREFIX_FLOWSPEC, temp);
  ------------------
  |  |  170|      0|	do {                                                                   \
  |  |  171|      0|		qfree(mtype, ptr);                                             \
  |  |  172|      0|		ptr = NULL;                                                    \
  |  |  173|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1308|      0|		copy.u.prefix_flowspec.ptr = (uintptr_t)NULL;
 1309|      0|		return len;
 1310|      0|	}
 1311|       |	/* make sure *all* unused bits are zero, particularly including
 1312|       |	 * alignment /
 1313|       |	 * padding and unused prefix bytes. */
 1314|  63.7k|	memset(&copy, 0, sizeof(copy));
 1315|  63.7k|	prefix_copy(&copy, (struct prefix *)pp);
 1316|  63.7k|	return jhash(&copy,
 1317|  63.7k|		     offsetof(struct prefix, u.prefix) + PSIZE(copy.prefixlen),
  ------------------
  |  |  253|  63.7k|#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
  ------------------
              		     offsetof(struct prefix, u.prefix) + PSIZE(copy.prefixlen),
  ------------------
  |  |  367|  63.7k|#define PSIZE(a) (((a) + 7) / (8))
  ------------------
 1318|  63.7k|		     0x55aa5a5a);
 1319|  63.7k|}

ospf_interface.c:ipv4_addr_same:
  339|  2.96k|{
  340|  2.96k|	return (a->s_addr == b->s_addr);
  341|  2.96k|}
ospf_lsa.c:ipv4_addr_same:
  339|  2.77k|{
  340|  2.77k|	return (a->s_addr == b->s_addr);
  341|  2.77k|}
ospf_neighbor.c:ipv4_addr_same:
  339|  1.09k|{
  340|  1.09k|	return (a->s_addr == b->s_addr);
  341|  1.09k|}
ospf_packet.c:ipv4_addr_same:
  339|  17.8k|{
  340|  17.8k|	return (a->s_addr == b->s_addr);
  341|  17.8k|}
ospfd.c:ipv4_addr_same:
  339|      1|{
  340|      1|	return (a->s_addr == b->s_addr);
  341|      1|}
ospf_flood.c:is_default_prefix4:
  508|  2.78k|{
  509|  2.78k|	return p && p->family == AF_INET && p->prefixlen == 0
  ------------------
  |  Branch (509:9): [True: 2.78k, False: 0]
  |  Branch (509:14): [True: 2.78k, False: 0]
  |  Branch (509:38): [True: 2.14k, False: 640]
  ------------------
  510|  2.14k|	       && p->prefix.s_addr == INADDR_ANY;
  ------------------
  |  Branch (510:12): [True: 32, False: 2.11k]
  ------------------
  511|  2.78k|}
ospf_flood.c:ipv4_addr_same:
  339|    137|{
  340|    137|	return (a->s_addr == b->s_addr);
  341|    137|}

snprintfrr:
   41|      3|{
   42|      3|	struct fbuf fbb = { .buf = out, .pos = out, .len = outsz - 1, };
   43|      3|	struct fbuf *fb = (out && outsz) ? &fbb : NULL;
  ------------------
  |  Branch (43:21): [True: 3, False: 0]
  |  Branch (43:28): [True: 3, False: 0]
  ------------------
   44|      3|	ssize_t ret;
   45|      3|	va_list ap;
   46|       |
   47|      3|	va_start(ap, fmt);
   48|      3|	ret = vbprintfrr(fb, fmt, ap);
   49|      3|	va_end(ap);
   50|      3|	if (fb)
  ------------------
  |  Branch (50:6): [True: 3, False: 0]
  ------------------
   51|      3|		fb->pos[0] = '\0';
   52|      3|	return ret;
   53|      3|}
printfrr_ext_reg:
  175|     56|{
  176|     56|	uint8_t o;
  177|     56|	ptrdiff_t i;
  178|       |
  179|     56|	if (!printfrr_ext_char(ext->match[0]))
  ------------------
  |  |  102|     56|#define printfrr_ext_char(ch) ((ch) >= 'A' && (ch) <= 'Z')
  |  |  ------------------
  |  |  |  Branch (102:32): [True: 56, False: 0]
  |  |  |  Branch (102:47): [True: 56, False: 0]
  |  |  ------------------
  ------------------
  180|      0|		return;
  181|       |
  182|     56|	o = ext->match[0] - 'A';
  183|     56|	for (i = ext_offsets[o];
  184|     68|			i < MAXEXT && entries[i].fmt[0] &&
  ------------------
  |  |  164|    136|#define MAXEXT 64
  ------------------
  |  Branch (184:4): [True: 68, False: 0]
  |  Branch (184:18): [True: 58, False: 10]
  ------------------
  185|     58|			memcmp(entries[i].fmt, ext->match, 2) < 0;
  ------------------
  |  Branch (185:4): [True: 12, False: 46]
  ------------------
  186|     56|			i++)
  187|     12|		;
  188|     56|	if (i == MAXEXT)
  ------------------
  |  |  164|     56|#define MAXEXT 64
  ------------------
  |  Branch (188:6): [True: 0, False: 56]
  ------------------
  189|      0|		return;
  190|    790|	for (o++; o <= 'Z' - 'A'; o++)
  ------------------
  |  Branch (190:12): [True: 734, False: 56]
  ------------------
  191|    734|		ext_offsets[o]++;
  192|       |
  193|     56|	memmove(entries + i + 1, entries + i,
  194|     56|			(MAXEXT - i - 1) * sizeof(entries[0]));
  ------------------
  |  |  164|     56|#define MAXEXT 64
  ------------------
  195|     56|	memmove(exts + i + 1, exts + i,
  196|     56|			(MAXEXT - i - 1) * sizeof(exts[0]));
  ------------------
  |  |  164|     56|#define MAXEXT 64
  ------------------
  197|       |
  198|     56|	memcpy(entries[i].fmt, ext->match, 2);
  199|     56|	exts[i] = ext;
  200|     56|}

vfprintf.c:io_init:
   59|      3|{
   60|      3|	iop->cb = cb;
   61|      3|	iop->avail = cb ? cb->len - (cb->pos - cb->buf) : 0;
  ------------------
  |  Branch (61:15): [True: 3, False: 0]
  ------------------
   62|      3|}
vfprintf.c:io_print:
   70|      9|{
   71|      9|	size_t copylen = len;
   72|       |
   73|      9|	if (!iop->cb)
  ------------------
  |  Branch (73:6): [True: 0, False: 9]
  ------------------
   74|      0|		return 0;
   75|      9|	if (iop->avail < copylen)
  ------------------
  |  Branch (75:6): [True: 0, False: 9]
  ------------------
   76|      0|		copylen = iop->avail;
   77|       |
   78|      9|	memcpy(iop->cb->pos, ptr, copylen);
   79|      9|	iop->avail -= copylen;
   80|      9|	iop->cb->pos += copylen;
   81|      9|	return 0;
   82|      9|}
vfprintf.c:__ujtoa:
  199|      1|{
  200|      1|	CHAR *cp = endp;
  ------------------
  |  |   71|      1|#define	CHAR	char
  ------------------
  201|      1|	intmax_t sval;
  202|       |
  203|       |	/* quick test for small values; __ultoa is typically much faster */
  204|       |	/* (perhaps instead we should run until small, then call __ultoa?) */
  205|      1|	if (val <= ULONG_MAX)
  ------------------
  |  Branch (205:6): [True: 1, False: 0]
  ------------------
  206|      1|		return (__ultoa((u_long)val, endp, base, octzero, xdigs));
  207|      0|	switch (base) {
  208|      0|	case 10:
  ------------------
  |  Branch (208:2): [True: 0, False: 0]
  ------------------
  209|      0|		if (val < 10) {
  ------------------
  |  Branch (209:7): [True: 0, False: 0]
  ------------------
  210|      0|			*--cp = to_char(val % 10);
  ------------------
  |  |   63|      0|#define	to_char(n)	((n) + '0')
  ------------------
  211|      0|			return (cp);
  212|      0|		}
  213|      0|		if (val > INTMAX_MAX) {
  ------------------
  |  Branch (213:7): [True: 0, False: 0]
  ------------------
  214|      0|			*--cp = to_char(val % 10);
  ------------------
  |  |   63|      0|#define	to_char(n)	((n) + '0')
  ------------------
  215|      0|			sval = val / 10;
  216|      0|		} else
  217|      0|			sval = val;
  218|      0|		do {
  219|      0|			*--cp = to_char(sval % 10);
  ------------------
  |  |   63|      0|#define	to_char(n)	((n) + '0')
  ------------------
  220|      0|			sval /= 10;
  221|      0|		} while (sval != 0);
  ------------------
  |  Branch (221:12): [True: 0, False: 0]
  ------------------
  222|      0|		break;
  223|       |
  224|      0|	case 8:
  ------------------
  |  Branch (224:2): [True: 0, False: 0]
  ------------------
  225|      0|		do {
  226|      0|			*--cp = to_char(val & 7);
  ------------------
  |  |   63|      0|#define	to_char(n)	((n) + '0')
  ------------------
  227|      0|			val >>= 3;
  228|      0|		} while (val);
  ------------------
  |  Branch (228:12): [True: 0, False: 0]
  ------------------
  229|      0|		if (octzero && *cp != '0')
  ------------------
  |  Branch (229:7): [True: 0, False: 0]
  |  Branch (229:18): [True: 0, False: 0]
  ------------------
  230|      0|			*--cp = '0';
  231|      0|		break;
  232|       |
  233|      0|	case 16:
  ------------------
  |  Branch (233:2): [True: 0, False: 0]
  ------------------
  234|      0|		do {
  235|      0|			*--cp = xdigs[val & 15];
  236|      0|			val >>= 4;
  237|      0|		} while (val);
  ------------------
  |  Branch (237:12): [True: 0, False: 0]
  ------------------
  238|      0|		break;
  239|       |
  240|      0|	default:
  ------------------
  |  Branch (240:2): [True: 0, False: 0]
  ------------------
  241|      0|		abort();
  242|      0|	}
  243|      0|	return (cp);
  244|      0|}
vfprintf.c:__ultoa:
  143|      2|{
  144|      2|	CHAR *cp = endp;
  ------------------
  |  |   71|      2|#define	CHAR	char
  ------------------
  145|      2|	long sval;
  146|       |
  147|       |	/*
  148|       |	 * Handle the three cases separately, in the hope of getting
  149|       |	 * better/faster code.
  150|       |	 */
  151|      2|	switch (base) {
  152|      2|	case 10:
  ------------------
  |  Branch (152:2): [True: 2, False: 0]
  ------------------
  153|      2|		if (val < 10) {	/* many numbers are 1 digit */
  ------------------
  |  Branch (153:7): [True: 0, False: 2]
  ------------------
  154|      0|			*--cp = to_char(val);
  ------------------
  |  |   63|      0|#define	to_char(n)	((n) + '0')
  ------------------
  155|      0|			return (cp);
  156|      0|		}
  157|       |		/*
  158|       |		 * On many machines, unsigned arithmetic is harder than
  159|       |		 * signed arithmetic, so we do at most one unsigned mod and
  160|       |		 * divide; this is sufficient to reduce the range of
  161|       |		 * the incoming value to where signed arithmetic works.
  162|       |		 */
  163|      2|		if (val > LONG_MAX) {
  ------------------
  |  Branch (163:7): [True: 0, False: 2]
  ------------------
  164|      0|			*--cp = to_char(val % 10);
  ------------------
  |  |   63|      0|#define	to_char(n)	((n) + '0')
  ------------------
  165|      0|			sval = val / 10;
  166|      0|		} else
  167|      2|			sval = val;
  168|      4|		do {
  169|      4|			*--cp = to_char(sval % 10);
  ------------------
  |  |   63|      4|#define	to_char(n)	((n) + '0')
  ------------------
  170|      4|			sval /= 10;
  171|      4|		} while (sval != 0);
  ------------------
  |  Branch (171:12): [True: 2, False: 2]
  ------------------
  172|      2|		break;
  173|       |
  174|      0|	case 8:
  ------------------
  |  Branch (174:2): [True: 0, False: 2]
  ------------------
  175|      0|		do {
  176|      0|			*--cp = to_char(val & 7);
  ------------------
  |  |   63|      0|#define	to_char(n)	((n) + '0')
  ------------------
  177|      0|			val >>= 3;
  178|      0|		} while (val);
  ------------------
  |  Branch (178:12): [True: 0, False: 0]
  ------------------
  179|      0|		if (octzero && *cp != '0')
  ------------------
  |  Branch (179:7): [True: 0, False: 0]
  |  Branch (179:18): [True: 0, False: 0]
  ------------------
  180|      0|			*--cp = '0';
  181|      0|		break;
  182|       |
  183|      0|	case 16:
  ------------------
  |  Branch (183:2): [True: 0, False: 2]
  ------------------
  184|      0|		do {
  185|      0|			*--cp = xdigs[val & 15];
  186|      0|			val >>= 4;
  187|      0|		} while (val);
  ------------------
  |  Branch (187:12): [True: 0, False: 0]
  ------------------
  188|      0|		break;
  189|       |
  190|      0|	default:			/* oops */
  ------------------
  |  Branch (190:2): [True: 0, False: 2]
  ------------------
  191|      0|		abort();
  192|      2|	}
  193|      2|	return (cp);
  194|      2|}
vfprintf.c:io_pad:
  101|     10|{
  102|     10|	int n;
  103|       |
  104|     10|	while (howmany > 0) {
  ------------------
  |  Branch (104:9): [True: 0, False: 10]
  ------------------
  105|      0|		n = (howmany >= PADSIZE) ? PADSIZE : howmany;
  ------------------
  |  |   89|      0|#define	PADSIZE	16		/* pad chunk size */
  ------------------
              		n = (howmany >= PADSIZE) ? PADSIZE : howmany;
  ------------------
  |  |   89|      0|#define	PADSIZE	16		/* pad chunk size */
  ------------------
  |  Branch (105:7): [True: 0, False: 0]
  ------------------
  106|      0|		if (io_print(iop, with, n))
  ------------------
  |  Branch (106:7): [True: 0, False: 0]
  ------------------
  107|      0|			return (-1);
  108|      0|		howmany -= n;
  109|      0|	}
  110|     10|	return (0);
  111|     10|}

vbprintfrr:
  151|      3|{
  152|      3|	const char *fmt;	/* format string */
  153|      3|	int ch;			/* character from fmt */
  154|      3|	int n, n2;		/* handy integer (short term usage) */
  155|      3|	const char *cp;		/* handy char pointer (short term usage) */
  156|      3|	int flags;		/* flags as above */
  157|      3|	int ret;		/* return value accumulator */
  158|      3|	int width;		/* width from format (%8d), or 0 */
  159|      3|	int prec;		/* precision from format; <0 for N/A */
  160|      3|	int saved_errno;
  161|      3|	char sign;		/* sign prefix (' ', '+', '-', or \0) */
  162|       |
  163|      3|	u_long	ulval = 0;	/* integer arguments %[diouxX] */
  164|      3|	uintmax_t ujval = 0;	/* %j, %ll, %q, %t, %z integers */
  165|      3|	void *ptrval;		/* %p */
  166|      3|	int base;		/* base for [diouxX] conversion */
  167|      3|	int dprec;		/* a copy of prec if [diouxX], 0 otherwise */
  168|      3|	int realsz;		/* field size expanded by dprec, sign, etc */
  169|      3|	int size;		/* size of converted field or string */
  170|      3|	int prsize;             /* max size of printed field */
  171|      3|	const char *xdigs;     	/* digits for %[xX] conversion */
  172|      3|	struct io_state io;	/* I/O buffering state */
  173|      3|	char buf[BUF];		/* buffer with space for digits of uintmax_t */
  174|      3|	char ox[2];		/* space for 0x; ox[1] is either x, X, or \0 */
  175|      3|	union arg *argtable;    /* args, built due to positional arg */
  176|      3|	union arg statargtable [STATIC_ARG_TBL_SIZE];
  177|      3|	int nextarg;            /* 1-based argument index */
  178|      3|	va_list orgap;          /* original argument pointer */
  179|      3|	char *convbuf;		/* wide to multibyte conversion result */
  180|      3|	char *extstart = NULL;	/* where printfrr_ext* started printing */
  181|      3|	struct fbuf cb_copy, *cb;
  182|      3|	struct fmt_outpos *opos;
  183|       |
  184|      3|	static const char xdigs_lower[16] = "0123456789abcdef";
  185|      3|	static const char xdigs_upper[16] = "0123456789ABCDEF";
  186|       |
  187|       |	/* BEWARE, these `goto error' on error. */
  188|      3|#define	PRINT(ptr, len) { \
  189|      3|	if (io_print(&io, (ptr), (len)))	\
  190|      3|		goto error; \
  191|      3|}
  192|      3|#define	PAD(howmany, with) { \
  193|      3|	if (io_pad(&io, (howmany), (with))) \
  194|      3|		goto error; \
  195|      3|}
  196|      3|#define	PRINTANDPAD(p, ep, len, with) {	\
  197|      3|	if (io_printandpad(&io, (p), (ep), (len), (with))) \
  198|      3|		goto error; \
  199|      3|}
  200|      3|#define	FLUSH() do { } while (0)
  201|       |
  202|       |	/*
  203|       |	 * Get the argument indexed by nextarg.   If the argument table is
  204|       |	 * built, use it to get the argument.  If its not, get the next
  205|       |	 * argument (and arguments must be gotten sequentially).
  206|       |	 */
  207|      3|#define GETARG(type) \
  208|      3|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  209|      3|	    (nextarg++, va_arg(ap, type)))
  210|       |
  211|       |	/*
  212|       |	 * To extend shorts properly, we need both signed and unsigned
  213|       |	 * argument extraction methods.
  214|       |	 */
  215|      3|#define	SARG() \
  216|      3|	(flags&LONGINT ? GETARG(long) : \
  217|      3|	    flags&SHORTINT ? (long)(short)GETARG(int) : \
  218|      3|	    flags&CHARINT ? (long)(signed char)GETARG(int) : \
  219|      3|	    (long)GETARG(int))
  220|      3|#define	UARG() \
  221|      3|	(flags&LONGINT ? GETARG(u_long) : \
  222|      3|	    flags&SHORTINT ? (u_long)(u_short)GETARG(int) : \
  223|      3|	    flags&CHARINT ? (u_long)(u_char)GETARG(int) : \
  224|      3|	    (u_long)GETARG(u_int))
  225|      3|#define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  226|      3|#define SJARG() \
  227|      3|	(flags&LONGDBL ? GETARG(int64_t) : \
  228|      3|	    flags&INTMAXT ? GETARG(intmax_t) : \
  229|      3|	    flags&SIZET ? (intmax_t)GETARG(ssize_t) : \
  230|      3|	    flags&PTRDIFFT ? (intmax_t)GETARG(ptrdiff_t) : \
  231|      3|	    (intmax_t)GETARG(long long))
  232|      3|#define	UJARG() \
  233|      3|	(flags&LONGDBL ? GETARG(uint64_t) : \
  234|      3|	    flags&INTMAXT ? GETARG(uintmax_t) : \
  235|      3|	    flags&SIZET ? (uintmax_t)GETARG(size_t) : \
  236|      3|	    flags&PTRDIFFT ? (uintmax_t)GETARG(ptrdiff_t) : \
  237|      3|	    (uintmax_t)GETARG(unsigned long long))
  238|       |
  239|       |	/*
  240|       |	 * Get * arguments, including the form *nn$.  Preserve the nextarg
  241|       |	 * that the argument can be gotten once the type is determined.
  242|       |	 */
  243|      3|#define GETASTER(val) \
  244|      3|	n2 = 0; \
  245|      3|	cp = fmt; \
  246|      3|	while (is_digit(*cp)) { \
  247|      3|		n2 = 10 * n2 + to_digit(*cp); \
  248|      3|		cp++; \
  249|      3|	} \
  250|      3|	if (*cp == '$') { \
  251|      3|		int hold = nextarg; \
  252|      3|		if (argtable == NULL) { \
  253|      3|			argtable = statargtable; \
  254|      3|			if (_frr_find_arguments (fmt0, orgap, &argtable)) { \
  255|      3|				ret = EOF; \
  256|      3|				goto error; \
  257|      3|			} \
  258|      3|		} \
  259|      3|		nextarg = n2; \
  260|      3|		val = GETARG (int); \
  261|      3|		nextarg = hold; \
  262|      3|		fmt = ++cp; \
  263|      3|	} else { \
  264|      3|		val = GETARG (int); \
  265|      3|	}
  266|       |
  267|      3|	xdigs = xdigs_lower;
  268|      3|	saved_errno = errno;
  269|      3|	convbuf = NULL;
  270|      3|	fmt = (char *)fmt0;
  271|      3|	argtable = NULL;
  272|      3|	nextarg = 1;
  273|      3|	va_copy(orgap, ap);
  274|       |
  275|      3|	if (cb_in) {
  ------------------
  |  Branch (275:6): [True: 3, False: 0]
  ------------------
  276|       |		/* prevent printfrr exts from polluting cb->outpos */
  277|      3|		cb_copy = *cb_in;
  278|      3|		cb_copy.outpos = NULL;
  279|      3|		cb_copy.outpos_n = cb_copy.outpos_i = 0;
  280|      3|		cb = &cb_copy;
  281|      3|	} else
  282|      0|		cb = NULL;
  283|       |
  284|      3|	io_init(&io, cb);
  285|      3|	ret = 0;
  286|       |
  287|       |	/*
  288|       |	 * Scan the format for conversions (`%' character).
  289|       |	 */
  290|      8|	for (;;) {
  291|     19|		for (cp = fmt; (ch = *fmt) != '\0' && ch != '%'; fmt++)
  ------------------
  |  Branch (291:18): [True: 16, False: 3]
  |  Branch (291:41): [True: 11, False: 5]
  ------------------
  292|     11|			/* void */;
  293|      8|		if ((n = fmt - cp) != 0) {
  ------------------
  |  Branch (293:7): [True: 4, False: 4]
  ------------------
  294|      4|			if ((unsigned)ret + n > INT_MAX) {
  ------------------
  |  Branch (294:8): [True: 0, False: 4]
  ------------------
  295|      0|				ret = EOF;
  296|      0|				errno = EOVERFLOW;
  297|      0|				goto error;
  298|      0|			}
  299|      4|			PRINT(cp, n);
  ------------------
  |  |  188|      4|#define	PRINT(ptr, len) { \
  |  |  189|      4|	if (io_print(&io, (ptr), (len)))	\
  |  |  ------------------
  |  |  |  Branch (189:6): [True: 0, False: 4]
  |  |  ------------------
  |  |  190|      4|		goto error; \
  |  |  191|      4|}
  ------------------
  300|      4|			ret += n;
  301|      4|		}
  302|      8|		if (ch == '\0')
  ------------------
  |  Branch (302:7): [True: 3, False: 5]
  ------------------
  303|      3|			goto done;
  304|      5|		fmt++;		/* skip over '%' */
  305|       |
  306|      5|		flags = 0;
  307|      5|		dprec = 0;
  308|      5|		width = -1;
  309|      5|		prec = -1;
  310|      5|		sign = '\0';
  311|      5|		ox[1] = '\0';
  312|       |
  313|      5|		if (cb_in && cb_in->outpos_i < cb_in->outpos_n)
  ------------------
  |  Branch (313:7): [True: 5, False: 0]
  |  Branch (313:16): [True: 0, False: 5]
  ------------------
  314|      0|			opos = &cb_in->outpos[cb_in->outpos_i];
  315|      5|		else
  316|      5|			opos = NULL;
  317|       |
  318|      7|rflag:		ch = *fmt++;
  319|      7|reswitch:	switch (ch) {
  320|      0|		case ' ':
  ------------------
  |  Branch (320:3): [True: 0, False: 7]
  ------------------
  321|       |			/*-
  322|       |			 * ``If the space and + flags both appear, the space
  323|       |			 * flag will be ignored.''
  324|       |			 *	-- ANSI X3J11
  325|       |			 */
  326|      0|			if (!sign)
  ------------------
  |  Branch (326:8): [True: 0, False: 0]
  ------------------
  327|      0|				sign = ' ';
  328|      0|			goto rflag;
  329|      0|		case '#':
  ------------------
  |  Branch (329:3): [True: 0, False: 7]
  ------------------
  330|      0|			flags |= ALT;
  ------------------
  |  |   43|      0|#define	ALT		0x001		/* alternate form */
  ------------------
  331|      0|			goto rflag;
  332|      0|		case '*':
  ------------------
  |  Branch (332:3): [True: 0, False: 7]
  ------------------
  333|       |			/*-
  334|       |			 * ``A negative field width argument is taken as a
  335|       |			 * - flag followed by a positive field width.''
  336|       |			 *	-- ANSI X3J11
  337|       |			 * They don't exclude field widths read from args.
  338|       |			 */
  339|      0|			GETASTER (width);
  ------------------
  |  |  244|      0|	n2 = 0; \
  |  |  245|      0|	cp = fmt; \
  |  |  246|      0|	while (is_digit(*cp)) { \
  |  |  ------------------
  |  |  |  |   62|      0|#define is_digit(c)	((unsigned)to_digit(c) <= 9)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      0|#define	to_digit(c)	((c) - '0')
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (62:21): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      0|		n2 = 10 * n2 + to_digit(*cp); \
  |  |  ------------------
  |  |  |  |   61|      0|#define	to_digit(c)	((c) - '0')
  |  |  ------------------
  |  |  248|      0|		cp++; \
  |  |  249|      0|	} \
  |  |  250|      0|	if (*cp == '$') { \
  |  |  ------------------
  |  |  |  Branch (250:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  251|      0|		int hold = nextarg; \
  |  |  252|      0|		if (argtable == NULL) { \
  |  |  ------------------
  |  |  |  Branch (252:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  253|      0|			argtable = statargtable; \
  |  |  254|      0|			if (_frr_find_arguments (fmt0, orgap, &argtable)) { \
  |  |  ------------------
  |  |  |  Branch (254:8): [True: 0, False: 0]
  |  |  ------------------
  |  |  255|      0|				ret = EOF; \
  |  |  256|      0|				goto error; \
  |  |  257|      0|			} \
  |  |  258|      0|		} \
  |  |  259|      0|		nextarg = n2; \
  |  |  260|      0|		val = GETARG (int); \
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  |  |  261|      0|		nextarg = hold; \
  |  |  262|      0|		fmt = ++cp; \
  |  |  263|      0|	} else { \
  |  |  264|      0|		val = GETARG (int); \
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  |  |  265|      0|	}
  ------------------
  340|      0|			if (width >= 0)
  ------------------
  |  Branch (340:8): [True: 0, False: 0]
  ------------------
  341|      0|				goto rflag;
  342|      0|			width = -width;
  343|       |			/* FALLTHROUGH */
  344|      0|		case '-':
  ------------------
  |  Branch (344:3): [True: 0, False: 7]
  ------------------
  345|      0|			flags |= LADJUST;
  ------------------
  |  |   44|      0|#define	LADJUST		0x004		/* left adjustment */
  ------------------
  346|      0|			goto rflag;
  347|      0|		case '+':
  ------------------
  |  Branch (347:3): [True: 0, False: 7]
  ------------------
  348|      0|			sign = '+';
  349|      0|			goto rflag;
  350|      0|		case '\'':
  ------------------
  |  Branch (350:3): [True: 0, False: 7]
  ------------------
  351|      0|			flags |= GROUPING;
  ------------------
  |  |   51|      0|#define	GROUPING	0x200		/* use grouping ("'" flag) */
  ------------------
  352|      0|			goto rflag;
  353|      0|		case '.':
  ------------------
  |  Branch (353:3): [True: 0, False: 7]
  ------------------
  354|      0|			if ((ch = *fmt++) == '*') {
  ------------------
  |  Branch (354:8): [True: 0, False: 0]
  ------------------
  355|      0|				GETASTER (prec);
  ------------------
  |  |  244|      0|	n2 = 0; \
  |  |  245|      0|	cp = fmt; \
  |  |  246|      0|	while (is_digit(*cp)) { \
  |  |  ------------------
  |  |  |  |   62|      0|#define is_digit(c)	((unsigned)to_digit(c) <= 9)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      0|#define	to_digit(c)	((c) - '0')
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (62:21): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      0|		n2 = 10 * n2 + to_digit(*cp); \
  |  |  ------------------
  |  |  |  |   61|      0|#define	to_digit(c)	((c) - '0')
  |  |  ------------------
  |  |  248|      0|		cp++; \
  |  |  249|      0|	} \
  |  |  250|      0|	if (*cp == '$') { \
  |  |  ------------------
  |  |  |  Branch (250:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  251|      0|		int hold = nextarg; \
  |  |  252|      0|		if (argtable == NULL) { \
  |  |  ------------------
  |  |  |  Branch (252:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  253|      0|			argtable = statargtable; \
  |  |  254|      0|			if (_frr_find_arguments (fmt0, orgap, &argtable)) { \
  |  |  ------------------
  |  |  |  Branch (254:8): [True: 0, False: 0]
  |  |  ------------------
  |  |  255|      0|				ret = EOF; \
  |  |  256|      0|				goto error; \
  |  |  257|      0|			} \
  |  |  258|      0|		} \
  |  |  259|      0|		nextarg = n2; \
  |  |  260|      0|		val = GETARG (int); \
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  |  |  261|      0|		nextarg = hold; \
  |  |  262|      0|		fmt = ++cp; \
  |  |  263|      0|	} else { \
  |  |  264|      0|		val = GETARG (int); \
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  |  |  265|      0|	}
  ------------------
  356|      0|				goto rflag;
  357|      0|			}
  358|      0|			prec = 0;
  359|      0|			while (is_digit(ch)) {
  ------------------
  |  |   62|      0|#define is_digit(c)	((unsigned)to_digit(c) <= 9)
  |  |  ------------------
  |  |  |  |   61|      0|#define	to_digit(c)	((c) - '0')
  |  |  ------------------
  |  |  |  Branch (62:21): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  360|      0|				prec = 10 * prec + to_digit(ch);
  ------------------
  |  |   61|      0|#define	to_digit(c)	((c) - '0')
  ------------------
  361|      0|				ch = *fmt++;
  362|      0|			}
  363|      0|			goto reswitch;
  364|      0|		case '0':
  ------------------
  |  Branch (364:3): [True: 0, False: 7]
  ------------------
  365|       |			/*-
  366|       |			 * ``Note that 0 is taken as a flag, not as the
  367|       |			 * beginning of a field width.''
  368|       |			 *	-- ANSI X3J11
  369|       |			 */
  370|      0|			flags |= ZEROPAD;
  ------------------
  |  |   49|      0|#define	ZEROPAD		0x080		/* zero (as opposed to blank) pad */
  ------------------
  371|      0|			goto rflag;
  372|      0|		case '1': case '2': case '3': case '4':
  ------------------
  |  Branch (372:3): [True: 0, False: 7]
  |  Branch (372:13): [True: 0, False: 7]
  |  Branch (372:23): [True: 0, False: 7]
  |  Branch (372:33): [True: 0, False: 7]
  ------------------
  373|      0|		case '5': case '6': case '7': case '8': case '9':
  ------------------
  |  Branch (373:3): [True: 0, False: 7]
  |  Branch (373:13): [True: 0, False: 7]
  |  Branch (373:23): [True: 0, False: 7]
  |  Branch (373:33): [True: 0, False: 7]
  |  Branch (373:43): [True: 0, False: 7]
  ------------------
  374|      0|			n = 0;
  375|      0|			do {
  376|      0|				n = 10 * n + to_digit(ch);
  ------------------
  |  |   61|      0|#define	to_digit(c)	((c) - '0')
  ------------------
  377|      0|				ch = *fmt++;
  378|      0|			} while (is_digit(ch));
  ------------------
  |  |   62|      0|#define is_digit(c)	((unsigned)to_digit(c) <= 9)
  |  |  ------------------
  |  |  |  |   61|      0|#define	to_digit(c)	((c) - '0')
  |  |  ------------------
  |  |  |  Branch (62:21): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  379|      0|			if (ch == '$') {
  ------------------
  |  Branch (379:8): [True: 0, False: 0]
  ------------------
  380|      0|				nextarg = n;
  381|      0|				if (argtable == NULL) {
  ------------------
  |  Branch (381:9): [True: 0, False: 0]
  ------------------
  382|      0|					argtable = statargtable;
  383|      0|					if (_frr_find_arguments (fmt0, orgap,
  ------------------
  |  Branch (383:10): [True: 0, False: 0]
  ------------------
  384|      0|							      &argtable)) {
  385|      0|						ret = EOF;
  386|      0|						goto error;
  387|      0|					}
  388|      0|				}
  389|      0|				goto rflag;
  390|      0|			}
  391|      0|			width = n;
  392|      0|			goto reswitch;
  393|      0|		case 'L':
  ------------------
  |  Branch (393:3): [True: 0, False: 7]
  ------------------
  394|      0|			flags |= LONGDBL;
  ------------------
  |  |   45|      0|#define	LONGDBL		0x008		/* long double */
  ------------------
  395|      0|			goto rflag;
  396|      0|		case 'h':
  ------------------
  |  Branch (396:3): [True: 0, False: 7]
  ------------------
  397|      0|			if (flags & SHORTINT) {
  ------------------
  |  |   48|      0|#define	SHORTINT	0x040		/* short integer */
  ------------------
  |  Branch (397:8): [True: 0, False: 0]
  ------------------
  398|      0|				flags &= ~SHORTINT;
  ------------------
  |  |   48|      0|#define	SHORTINT	0x040		/* short integer */
  ------------------
  399|      0|				flags |= CHARINT;
  ------------------
  |  |   56|      0|#define	CHARINT		0x2000		/* print char using int format */
  ------------------
  400|      0|			} else
  401|      0|				flags |= SHORTINT;
  ------------------
  |  |   48|      0|#define	SHORTINT	0x040		/* short integer */
  ------------------
  402|      0|			goto rflag;
  403|      1|		case 'j':
  ------------------
  |  Branch (403:3): [True: 1, False: 6]
  ------------------
  404|      1|			flags |= INTMAXT;
  ------------------
  |  |   55|      1|#define	INTMAXT		0x1000		/* intmax_t */
  ------------------
  405|      1|			goto rflag;
  406|      1|		case 'l':
  ------------------
  |  Branch (406:3): [True: 1, False: 6]
  ------------------
  407|      1|			if (flags & LONGINT) {
  ------------------
  |  |   46|      1|#define	LONGINT		0x010		/* long integer */
  ------------------
  |  Branch (407:8): [True: 0, False: 1]
  ------------------
  408|      0|				flags &= ~LONGINT;
  ------------------
  |  |   46|      0|#define	LONGINT		0x010		/* long integer */
  ------------------
  409|      0|				flags |= LLONGINT;
  ------------------
  |  |   47|      0|#define	LLONGINT	0x020		/* long long integer */
  ------------------
  410|      0|			} else
  411|      1|				flags |= LONGINT;
  ------------------
  |  |   46|      1|#define	LONGINT		0x010		/* long integer */
  ------------------
  412|      1|			goto rflag;
  413|      0|		case 'q':
  ------------------
  |  Branch (413:3): [True: 0, False: 7]
  ------------------
  414|      0|			flags |= LLONGINT;	/* not necessarily */
  ------------------
  |  |   47|      0|#define	LLONGINT	0x020		/* long long integer */
  ------------------
  415|      0|			goto rflag;
  416|      0|		case 't':
  ------------------
  |  Branch (416:3): [True: 0, False: 7]
  ------------------
  417|      0|			flags |= PTRDIFFT;
  ------------------
  |  |   54|      0|#define	PTRDIFFT	0x800		/* ptrdiff_t */
  ------------------
  418|      0|			goto rflag;
  419|      0|		case 'z':
  ------------------
  |  Branch (419:3): [True: 0, False: 7]
  ------------------
  420|      0|			flags |= SIZET;
  ------------------
  |  |   53|      0|#define	SIZET		0x400		/* size_t */
  ------------------
  421|      0|			goto rflag;
  422|      0|		case 'C':
  ------------------
  |  Branch (422:3): [True: 0, False: 7]
  ------------------
  423|      0|			flags |= LONGINT;
  ------------------
  |  |   46|      0|#define	LONGINT		0x010		/* long integer */
  ------------------
  424|       |			/*FALLTHROUGH*/
  425|      0|		case 'c':
  ------------------
  |  Branch (425:3): [True: 0, False: 7]
  ------------------
  426|       |#ifdef WCHAR_SUPPORT
  427|       |			if (flags & LONGINT) {
  428|       |				static const mbstate_t initial;
  429|       |				mbstate_t mbs;
  430|       |				size_t mbseqlen;
  431|       |
  432|       |				mbs = initial;
  433|       |				mbseqlen = wcrtomb(cp = buf,
  434|       |				    (wchar_t)GETARG(wint_t), &mbs);
  435|       |				if (mbseqlen == (size_t)-1) {
  436|       |					goto error;
  437|       |				}
  438|       |				size = (int)mbseqlen;
  439|       |			} else
  440|       |#endif /* WCHAR_SUPPORT */
  441|      0|			{
  442|      0|				buf[0] = GETARG(int);
  ------------------
  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  ------------------
  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  ------------------
  443|      0|				cp = buf;
  444|      0|				size = 1;
  445|      0|			}
  446|      0|			sign = '\0';
  447|      0|			break;
  448|      0|		case 'D':
  ------------------
  |  Branch (448:3): [True: 0, False: 7]
  ------------------
  449|      0|			flags |= LONGINT;
  ------------------
  |  |   46|      0|#define	LONGINT		0x010		/* long integer */
  ------------------
  450|       |			/*FALLTHROUGH*/
  451|      2|		case 'd':
  ------------------
  |  Branch (451:3): [True: 2, False: 5]
  ------------------
  452|      2|		case 'i':
  ------------------
  |  Branch (452:3): [True: 0, False: 7]
  ------------------
  453|      2|			if (flags & INTMAX_SIZE)
  ------------------
  |  |  225|      2|#define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   55|      2|#define	INTMAXT		0x1000		/* intmax_t */
  |  |  ------------------
  |  |               #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   53|      2|#define	SIZET		0x400		/* size_t */
  |  |  ------------------
  |  |               #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   54|      2|#define	PTRDIFFT	0x800		/* ptrdiff_t */
  |  |  ------------------
  |  |               #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   47|      2|#define	LLONGINT	0x020		/* long long integer */
  |  |  ------------------
  |  |               #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   45|      2|#define	LONGDBL		0x008		/* long double */
  |  |  ------------------
  ------------------
  |  Branch (453:8): [True: 1, False: 1]
  ------------------
  454|      1|				ujval = SJARG();
  ------------------
  |  |  227|      1|	(flags&LONGDBL ? GETARG(int64_t) : \
  |  |  ------------------
  |  |  |  |   45|      1|#define	LONGDBL		0x008		/* long double */
  |  |  ------------------
  |  |               	(flags&LONGDBL ? GETARG(int64_t) : \
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  |  |  |  Branch (227:3): [True: 0, False: 1]
  |  |  ------------------
  |  |  228|      1|	    flags&INTMAXT ? GETARG(intmax_t) : \
  |  |  ------------------
  |  |  |  |   55|      1|#define	INTMAXT		0x1000		/* intmax_t */
  |  |  ------------------
  |  |               	    flags&INTMAXT ? GETARG(intmax_t) : \
  |  |  ------------------
  |  |  |  |  208|      1|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  |  |  209|      1|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  |  |  |  Branch (228:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  229|      1|	    flags&SIZET ? (intmax_t)GETARG(ssize_t) : \
  |  |  ------------------
  |  |  |  |   53|      0|#define	SIZET		0x400		/* size_t */
  |  |  ------------------
  |  |               	    flags&SIZET ? (intmax_t)GETARG(ssize_t) : \
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  |  |  |  Branch (229:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  230|      0|	    flags&PTRDIFFT ? (intmax_t)GETARG(ptrdiff_t) : \
  |  |  ------------------
  |  |  |  |   54|      0|#define	PTRDIFFT	0x800		/* ptrdiff_t */
  |  |  ------------------
  |  |               	    flags&PTRDIFFT ? (intmax_t)GETARG(ptrdiff_t) : \
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  |  |  |  Branch (230:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  231|      0|	    (intmax_t)GETARG(long long))
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  ------------------
  455|      1|			else
  456|      1|				ulval = (u_long)SARG();
  ------------------
  |  |  216|      1|	(flags&LONGINT ? GETARG(long) : \
  |  |  ------------------
  |  |  |  |   46|      1|#define	LONGINT		0x010		/* long integer */
  |  |  ------------------
  |  |               	(flags&LONGINT ? GETARG(long) : \
  |  |  ------------------
  |  |  |  |  208|      1|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  |  |  209|      1|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  |  |  |  Branch (216:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  217|      1|	    flags&SHORTINT ? (long)(short)GETARG(int) : \
  |  |  ------------------
  |  |  |  |   48|      0|#define	SHORTINT	0x040		/* short integer */
  |  |  ------------------
  |  |               	    flags&SHORTINT ? (long)(short)GETARG(int) : \
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  |  |  |  Branch (217:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  218|      0|	    flags&CHARINT ? (long)(signed char)GETARG(int) : \
  |  |  ------------------
  |  |  |  |   56|      0|#define	CHARINT		0x2000		/* print char using int format */
  |  |  ------------------
  |  |               	    flags&CHARINT ? (long)(signed char)GETARG(int) : \
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  |  |  |  Branch (218:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  219|      0|	    (long)GETARG(int))
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  ------------------
  457|       |
  458|      2|			if (printfrr_ext_char(fmt[0])) {
  ------------------
  |  |  102|      2|#define printfrr_ext_char(ch) ((ch) >= 'A' && (ch) <= 'Z')
  |  |  ------------------
  |  |  |  Branch (102:32): [True: 0, False: 2]
  |  |  |  Branch (102:47): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  459|      0|				struct printfrr_eargs ea = {
  460|      0|					.fmt = fmt,
  461|      0|					.precision = prec,
  462|      0|					.width = width,
  463|      0|					.alt_repr = !!(flags & ALT),
  ------------------
  |  |   43|      0|#define	ALT		0x001		/* alternate form */
  ------------------
  464|      0|					.leftadj = !!(flags & LADJUST),
  ------------------
  |  |   44|      0|#define	LADJUST		0x004		/* left adjustment */
  ------------------
  465|      0|				};
  466|       |
  467|      0|				if (cb)
  ------------------
  |  Branch (467:9): [True: 0, False: 0]
  ------------------
  468|      0|					extstart = cb->pos;
  469|       |
  470|      0|				size = printfrr_exti(cb, &ea,
  471|      0|						(flags & INTMAX_SIZE) ? ujval
  ------------------
  |  |  225|      0|#define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   55|      0|#define	INTMAXT		0x1000		/* intmax_t */
  |  |  ------------------
  |  |               #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   53|      0|#define	SIZET		0x400		/* size_t */
  |  |  ------------------
  |  |               #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   54|      0|#define	PTRDIFFT	0x800		/* ptrdiff_t */
  |  |  ------------------
  |  |               #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   47|      0|#define	LLONGINT	0x020		/* long long integer */
  |  |  ------------------
  |  |               #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   45|      0|#define	LONGDBL		0x008		/* long double */
  |  |  ------------------
  ------------------
  |  Branch (471:7): [True: 0, False: 0]
  ------------------
  472|      0|						: (uintmax_t)ulval);
  473|      0|				if (size >= 0) {
  ------------------
  |  Branch (473:9): [True: 0, False: 0]
  ------------------
  474|      0|					fmt = ea.fmt;
  475|      0|					width = ea.width;
  476|      0|					goto ext_printed;
  477|      0|				}
  478|      0|			}
  479|      2|			if (flags & INTMAX_SIZE) {
  ------------------
  |  |  225|      2|#define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   55|      2|#define	INTMAXT		0x1000		/* intmax_t */
  |  |  ------------------
  |  |               #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   53|      2|#define	SIZET		0x400		/* size_t */
  |  |  ------------------
  |  |               #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   54|      2|#define	PTRDIFFT	0x800		/* ptrdiff_t */
  |  |  ------------------
  |  |               #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   47|      2|#define	LLONGINT	0x020		/* long long integer */
  |  |  ------------------
  |  |               #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   45|      2|#define	LONGDBL		0x008		/* long double */
  |  |  ------------------
  ------------------
  |  Branch (479:8): [True: 1, False: 1]
  ------------------
  480|      1|				if ((intmax_t)ujval < 0) {
  ------------------
  |  Branch (480:9): [True: 0, False: 1]
  ------------------
  481|      0|					ujval = -ujval;
  482|      0|					sign = '-';
  483|      0|				}
  484|      1|			} else {
  485|      1|				if ((long)ulval < 0) {
  ------------------
  |  Branch (485:9): [True: 0, False: 1]
  ------------------
  486|      0|					ulval = (~ulval) + 1;
  487|      0|					sign = '-';
  488|      0|				}
  489|      1|			}
  490|      2|			base = 10;
  491|      2|			goto number;
  492|      0|#ifndef NO_FLOATING_POINT
  493|      0|		case 'a':
  ------------------
  |  Branch (493:3): [True: 0, False: 7]
  ------------------
  494|      0|		case 'A':
  ------------------
  |  Branch (494:3): [True: 0, False: 7]
  ------------------
  495|      0|		case 'e':
  ------------------
  |  Branch (495:3): [True: 0, False: 7]
  ------------------
  496|      0|		case 'E':
  ------------------
  |  Branch (496:3): [True: 0, False: 7]
  ------------------
  497|      0|		case 'f':
  ------------------
  |  Branch (497:3): [True: 0, False: 7]
  ------------------
  498|      0|		case 'F':
  ------------------
  |  Branch (498:3): [True: 0, False: 7]
  ------------------
  499|      0|		case 'g':
  ------------------
  |  Branch (499:3): [True: 0, False: 7]
  ------------------
  500|      0|		case 'G':
  ------------------
  |  Branch (500:3): [True: 0, False: 7]
  ------------------
  501|      0|			if (flags & LONGDBL) {
  ------------------
  |  |   45|      0|#define	LONGDBL		0x008		/* long double */
  ------------------
  |  Branch (501:8): [True: 0, False: 0]
  ------------------
  502|      0|				long double arg = GETARG(long double);
  ------------------
  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  ------------------
  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  ------------------
  503|      0|				char fmt[6] = "%.*L";
  504|      0|				fmt[4] = ch;
  505|      0|				fmt[5] = '\0';
  506|       |
  507|      0|#pragma GCC diagnostic push
  508|      0|#pragma GCC diagnostic ignored "-Wformat-nonliteral"
  509|      0|				snprintf(buf, sizeof(buf), fmt, prec, arg);
  510|      0|#pragma GCC diagnostic pop
  511|      0|			} else {
  512|      0|				double arg = GETARG(double);
  ------------------
  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  ------------------
  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  ------------------
  513|      0|				char fmt[5] = "%.*";
  514|      0|				fmt[3] = ch;
  515|      0|				fmt[4] = '\0';
  516|       |
  517|      0|#pragma GCC diagnostic push
  518|      0|#pragma GCC diagnostic ignored "-Wformat-nonliteral"
  519|      0|				snprintf(buf, sizeof(buf), fmt, prec, arg);
  520|      0|#pragma GCC diagnostic pop
  521|      0|			}
  522|      0|			cp = buf;
  523|       |			/* for proper padding */
  524|      0|			if (*cp == '-') {
  ------------------
  |  Branch (524:8): [True: 0, False: 0]
  ------------------
  525|      0|				cp++;
  526|      0|				sign = '-';
  527|      0|			}
  528|       |			/* "inf" */
  529|      0|			if (!is_digit(*cp) && *cp != '.')
  ------------------
  |  |   62|      0|#define is_digit(c)	((unsigned)to_digit(c) <= 9)
  |  |  ------------------
  |  |  |  |   61|      0|#define	to_digit(c)	((c) - '0')
  |  |  ------------------
  ------------------
  |  Branch (529:8): [True: 0, False: 0]
  |  Branch (529:26): [True: 0, False: 0]
  ------------------
  530|      0|				flags &= ~ZEROPAD;
  ------------------
  |  |   49|      0|#define	ZEROPAD		0x080		/* zero (as opposed to blank) pad */
  ------------------
  531|      0|			size = strlen(buf);
  532|      0|			break;
  533|      0|#endif
  534|      0|		case 'm':
  ------------------
  |  Branch (534:3): [True: 0, False: 7]
  ------------------
  535|      0|			cp = strerror(saved_errno);
  536|      0|			size = (prec >= 0) ? strnlen(cp, prec) : strlen(cp);
  ------------------
  |  Branch (536:11): [True: 0, False: 0]
  ------------------
  537|      0|			sign = '\0';
  538|      0|			break;
  539|      0|		case 'O':
  ------------------
  |  Branch (539:3): [True: 0, False: 7]
  ------------------
  540|      0|			flags |= LONGINT;
  ------------------
  |  |   46|      0|#define	LONGINT		0x010		/* long integer */
  ------------------
  541|       |			/*FALLTHROUGH*/
  542|      0|		case 'o':
  ------------------
  |  Branch (542:3): [True: 0, False: 7]
  ------------------
  543|      0|			if (flags & INTMAX_SIZE)
  ------------------
  |  |  225|      0|#define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   55|      0|#define	INTMAXT		0x1000		/* intmax_t */
  |  |  ------------------
  |  |               #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   53|      0|#define	SIZET		0x400		/* size_t */
  |  |  ------------------
  |  |               #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   54|      0|#define	PTRDIFFT	0x800		/* ptrdiff_t */
  |  |  ------------------
  |  |               #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   47|      0|#define	LLONGINT	0x020		/* long long integer */
  |  |  ------------------
  |  |               #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   45|      0|#define	LONGDBL		0x008		/* long double */
  |  |  ------------------
  ------------------
  |  Branch (543:8): [True: 0, False: 0]
  ------------------
  544|      0|				ujval = UJARG();
  ------------------
  |  |  233|      0|	(flags&LONGDBL ? GETARG(uint64_t) : \
  |  |  ------------------
  |  |  |  |   45|      0|#define	LONGDBL		0x008		/* long double */
  |  |  ------------------
  |  |               	(flags&LONGDBL ? GETARG(uint64_t) : \
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  |  |  |  Branch (233:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  234|      0|	    flags&INTMAXT ? GETARG(uintmax_t) : \
  |  |  ------------------
  |  |  |  |   55|      0|#define	INTMAXT		0x1000		/* intmax_t */
  |  |  ------------------
  |  |               	    flags&INTMAXT ? GETARG(uintmax_t) : \
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  |  |  |  Branch (234:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  235|      0|	    flags&SIZET ? (uintmax_t)GETARG(size_t) : \
  |  |  ------------------
  |  |  |  |   53|      0|#define	SIZET		0x400		/* size_t */
  |  |  ------------------
  |  |               	    flags&SIZET ? (uintmax_t)GETARG(size_t) : \
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  |  |  |  Branch (235:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  236|      0|	    flags&PTRDIFFT ? (uintmax_t)GETARG(ptrdiff_t) : \
  |  |  ------------------
  |  |  |  |   54|      0|#define	PTRDIFFT	0x800		/* ptrdiff_t */
  |  |  ------------------
  |  |               	    flags&PTRDIFFT ? (uintmax_t)GETARG(ptrdiff_t) : \
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  |  |  |  Branch (236:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  237|      0|	    (uintmax_t)GETARG(unsigned long long))
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  ------------------
  545|      0|			else
  546|      0|				ulval = UARG();
  ------------------
  |  |  221|      0|	(flags&LONGINT ? GETARG(u_long) : \
  |  |  ------------------
  |  |  |  |   46|      0|#define	LONGINT		0x010		/* long integer */
  |  |  ------------------
  |  |               	(flags&LONGINT ? GETARG(u_long) : \
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  |  |  |  Branch (221:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  222|      0|	    flags&SHORTINT ? (u_long)(u_short)GETARG(int) : \
  |  |  ------------------
  |  |  |  |   48|      0|#define	SHORTINT	0x040		/* short integer */
  |  |  ------------------
  |  |               	    flags&SHORTINT ? (u_long)(u_short)GETARG(int) : \
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  |  |  |  Branch (222:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  223|      0|	    flags&CHARINT ? (u_long)(u_char)GETARG(int) : \
  |  |  ------------------
  |  |  |  |   56|      0|#define	CHARINT		0x2000		/* print char using int format */
  |  |  ------------------
  |  |               	    flags&CHARINT ? (u_long)(u_char)GETARG(int) : \
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  |  |  |  Branch (223:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  224|      0|	    (u_long)GETARG(u_int))
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  ------------------
  547|      0|			base = 8;
  548|      0|			goto nosign;
  549|      0|		case 'p':
  ------------------
  |  Branch (549:3): [True: 0, False: 7]
  ------------------
  550|       |			/*-
  551|       |			 * ``The argument shall be a pointer to void.  The
  552|       |			 * value of the pointer is converted to a sequence
  553|       |			 * of printable characters, in an implementation-
  554|       |			 * defined manner.''
  555|       |			 *	-- ANSI X3J11
  556|       |			 */
  557|      0|			ptrval = GETARG(void *);
  ------------------
  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  ------------------
  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  ------------------
  558|      0|			if (printfrr_ext_char(fmt[0])) {
  ------------------
  |  |  102|      0|#define printfrr_ext_char(ch) ((ch) >= 'A' && (ch) <= 'Z')
  |  |  ------------------
  |  |  |  Branch (102:32): [True: 0, False: 0]
  |  |  |  Branch (102:47): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  559|      0|				struct printfrr_eargs ea = {
  560|      0|					.fmt = fmt,
  561|      0|					.precision = prec,
  562|      0|					.width = width,
  563|      0|					.alt_repr = !!(flags & ALT),
  ------------------
  |  |   43|      0|#define	ALT		0x001		/* alternate form */
  ------------------
  564|      0|					.leftadj = !!(flags & LADJUST),
  ------------------
  |  |   44|      0|#define	LADJUST		0x004		/* left adjustment */
  ------------------
  565|      0|				};
  566|       |
  567|      0|				if (cb)
  ------------------
  |  Branch (567:9): [True: 0, False: 0]
  ------------------
  568|      0|					extstart = cb->pos;
  569|       |
  570|      0|				size = printfrr_extp(cb, &ea, ptrval);
  571|      0|				if (size >= 0) {
  ------------------
  |  Branch (571:9): [True: 0, False: 0]
  ------------------
  572|      0|					fmt = ea.fmt;
  573|      0|					width = ea.width;
  574|      0|					goto ext_printed;
  575|      0|				}
  576|      0|			}
  577|      0|			ujval = (uintmax_t)(uintptr_t)ptrval;
  578|      0|			base = 16;
  579|      0|			xdigs = xdigs_lower;
  580|      0|			flags = flags | INTMAXT;
  ------------------
  |  |   55|      0|#define	INTMAXT		0x1000		/* intmax_t */
  ------------------
  581|      0|			ox[1] = 'x';
  582|      0|			goto nosign;
  583|      0|		case 'S':
  ------------------
  |  Branch (583:3): [True: 0, False: 7]
  ------------------
  584|      0|			flags |= LONGINT;
  ------------------
  |  |   46|      0|#define	LONGINT		0x010		/* long integer */
  ------------------
  585|       |			/*FALLTHROUGH*/
  586|      3|		case 's':
  ------------------
  |  Branch (586:3): [True: 3, False: 4]
  ------------------
  587|       |#ifdef WCHAR_SUPPORT
  588|       |			if (flags & LONGINT) {
  589|       |				wchar_t *wcp;
  590|       |
  591|       |				if (convbuf != NULL)
  592|       |					free(convbuf);
  593|       |				if ((wcp = GETARG(wchar_t *)) == NULL)
  594|       |					cp = "(null)";
  595|       |				else {
  596|       |					convbuf = __wcsconv(wcp, prec);
  597|       |					if (convbuf == NULL) {
  598|       |						goto error;
  599|       |					}
  600|       |					cp = convbuf;
  601|       |				}
  602|       |			} else
  603|       |#endif
  604|      3|			if ((cp = GETARG(char *)) == NULL)
  ------------------
  |  |  208|      3|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  ------------------
  |  |  |  Branch (208:3): [True: 0, False: 3]
  |  |  ------------------
  |  |  209|      3|	    (nextarg++, va_arg(ap, type)))
  ------------------
  |  Branch (604:8): [True: 0, False: 3]
  ------------------
  605|      0|				cp = "(null)";
  606|      3|			size = (prec >= 0) ? strnlen(cp, prec) : strlen(cp);
  ------------------
  |  Branch (606:11): [True: 0, False: 3]
  ------------------
  607|      3|			sign = '\0';
  608|      3|			break;
  609|      0|		case 'U':
  ------------------
  |  Branch (609:3): [True: 0, False: 7]
  ------------------
  610|      0|			flags |= LONGINT;
  ------------------
  |  |   46|      0|#define	LONGINT		0x010		/* long integer */
  ------------------
  611|       |			/*FALLTHROUGH*/
  612|      0|		case 'u':
  ------------------
  |  Branch (612:3): [True: 0, False: 7]
  ------------------
  613|      0|			if (flags & INTMAX_SIZE)
  ------------------
  |  |  225|      0|#define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   55|      0|#define	INTMAXT		0x1000		/* intmax_t */
  |  |  ------------------
  |  |               #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   53|      0|#define	SIZET		0x400		/* size_t */
  |  |  ------------------
  |  |               #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   54|      0|#define	PTRDIFFT	0x800		/* ptrdiff_t */
  |  |  ------------------
  |  |               #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   47|      0|#define	LLONGINT	0x020		/* long long integer */
  |  |  ------------------
  |  |               #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   45|      0|#define	LONGDBL		0x008		/* long double */
  |  |  ------------------
  ------------------
  |  Branch (613:8): [True: 0, False: 0]
  ------------------
  614|      0|				ujval = UJARG();
  ------------------
  |  |  233|      0|	(flags&LONGDBL ? GETARG(uint64_t) : \
  |  |  ------------------
  |  |  |  |   45|      0|#define	LONGDBL		0x008		/* long double */
  |  |  ------------------
  |  |               	(flags&LONGDBL ? GETARG(uint64_t) : \
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  |  |  |  Branch (233:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  234|      0|	    flags&INTMAXT ? GETARG(uintmax_t) : \
  |  |  ------------------
  |  |  |  |   55|      0|#define	INTMAXT		0x1000		/* intmax_t */
  |  |  ------------------
  |  |               	    flags&INTMAXT ? GETARG(uintmax_t) : \
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  |  |  |  Branch (234:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  235|      0|	    flags&SIZET ? (uintmax_t)GETARG(size_t) : \
  |  |  ------------------
  |  |  |  |   53|      0|#define	SIZET		0x400		/* size_t */
  |  |  ------------------
  |  |               	    flags&SIZET ? (uintmax_t)GETARG(size_t) : \
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  |  |  |  Branch (235:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  236|      0|	    flags&PTRDIFFT ? (uintmax_t)GETARG(ptrdiff_t) : \
  |  |  ------------------
  |  |  |  |   54|      0|#define	PTRDIFFT	0x800		/* ptrdiff_t */
  |  |  ------------------
  |  |               	    flags&PTRDIFFT ? (uintmax_t)GETARG(ptrdiff_t) : \
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  |  |  |  Branch (236:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  237|      0|	    (uintmax_t)GETARG(unsigned long long))
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  ------------------
  615|      0|			else
  616|      0|				ulval = UARG();
  ------------------
  |  |  221|      0|	(flags&LONGINT ? GETARG(u_long) : \
  |  |  ------------------
  |  |  |  |   46|      0|#define	LONGINT		0x010		/* long integer */
  |  |  ------------------
  |  |               	(flags&LONGINT ? GETARG(u_long) : \
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  |  |  |  Branch (221:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  222|      0|	    flags&SHORTINT ? (u_long)(u_short)GETARG(int) : \
  |  |  ------------------
  |  |  |  |   48|      0|#define	SHORTINT	0x040		/* short integer */
  |  |  ------------------
  |  |               	    flags&SHORTINT ? (u_long)(u_short)GETARG(int) : \
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  |  |  |  Branch (222:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  223|      0|	    flags&CHARINT ? (u_long)(u_char)GETARG(int) : \
  |  |  ------------------
  |  |  |  |   56|      0|#define	CHARINT		0x2000		/* print char using int format */
  |  |  ------------------
  |  |               	    flags&CHARINT ? (u_long)(u_char)GETARG(int) : \
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  |  |  |  Branch (223:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  224|      0|	    (u_long)GETARG(u_int))
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  ------------------
  617|      0|			base = 10;
  618|      0|			goto nosign;
  619|      0|		case 'X':
  ------------------
  |  Branch (619:3): [True: 0, False: 7]
  ------------------
  620|      0|			xdigs = xdigs_upper;
  621|      0|			goto hex;
  622|      0|		case 'x':
  ------------------
  |  Branch (622:3): [True: 0, False: 7]
  ------------------
  623|      0|			xdigs = xdigs_lower;
  624|      0|hex:
  625|      0|			if (flags & INTMAX_SIZE)
  ------------------
  |  |  225|      0|#define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   55|      0|#define	INTMAXT		0x1000		/* intmax_t */
  |  |  ------------------
  |  |               #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   53|      0|#define	SIZET		0x400		/* size_t */
  |  |  ------------------
  |  |               #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   54|      0|#define	PTRDIFFT	0x800		/* ptrdiff_t */
  |  |  ------------------
  |  |               #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   47|      0|#define	LLONGINT	0x020		/* long long integer */
  |  |  ------------------
  |  |               #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   45|      0|#define	LONGDBL		0x008		/* long double */
  |  |  ------------------
  ------------------
  |  Branch (625:8): [True: 0, False: 0]
  ------------------
  626|      0|				ujval = UJARG();
  ------------------
  |  |  233|      0|	(flags&LONGDBL ? GETARG(uint64_t) : \
  |  |  ------------------
  |  |  |  |   45|      0|#define	LONGDBL		0x008		/* long double */
  |  |  ------------------
  |  |               	(flags&LONGDBL ? GETARG(uint64_t) : \
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  |  |  |  Branch (233:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  234|      0|	    flags&INTMAXT ? GETARG(uintmax_t) : \
  |  |  ------------------
  |  |  |  |   55|      0|#define	INTMAXT		0x1000		/* intmax_t */
  |  |  ------------------
  |  |               	    flags&INTMAXT ? GETARG(uintmax_t) : \
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  |  |  |  Branch (234:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  235|      0|	    flags&SIZET ? (uintmax_t)GETARG(size_t) : \
  |  |  ------------------
  |  |  |  |   53|      0|#define	SIZET		0x400		/* size_t */
  |  |  ------------------
  |  |               	    flags&SIZET ? (uintmax_t)GETARG(size_t) : \
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  |  |  |  Branch (235:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  236|      0|	    flags&PTRDIFFT ? (uintmax_t)GETARG(ptrdiff_t) : \
  |  |  ------------------
  |  |  |  |   54|      0|#define	PTRDIFFT	0x800		/* ptrdiff_t */
  |  |  ------------------
  |  |               	    flags&PTRDIFFT ? (uintmax_t)GETARG(ptrdiff_t) : \
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  |  |  |  Branch (236:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  237|      0|	    (uintmax_t)GETARG(unsigned long long))
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  ------------------
  627|      0|			else
  628|      0|				ulval = UARG();
  ------------------
  |  |  221|      0|	(flags&LONGINT ? GETARG(u_long) : \
  |  |  ------------------
  |  |  |  |   46|      0|#define	LONGINT		0x010		/* long integer */
  |  |  ------------------
  |  |               	(flags&LONGINT ? GETARG(u_long) : \
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  |  |  |  Branch (221:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  222|      0|	    flags&SHORTINT ? (u_long)(u_short)GETARG(int) : \
  |  |  ------------------
  |  |  |  |   48|      0|#define	SHORTINT	0x040		/* short integer */
  |  |  ------------------
  |  |               	    flags&SHORTINT ? (u_long)(u_short)GETARG(int) : \
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  |  |  |  Branch (222:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  223|      0|	    flags&CHARINT ? (u_long)(u_char)GETARG(int) : \
  |  |  ------------------
  |  |  |  |   56|      0|#define	CHARINT		0x2000		/* print char using int format */
  |  |  ------------------
  |  |               	    flags&CHARINT ? (u_long)(u_char)GETARG(int) : \
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  |  |  |  Branch (223:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  224|      0|	    (u_long)GETARG(u_int))
  |  |  ------------------
  |  |  |  |  208|      0|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|	    (nextarg++, va_arg(ap, type)))
  |  |  ------------------
  ------------------
  629|      0|			base = 16;
  630|       |			/* leading 0x/X only if non-zero */
  631|      0|			if (flags & ALT &&
  ------------------
  |  |   43|      0|#define	ALT		0x001		/* alternate form */
  ------------------
  |  Branch (631:8): [True: 0, False: 0]
  ------------------
  632|      0|			    (flags & INTMAX_SIZE ? ujval != 0 : ulval != 0))
  ------------------
  |  |  225|      0|#define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   55|      0|#define	INTMAXT		0x1000		/* intmax_t */
  |  |  ------------------
  |  |               #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   53|      0|#define	SIZET		0x400		/* size_t */
  |  |  ------------------
  |  |               #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   54|      0|#define	PTRDIFFT	0x800		/* ptrdiff_t */
  |  |  ------------------
  |  |               #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   47|      0|#define	LLONGINT	0x020		/* long long integer */
  |  |  ------------------
  |  |               #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   45|      0|#define	LONGDBL		0x008		/* long double */
  |  |  ------------------
  ------------------
  |  Branch (632:8): [True: 0, False: 0]
  |  Branch (632:9): [True: 0, False: 0]
  ------------------
  633|      0|				ox[1] = ch;
  634|       |
  635|      0|			flags &= ~GROUPING;
  ------------------
  |  |   51|      0|#define	GROUPING	0x200		/* use grouping ("'" flag) */
  ------------------
  636|       |			/* unsigned conversions */
  637|      0|nosign:			sign = '\0';
  638|       |			/*-
  639|       |			 * ``... diouXx conversions ... if a precision is
  640|       |			 * specified, the 0 flag will be ignored.''
  641|       |			 *	-- ANSI X3J11
  642|       |			 */
  643|      2|number:			if ((dprec = prec) >= 0)
  ------------------
  |  Branch (643:15): [True: 0, False: 2]
  ------------------
  644|      0|				flags &= ~ZEROPAD;
  ------------------
  |  |   49|      0|#define	ZEROPAD		0x080		/* zero (as opposed to blank) pad */
  ------------------
  645|       |
  646|       |			/*-
  647|       |			 * ``The result of converting a zero value with an
  648|       |			 * explicit precision of zero is no characters.''
  649|       |			 *	-- ANSI X3J11
  650|       |			 *
  651|       |			 * ``The C Standard is clear enough as is.  The call
  652|       |			 * printf("%#.0o", 0) should print 0.''
  653|       |			 *	-- Defect Report #151
  654|       |			 */
  655|      2|			cp = buf + BUF;
  ------------------
  |  |  141|      2|#define	BUF	80
  ------------------
  656|      2|			if (flags & INTMAX_SIZE) {
  ------------------
  |  |  225|      2|#define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   55|      2|#define	INTMAXT		0x1000		/* intmax_t */
  |  |  ------------------
  |  |               #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   53|      2|#define	SIZET		0x400		/* size_t */
  |  |  ------------------
  |  |               #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   54|      2|#define	PTRDIFFT	0x800		/* ptrdiff_t */
  |  |  ------------------
  |  |               #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   47|      2|#define	LLONGINT	0x020		/* long long integer */
  |  |  ------------------
  |  |               #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  |  |  ------------------
  |  |  |  |   45|      2|#define	LONGDBL		0x008		/* long double */
  |  |  ------------------
  ------------------
  |  Branch (656:8): [True: 1, False: 1]
  ------------------
  657|      1|				if (ujval != 0 || prec != 0 ||
  ------------------
  |  Branch (657:9): [True: 1, False: 0]
  |  Branch (657:23): [True: 0, False: 0]
  ------------------
  658|      0|				    (flags & ALT && base == 8))
  ------------------
  |  |   43|      0|#define	ALT		0x001		/* alternate form */
  ------------------
  |  Branch (658:10): [True: 0, False: 0]
  |  Branch (658:25): [True: 0, False: 0]
  ------------------
  659|      1|					cp = __ujtoa(ujval, buf + BUF, base,
  ------------------
  |  |  141|      1|#define	BUF	80
  ------------------
  660|      1|					    flags & ALT, xdigs);
  ------------------
  |  |   43|      1|#define	ALT		0x001		/* alternate form */
  ------------------
  661|      1|			} else {
  662|      1|				if (ulval != 0 || prec != 0 ||
  ------------------
  |  Branch (662:9): [True: 1, False: 0]
  |  Branch (662:23): [True: 0, False: 0]
  ------------------
  663|      0|				    (flags & ALT && base == 8))
  ------------------
  |  |   43|      0|#define	ALT		0x001		/* alternate form */
  ------------------
  |  Branch (663:10): [True: 0, False: 0]
  |  Branch (663:25): [True: 0, False: 0]
  ------------------
  664|      1|					cp = __ultoa(ulval, buf + BUF, base,
  ------------------
  |  |  141|      1|#define	BUF	80
  ------------------
  665|      1|					    flags & ALT, xdigs);
  ------------------
  |  |   43|      1|#define	ALT		0x001		/* alternate form */
  ------------------
  666|      1|			}
  667|      2|			size = buf + BUF - cp;
  ------------------
  |  |  141|      2|#define	BUF	80
  ------------------
  668|      2|			if (size > BUF)	/* should never happen */
  ------------------
  |  |  141|      2|#define	BUF	80
  ------------------
  |  Branch (668:8): [True: 0, False: 2]
  ------------------
  669|      0|				abort();
  670|      2|			break;
  671|      2|		default:	/* "%?" prints ?, unless ? is NUL */
  ------------------
  |  Branch (671:3): [True: 0, False: 7]
  ------------------
  672|      0|			if (ch == '\0')
  ------------------
  |  Branch (672:8): [True: 0, False: 0]
  ------------------
  673|      0|				goto done;
  674|       |			/* pretend it was %c with argument ch */
  675|      0|			buf[0] = ch;
  676|      0|			cp = buf;
  677|      0|			size = 1;
  678|      0|			sign = '\0';
  679|      0|			opos = NULL;
  680|      0|			break;
  681|      7|		}
  682|       |
  683|       |		/*
  684|       |		 * All reasonable formats wind up here.  At this point, `cp'
  685|       |		 * points to a string which (if not flags&LADJUST) should be
  686|       |		 * padded out to `width' places.  If flags&ZEROPAD, it should
  687|       |		 * first be prefixed by any sign or other prefix; otherwise,
  688|       |		 * it should be blank padded before the prefix is emitted.
  689|       |		 * After any left-hand padding and prefixing, emit zeroes
  690|       |		 * required by a decimal [diouxX] precision, then print the
  691|       |		 * string proper, then emit zeroes required by any leftover
  692|       |		 * floating precision; finally, if LADJUST, pad with blanks.
  693|       |		 *
  694|       |		 * Compute actual size, so we know how much to pad.
  695|       |		 * size excludes decimal prec; realsz includes it.
  696|       |		 */
  697|      5|		if (width < 0)
  ------------------
  |  Branch (697:7): [True: 5, False: 0]
  ------------------
  698|      5|			width = 0;
  699|       |
  700|      5|		realsz = dprec > size ? dprec : size;
  ------------------
  |  Branch (700:12): [True: 0, False: 5]
  ------------------
  701|      5|		if (sign)
  ------------------
  |  Branch (701:7): [True: 0, False: 5]
  ------------------
  702|      0|			realsz++;
  703|      5|		if (ox[1])
  ------------------
  |  Branch (703:7): [True: 0, False: 5]
  ------------------
  704|      0|			realsz += 2;
  705|       |
  706|      5|		prsize = width > realsz ? width : realsz;
  ------------------
  |  Branch (706:12): [True: 0, False: 5]
  ------------------
  707|      5|		if ((unsigned int)ret + prsize > INT_MAX) {
  ------------------
  |  Branch (707:7): [True: 0, False: 5]
  ------------------
  708|      0|			ret = EOF;
  709|      0|			errno = EOVERFLOW;
  710|      0|			goto error;
  711|      0|		}
  712|       |
  713|       |		/* right-adjusting blank padding */
  714|      5|		if ((flags & (LADJUST|ZEROPAD)) == 0)
  ------------------
  |  |   44|      5|#define	LADJUST		0x004		/* left adjustment */
  ------------------
              		if ((flags & (LADJUST|ZEROPAD)) == 0)
  ------------------
  |  |   49|      5|#define	ZEROPAD		0x080		/* zero (as opposed to blank) pad */
  ------------------
  |  Branch (714:7): [True: 5, False: 0]
  ------------------
  715|      5|			PAD(width - realsz, blanks);
  ------------------
  |  |  192|      5|#define	PAD(howmany, with) { \
  |  |  193|      5|	if (io_pad(&io, (howmany), (with))) \
  |  |  ------------------
  |  |  |  Branch (193:6): [True: 0, False: 5]
  |  |  ------------------
  |  |  194|      5|		goto error; \
  |  |  195|      5|}
  ------------------
  716|       |
  717|      5|		if (opos)
  ------------------
  |  Branch (717:7): [True: 0, False: 5]
  ------------------
  718|      0|			opos->off_start = cb->pos - cb->buf;
  719|       |
  720|       |		/* prefix */
  721|      5|		if (sign)
  ------------------
  |  Branch (721:7): [True: 0, False: 5]
  ------------------
  722|      5|			PRINT(&sign, 1);
  ------------------
  |  |  188|      0|#define	PRINT(ptr, len) { \
  |  |  189|      0|	if (io_print(&io, (ptr), (len)))	\
  |  |  ------------------
  |  |  |  Branch (189:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  190|      0|		goto error; \
  |  |  191|      0|}
  ------------------
  723|       |
  724|      5|		if (ox[1]) {	/* ox[1] is either x, X, or \0 */
  ------------------
  |  Branch (724:7): [True: 0, False: 5]
  ------------------
  725|      0|			ox[0] = '0';
  726|      0|			PRINT(ox, 2);
  ------------------
  |  |  188|      0|#define	PRINT(ptr, len) { \
  |  |  189|      0|	if (io_print(&io, (ptr), (len)))	\
  |  |  ------------------
  |  |  |  Branch (189:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  190|      0|		goto error; \
  |  |  191|      0|}
  ------------------
  727|      0|		}
  728|       |
  729|       |		/* right-adjusting zero padding */
  730|      5|		if ((flags & (LADJUST|ZEROPAD)) == ZEROPAD)
  ------------------
  |  |   44|      5|#define	LADJUST		0x004		/* left adjustment */
  ------------------
              		if ((flags & (LADJUST|ZEROPAD)) == ZEROPAD)
  ------------------
  |  |   49|      5|#define	ZEROPAD		0x080		/* zero (as opposed to blank) pad */
  ------------------
              		if ((flags & (LADJUST|ZEROPAD)) == ZEROPAD)
  ------------------
  |  |   49|      5|#define	ZEROPAD		0x080		/* zero (as opposed to blank) pad */
  ------------------
  |  Branch (730:7): [True: 0, False: 5]
  ------------------
  731|      5|			PAD(width - realsz, zeroes);
  ------------------
  |  |  192|      0|#define	PAD(howmany, with) { \
  |  |  193|      0|	if (io_pad(&io, (howmany), (with))) \
  |  |  ------------------
  |  |  |  Branch (193:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  194|      0|		goto error; \
  |  |  195|      0|}
  ------------------
  732|       |
  733|       |		/* the string or number proper */
  734|       |		/* leading zeroes from decimal precision */
  735|      5|		PAD(dprec - size, zeroes);
  ------------------
  |  |  192|      5|#define	PAD(howmany, with) { \
  |  |  193|      5|	if (io_pad(&io, (howmany), (with))) \
  |  |  ------------------
  |  |  |  Branch (193:6): [True: 0, False: 5]
  |  |  ------------------
  |  |  194|      5|		goto error; \
  |  |  195|      5|}
  ------------------
  736|      5|		PRINT(cp, size);
  ------------------
  |  |  188|      5|#define	PRINT(ptr, len) { \
  |  |  189|      5|	if (io_print(&io, (ptr), (len)))	\
  |  |  ------------------
  |  |  |  Branch (189:6): [True: 0, False: 5]
  |  |  ------------------
  |  |  190|      5|		goto error; \
  |  |  191|      5|}
  ------------------
  737|       |
  738|      5|		if (opos) {
  ------------------
  |  Branch (738:7): [True: 0, False: 5]
  ------------------
  739|      0|			opos->off_end = cb->pos - cb->buf;
  740|      0|			cb_in->outpos_i++;
  741|      0|		}
  742|       |
  743|       |		/* left-adjusting padding (always blank) */
  744|      5|		if (flags & LADJUST)
  ------------------
  |  |   44|      5|#define	LADJUST		0x004		/* left adjustment */
  ------------------
  |  Branch (744:7): [True: 0, False: 5]
  ------------------
  745|      5|			PAD(width - realsz, blanks);
  ------------------
  |  |  192|      0|#define	PAD(howmany, with) { \
  |  |  193|      0|	if (io_pad(&io, (howmany), (with))) \
  |  |  ------------------
  |  |  |  Branch (193:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  194|      0|		goto error; \
  |  |  195|      0|}
  ------------------
  746|       |
  747|       |		/* finally, adjust ret */
  748|      5|		ret += prsize;
  749|       |
  750|      5|		FLUSH();	/* copy out the I/O vectors */
  ------------------
  |  |  200|      5|#define	FLUSH() do { } while (0)
  |  |  ------------------
  |  |  |  Branch (200:31): [Folded, False: 5]
  |  |  ------------------
  ------------------
  751|      5|		continue;
  752|       |
  753|      0|ext_printed:
  754|       |		/* when we arrive here, a printfrr extension has written to cb
  755|       |		 * (if non-NULL), but we still need to handle padding.  The
  756|       |		 * original cb->pos is in extstart;  the return value from the
  757|       |		 * ext is in size.
  758|       |		 *
  759|       |		 * Keep analogous to code above please.
  760|       |		 */
  761|       |
  762|      0|		if (width < 0)
  ------------------
  |  Branch (762:7): [True: 0, False: 0]
  ------------------
  763|      0|			width = 0;
  764|       |
  765|      0|		realsz = size;
  766|      0|		prsize = width > realsz ? width : realsz;
  ------------------
  |  Branch (766:12): [True: 0, False: 0]
  ------------------
  767|      0|		if ((unsigned int)ret + prsize > INT_MAX) {
  ------------------
  |  Branch (767:7): [True: 0, False: 0]
  ------------------
  768|      0|			ret = EOF;
  769|      0|			errno = EOVERFLOW;
  770|      0|			goto error;
  771|      0|		}
  772|       |
  773|       |		/* right-adjusting blank padding - need to move the chars
  774|       |		 * that the extension has already written.  Should be very
  775|       |		 * rare.
  776|       |		 */
  777|      0|		if (cb && width > size && (flags & (LADJUST|ZEROPAD)) == 0) {
  ------------------
  |  |   44|      0|#define	LADJUST		0x004		/* left adjustment */
  ------------------
              		if (cb && width > size && (flags & (LADJUST|ZEROPAD)) == 0) {
  ------------------
  |  |   49|      0|#define	ZEROPAD		0x080		/* zero (as opposed to blank) pad */
  ------------------
  |  Branch (777:7): [True: 0, False: 0]
  |  Branch (777:13): [True: 0, False: 0]
  |  Branch (777:29): [True: 0, False: 0]
  ------------------
  778|      0|			size_t nwritten = cb->pos - extstart;
  779|      0|			size_t navail = cb->buf + cb->len - extstart;
  780|      0|			size_t npad = width - realsz;
  781|      0|			size_t nmove;
  782|       |
  783|      0|			if (navail < npad)
  ------------------
  |  Branch (783:8): [True: 0, False: 0]
  ------------------
  784|      0|				navail = 0;
  785|      0|			else
  786|      0|				navail -= npad;
  787|      0|			nmove = MIN(nwritten, navail);
  ------------------
  |  |  236|      0|	({                                                                     \
  |  |  237|      0|		typeof(a) _min_a = (a);                                        \
  |  |  238|      0|		typeof(b) _min_b = (b);                                        \
  |  |  239|      0|		_min_a < _min_b ? _min_a : _min_b;                             \
  |  |  ------------------
  |  |  |  Branch (239:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  240|      0|	})
  ------------------
  788|       |
  789|      0|			memmove(extstart + npad, extstart, nmove);
  790|       |
  791|      0|			cb->pos = extstart;
  792|      0|			PAD(npad, blanks);
  ------------------
  |  |  192|      0|#define	PAD(howmany, with) { \
  |  |  193|      0|	if (io_pad(&io, (howmany), (with))) \
  |  |  ------------------
  |  |  |  Branch (193:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  194|      0|		goto error; \
  |  |  195|      0|}
  ------------------
  793|      0|			cb->pos += nmove;
  794|      0|			extstart += npad;
  795|      0|		}
  796|       |
  797|      0|		io.avail = cb ? cb->len - (cb->pos - cb->buf) : 0;
  ------------------
  |  Branch (797:14): [True: 0, False: 0]
  ------------------
  798|       |
  799|      0|		if (opos && extstart <= cb->pos) {
  ------------------
  |  Branch (799:7): [True: 0, False: 0]
  |  Branch (799:15): [True: 0, False: 0]
  ------------------
  800|      0|			opos->off_start = extstart - cb->buf;
  801|      0|			opos->off_end = cb->pos - cb->buf;
  802|      0|			cb_in->outpos_i++;
  803|      0|		}
  804|       |
  805|       |		/* left-adjusting padding (always blank) */
  806|      0|		if (flags & LADJUST)
  ------------------
  |  |   44|      0|#define	LADJUST		0x004		/* left adjustment */
  ------------------
  |  Branch (806:7): [True: 0, False: 0]
  ------------------
  807|      0|			PAD(width - realsz, blanks);
  ------------------
  |  |  192|      0|#define	PAD(howmany, with) { \
  |  |  193|      0|	if (io_pad(&io, (howmany), (with))) \
  |  |  ------------------
  |  |  |  Branch (193:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  194|      0|		goto error; \
  |  |  195|      0|}
  ------------------
  808|       |
  809|       |		/* finally, adjust ret */
  810|      0|		ret += prsize;
  811|       |
  812|      0|		FLUSH();	/* copy out the I/O vectors */
  ------------------
  |  |  200|      0|#define	FLUSH() do { } while (0)
  |  |  ------------------
  |  |  |  Branch (200:31): [Folded, False: 0]
  |  |  ------------------
  ------------------
  813|      0|	}
  814|      3|done:
  815|      3|	FLUSH();
  ------------------
  |  |  200|      3|#define	FLUSH() do { } while (0)
  |  |  ------------------
  |  |  |  Branch (200:31): [Folded, False: 3]
  |  |  ------------------
  ------------------
  816|      3|error:
  817|      3|	va_end(orgap);
  818|      3|	if (convbuf != NULL)
  ------------------
  |  Branch (818:6): [True: 0, False: 3]
  ------------------
  819|      0|		free(convbuf);
  820|      3|	if ((argtable != NULL) && (argtable != statargtable))
  ------------------
  |  Branch (820:6): [True: 0, False: 3]
  |  Branch (820:28): [True: 0, False: 0]
  ------------------
  821|      0|		free (argtable);
  822|      3|	if (cb_in)
  ------------------
  |  Branch (822:6): [True: 3, False: 0]
  ------------------
  823|      3|		cb_in->pos = cb->pos;
  824|      3|	return (ret);
  825|       |	/* NOTREACHED */
  826|      3|}

asn.c:_printreg_printfrr_asplain:
  202|      2|	{                                                                      \
  203|      2|		printfrr_ext_reg(&_printext_##print_fn);                       \
  204|      2|	}                                                                      \
asn.c:_printreg_printfrr_asdot:
  202|      2|	{                                                                      \
  203|      2|		printfrr_ext_reg(&_printext_##print_fn);                       \
  204|      2|	}                                                                      \
asn.c:_printreg_printfrr_asdotplus:
  202|      2|	{                                                                      \
  203|      2|		printfrr_ext_reg(&_printext_##print_fn);                       \
  204|      2|	}                                                                      \
iso.c:_printreg_printfrr_iso_sysid:
  202|      2|	{                                                                      \
  203|      2|		printfrr_ext_reg(&_printext_##print_fn);                       \
  204|      2|	}                                                                      \
iso.c:_printreg_printfrr_iso_pseudo:
  202|      2|	{                                                                      \
  203|      2|		printfrr_ext_reg(&_printext_##print_fn);                       \
  204|      2|	}                                                                      \
iso.c:_printreg_printfrr_iso_frag_id:
  202|      2|	{                                                                      \
  203|      2|		printfrr_ext_reg(&_printext_##print_fn);                       \
  204|      2|	}                                                                      \
iso.c:_printreg_printfrr_iso_addr:
  202|      2|	{                                                                      \
  203|      2|		printfrr_ext_reg(&_printext_##print_fn);                       \
  204|      2|	}                                                                      \
nexthop.c:_printreg_printfrr_nh:
  202|      2|	{                                                                      \
  203|      2|		printfrr_ext_reg(&_printext_##print_fn);                       \
  204|      2|	}                                                                      \
prefix.c:_printreg_printfrr_ea:
  202|      2|	{                                                                      \
  203|      2|		printfrr_ext_reg(&_printext_##print_fn);                       \
  204|      2|	}                                                                      \
prefix.c:_printreg_printfrr_ia:
  202|      2|	{                                                                      \
  203|      2|		printfrr_ext_reg(&_printext_##print_fn);                       \
  204|      2|	}                                                                      \
prefix.c:_printreg_printfrr_i4:
  202|      2|	{                                                                      \
  203|      2|		printfrr_ext_reg(&_printext_##print_fn);                       \
  204|      2|	}                                                                      \
prefix.c:_printreg_printfrr_i6:
  202|      2|	{                                                                      \
  203|      2|		printfrr_ext_reg(&_printext_##print_fn);                       \
  204|      2|	}                                                                      \
prefix.c:_printreg_printfrr_pfx:
  202|      2|	{                                                                      \
  203|      2|		printfrr_ext_reg(&_printext_##print_fn);                       \
  204|      2|	}                                                                      \
prefix.c:_printreg_printfrr_psg:
  202|      2|	{                                                                      \
  203|      2|		printfrr_ext_reg(&_printext_##print_fn);                       \
  204|      2|	}                                                                      \
sockunion.c:_printreg_printfrr_psu:
  202|      2|	{                                                                      \
  203|      2|		printfrr_ext_reg(&_printext_##print_fn);                       \
  204|      2|	}                                                                      \
sockunion.c:_printreg_printfrr_pf:
  216|      2|	{                                                                      \
  217|      2|		printfrr_ext_reg(&_printext_##print_fn);                       \
  218|      2|	}                                                                      \
sockunion.c:_printreg_printfrr_so:
  216|      2|	{                                                                      \
  217|      2|		printfrr_ext_reg(&_printext_##print_fn);                       \
  218|      2|	}                                                                      \
srcdest_table.c:_printreg_printfrr_rn:
  202|      2|	{                                                                      \
  203|      2|		printfrr_ext_reg(&_printext_##print_fn);                       \
  204|      2|	}                                                                      \
strformat.c:_printreg_printfrr_hexdump:
  202|      2|	{                                                                      \
  203|      2|		printfrr_ext_reg(&_printext_##print_fn);                       \
  204|      2|	}                                                                      \
strformat.c:_printreg_printfrr_hexdstr:
  202|      2|	{                                                                      \
  203|      2|		printfrr_ext_reg(&_printext_##print_fn);                       \
  204|      2|	}                                                                      \
strformat.c:_printreg_printfrr_escape:
  202|      2|	{                                                                      \
  203|      2|		printfrr_ext_reg(&_printext_##print_fn);                       \
  204|      2|	}                                                                      \
strformat.c:_printreg_printfrr_quote:
  202|      2|	{                                                                      \
  203|      2|		printfrr_ext_reg(&_printext_##print_fn);                       \
  204|      2|	}                                                                      \
strformat.c:_printreg_printfrr_ts:
  202|      2|	{                                                                      \
  203|      2|		printfrr_ext_reg(&_printext_##print_fn);                       \
  204|      2|	}                                                                      \
strformat.c:_printreg_printfrr_tv:
  202|      2|	{                                                                      \
  203|      2|		printfrr_ext_reg(&_printext_##print_fn);                       \
  204|      2|	}                                                                      \
strformat.c:_printreg_printfrr_tt:
  202|      2|	{                                                                      \
  203|      2|		printfrr_ext_reg(&_printext_##print_fn);                       \
  204|      2|	}                                                                      \
event.c:_printreg_printfrr_thread:
  202|      2|	{                                                                      \
  203|      2|		printfrr_ext_reg(&_printext_##print_fn);                       \
  204|      2|	}                                                                      \
glue.c:_printreg_printfrr_fb:
  202|      2|	{                                                                      \
  203|      2|		printfrr_ext_reg(&_printext_##print_fn);                       \
  204|      2|	}                                                                      \
glue.c:_printreg_printfrr_va:
  202|      2|	{                                                                      \
  203|      2|		printfrr_ext_reg(&_printext_##print_fn);                       \
  204|      2|	}                                                                      \

zprivs_preinit:
  547|      1|{
  548|      1|	struct passwd *pwentry = NULL;
  549|      1|	struct group *grentry = NULL;
  550|       |
  551|      1|	if (!zprivs) {
  ------------------
  |  Branch (551:6): [True: 0, False: 1]
  ------------------
  552|      0|		fprintf(stderr, "zprivs_init: called with NULL arg!\n");
  553|      0|		exit(1);
  554|      0|	}
  555|       |
  556|      1|	pthread_mutex_init(&(zprivs->mutex), NULL);
  557|      1|	zprivs->process_refs.refcount = 0;
  558|      1|	zprivs->process_refs.raised_in_funcname = NULL;
  559|      1|	STAILQ_INIT(&zprivs->thread_refs);
  ------------------
  |  |  254|      1|	do {                                                                   \
  |  |  255|      1|		STAILQ_FIRST((head)) = NULL;                                   \
  |  |  ------------------
  |  |  |  |  242|      1|#define	STAILQ_FIRST(head)	((head)->stqh_first)
  |  |  ------------------
  |  |  256|      1|		(head)->stqh_last = &STAILQ_FIRST((head));                     \
  |  |  ------------------
  |  |  |  |  242|      1|#define	STAILQ_FIRST(head)	((head)->stqh_first)
  |  |  ------------------
  |  |  257|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (257:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  560|       |
  561|      1|#ifdef FUZZING
  562|      1|	zprivs->user = NULL;
  563|      1|	zprivs->group = NULL;
  564|      1|	zprivs->vty_group = NULL;
  565|      1|#endif
  566|       |
  567|      1|	if (zprivs->vty_group) {
  ------------------
  |  Branch (567:6): [True: 0, False: 1]
  ------------------
  568|       |		/* in a "NULL" setup, this is allowed to fail too, but still
  569|       |		 * try. */
  570|      0|		if ((grentry = getgrnam(zprivs->vty_group)))
  ------------------
  |  Branch (570:7): [True: 0, False: 0]
  ------------------
  571|      0|			zprivs_state.vtygrp = grentry->gr_gid;
  572|      0|		else
  573|      0|			zprivs_state.vtygrp = (gid_t)-1;
  574|      0|	}
  575|       |
  576|       |	/* NULL privs */
  577|      1|	if (!(zprivs->user || zprivs->group || zprivs->cap_num_p
  ------------------
  |  Branch (577:8): [True: 0, False: 1]
  |  Branch (577:24): [True: 0, False: 1]
  |  Branch (577:41): [True: 1, False: 0]
  ------------------
  578|      0|	      || zprivs->cap_num_i)) {
  ------------------
  |  Branch (578:11): [True: 0, False: 0]
  ------------------
  579|      0|		zprivs->change = zprivs_change_null;
  580|      0|		zprivs->current_state = zprivs_state_null;
  581|      0|		return;
  582|      0|	}
  583|       |
  584|      1|	if (zprivs->user) {
  ------------------
  |  Branch (584:6): [True: 0, False: 1]
  ------------------
  585|      0|		if ((pwentry = getpwnam(zprivs->user)) == NULL) {
  ------------------
  |  Branch (585:7): [True: 0, False: 0]
  ------------------
  586|       |			/* cant use log.h here as it depends on vty */
  587|      0|			fprintf(stderr,
  588|      0|				"privs_init: could not lookup user %s\n",
  589|      0|				zprivs->user);
  590|      0|			exit(1);
  591|      0|		}
  592|       |
  593|      0|		zprivs_state.zuid = pwentry->pw_uid;
  594|      0|		zprivs_state.zgid = pwentry->pw_gid;
  595|      0|	}
  596|       |
  597|      1|	grentry = NULL;
  598|       |
  599|      1|	if (zprivs->group) {
  ------------------
  |  Branch (599:6): [True: 0, False: 1]
  ------------------
  600|      0|		if ((grentry = getgrnam(zprivs->group)) == NULL) {
  ------------------
  |  Branch (600:7): [True: 0, False: 0]
  ------------------
  601|      0|			fprintf(stderr,
  602|      0|				"privs_init: could not lookup group %s\n",
  603|      0|				zprivs->group);
  604|      0|			exit(1);
  605|      0|		}
  606|       |
  607|      0|		zprivs_state.zgid = grentry->gr_gid;
  608|      0|	}
  609|      1|}
zprivs_init:
  614|      1|{
  615|      1|	gid_t groups[NGROUPS_MAX] = {};
  616|      1|	int i, ngroups = 0;
  617|      1|	int found = 0;
  618|       |
  619|       |	/* NULL privs */
  620|      1|	if (!(zprivs->user || zprivs->group || zprivs->cap_num_p
  ------------------
  |  Branch (620:8): [True: 0, False: 1]
  |  Branch (620:24): [True: 0, False: 1]
  |  Branch (620:41): [True: 1, False: 0]
  ------------------
  621|      0|	      || zprivs->cap_num_i))
  ------------------
  |  Branch (621:11): [True: 0, False: 0]
  ------------------
  622|      0|		return;
  623|       |
  624|      1|	lib_privs = zprivs;
  625|       |
  626|      1|	if (zprivs->user) {
  ------------------
  |  Branch (626:6): [True: 0, False: 1]
  ------------------
  627|      0|		ngroups = array_size(groups);
  ------------------
  |  |  311|      0|#define array_size(ar) (sizeof(ar) / sizeof(ar[0]))
  ------------------
  628|      0|		if (getgrouplist(zprivs->user, zprivs_state.zgid, groups,
  ------------------
  |  Branch (628:7): [True: 0, False: 0]
  ------------------
  629|      0|				 &ngroups)
  630|      0|		    < 0) {
  631|       |			/* cant use log.h here as it depends on vty */
  632|      0|			fprintf(stderr,
  633|      0|				"privs_init: could not getgrouplist for user %s\n",
  634|      0|				zprivs->user);
  635|      0|			exit(1);
  636|      0|		}
  637|      0|	}
  638|       |
  639|      1|	if (zprivs->vty_group)
  ------------------
  |  Branch (639:6): [True: 0, False: 1]
  ------------------
  640|       |	/* Add the vty_group to the supplementary groups so it can be chowned to
  641|       |	   */
  642|      0|	{
  643|      0|		if (zprivs_state.vtygrp == (gid_t)-1) {
  ------------------
  |  Branch (643:7): [True: 0, False: 0]
  ------------------
  644|      0|			fprintf(stderr,
  645|      0|				"privs_init: could not lookup vty group %s\n",
  646|      0|				zprivs->vty_group);
  647|      0|			exit(1);
  648|      0|		}
  649|       |
  650|      0|		for (i = 0; i < ngroups; i++)
  ------------------
  |  Branch (650:15): [True: 0, False: 0]
  ------------------
  651|      0|			if (groups[i] == zprivs_state.vtygrp) {
  ------------------
  |  Branch (651:8): [True: 0, False: 0]
  ------------------
  652|      0|				found++;
  653|      0|				break;
  654|      0|			}
  655|       |
  656|      0|		if (!found) {
  ------------------
  |  Branch (656:7): [True: 0, False: 0]
  ------------------
  657|      0|			fprintf(stderr,
  658|      0|				"privs_init: user(%s) is not part of vty group specified(%s)\n",
  659|      0|				zprivs->user, zprivs->vty_group);
  660|      0|			exit(1);
  661|      0|		}
  662|      0|		if (i >= ngroups && ngroups < (int)array_size(groups)) {
  ------------------
  |  |  311|      0|#define array_size(ar) (sizeof(ar) / sizeof(ar[0]))
  ------------------
  |  Branch (662:7): [True: 0, False: 0]
  |  Branch (662:23): [True: 0, False: 0]
  ------------------
  663|      0|			groups[i] = zprivs_state.vtygrp;
  664|      0|		}
  665|      0|	}
  666|       |
  667|      1|	zprivs_state.zsuid = geteuid(); /* initial uid */
  668|       |	/* add groups only if we changed uid - otherwise skip */
  669|       |#ifndef FUZZING
  670|       |	if ((ngroups) && (zprivs_state.zsuid != zprivs_state.zuid)) {
  671|       |		if (setgroups(ngroups, groups)) {
  672|       |			fprintf(stderr, "privs_init: could not setgroups, %s\n",
  673|       |				safe_strerror(errno));
  674|       |			exit(1);
  675|       |		}
  676|       |	}
  677|       |
  678|       |	/* change gid only if we changed uid - otherwise skip */
  679|       |	if ((zprivs_state.zgid) && (zprivs_state.zsuid != zprivs_state.zuid)) {
  680|       |		/* change group now, forever. uid we do later */
  681|       |		if (setregid(zprivs_state.zgid, zprivs_state.zgid)) {
  682|       |			fprintf(stderr, "zprivs_init: could not setregid, %s\n",
  683|       |				safe_strerror(errno));
  684|       |			exit(1);
  685|       |		}
  686|       |	}
  687|       |#endif
  688|       |
  689|      1|#ifdef HAVE_CAPABILITIES
  690|      1|	zprivs_caps_init(zprivs);
  691|       |
  692|       |	/*
  693|       |	 * If we have initialized the system with no requested
  694|       |	 * capabilities, change will not have been set
  695|       |	 * to anything by zprivs_caps_init, As such
  696|       |	 * we should make sure that when we attempt
  697|       |	 * to raize privileges that we actually have
  698|       |	 * a do nothing function to call instead of a
  699|       |	 * crash :).
  700|       |	 */
  701|      1|	if (!zprivs->change)
  ------------------
  |  Branch (701:6): [True: 0, False: 1]
  ------------------
  702|      0|		zprivs->change = zprivs_change_null;
  703|       |
  704|       |#else  /* !HAVE_CAPABILITIES */
  705|       |	/* we dont have caps. we'll need to maintain rid and saved uid
  706|       |	 * and change euid back to saved uid (who we presume has all necessary
  707|       |	 * privileges) whenever we are asked to raise our privileges.
  708|       |	 *
  709|       |	 * This is not worth that much security wise, but all we can do.
  710|       |	 */
  711|       |	zprivs_state.zsuid = geteuid();
  712|       |	/* only change uid if we don't have the correct one */
  713|       |	if ((zprivs_state.zuid) && (zprivs_state.zsuid != zprivs_state.zuid)) {
  714|       |		if (setreuid(-1, zprivs_state.zuid)) {
  715|       |			fprintf(stderr,
  716|       |				"privs_init (uid): could not setreuid, %s\n",
  717|       |				safe_strerror(errno));
  718|       |			exit(1);
  719|       |		}
  720|       |	}
  721|       |#ifndef FUZZING
  722|       |	zprivs->change = zprivs_change_uid;
  723|       |	zprivs->current_state = zprivs_state_uid;
  724|       |#endif
  725|       |#endif /* HAVE_CAPABILITIES */
  726|      1|}
zprivs_get_ids:
  768|      1|{
  769|       |
  770|      1|	ids->uid_priv = getuid();
  771|      1|	(zprivs_state.zuid) ? (ids->uid_normal = zprivs_state.zuid)
  ------------------
  |  Branch (771:2): [True: 0, False: 1]
  ------------------
  772|      1|			    : (ids->uid_normal = (uid_t)-1);
  773|      1|	(zprivs_state.zgid) ? (ids->gid_normal = zprivs_state.zgid)
  ------------------
  |  Branch (773:2): [True: 0, False: 1]
  ------------------
  774|      1|			    : (ids->gid_normal = (uid_t)-1);
  775|      1|	(zprivs_state.vtygrp) ? (ids->gid_vty = zprivs_state.vtygrp)
  ------------------
  |  Branch (775:2): [True: 0, False: 1]
  ------------------
  776|      1|			      : (ids->gid_vty = (uid_t)-1);
  777|       |
  778|      1|	return;
  779|      1|}
privs.c:zprivs_caps_init:
  273|      1|{
  274|       |	/* Release allocated zcaps if this function was called before. */
  275|      1|	zprivs_state_free_caps();
  276|       |
  277|      1|	zprivs_state.syscaps_p = zcaps2sys(zprivs->caps_p, zprivs->cap_num_p);
  278|      1|	zprivs_state.syscaps_i = zcaps2sys(zprivs->caps_i, zprivs->cap_num_i);
  279|       |
  280|       |	/* Tell kernel we want caps maintained across uid changes */
  281|      1|	if (prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0) == -1) {
  ------------------
  |  Branch (281:6): [True: 0, False: 1]
  ------------------
  282|      0|		fprintf(stderr,
  283|      0|			"privs_init: could not set PR_SET_KEEPCAPS, %s\n",
  284|      0|			safe_strerror(errno));
  285|      0|		exit(1);
  286|      0|	}
  287|       |
  288|       |	/* we have caps, we have no need to ever change back the original user
  289|       |	 */
  290|       |	/* only change uid if we don't have the correct one */
  291|       |#ifndef FUZZING
  292|       |	if ((zprivs_state.zuid) && (zprivs_state.zsuid != zprivs_state.zuid)) {
  293|       |		if (setreuid(zprivs_state.zuid, zprivs_state.zuid)) {
  294|       |			fprintf(stderr,
  295|       |				"zprivs_init (cap): could not setreuid, %s\n",
  296|       |				safe_strerror(errno));
  297|       |			exit(1);
  298|       |		}
  299|       |	}
  300|       |#endif
  301|      1|	if (!(zprivs_state.caps = cap_init())) {
  ------------------
  |  Branch (301:6): [True: 0, False: 1]
  ------------------
  302|      0|		fprintf(stderr, "privs_init: failed to cap_init, %s\n",
  303|      0|			safe_strerror(errno));
  304|      0|		exit(1);
  305|      0|	}
  306|       |
  307|      1|	if (cap_clear(zprivs_state.caps)) {
  ------------------
  |  Branch (307:6): [True: 0, False: 1]
  ------------------
  308|      0|		fprintf(stderr, "privs_init: failed to cap_clear, %s\n",
  309|      0|			safe_strerror(errno));
  310|      0|		exit(1);
  311|      0|	}
  312|       |
  313|       |	/* set permitted caps, if any */
  314|      1|	if (zprivs_state.syscaps_p && zprivs_state.syscaps_p->num) {
  ------------------
  |  Branch (314:6): [True: 1, False: 0]
  |  Branch (314:32): [True: 1, False: 0]
  ------------------
  315|      1|		cap_set_flag(zprivs_state.caps, CAP_PERMITTED,
  316|      1|			     zprivs_state.syscaps_p->num,
  317|      1|			     zprivs_state.syscaps_p->caps, CAP_SET);
  318|      1|	}
  319|       |
  320|       |	/* set inheritable caps, if any */
  321|      1|	if (zprivs_state.syscaps_i && zprivs_state.syscaps_i->num) {
  ------------------
  |  Branch (321:6): [True: 0, False: 1]
  |  Branch (321:32): [True: 0, False: 0]
  ------------------
  322|      0|		cap_set_flag(zprivs_state.caps, CAP_INHERITABLE,
  323|      0|			     zprivs_state.syscaps_i->num,
  324|      0|			     zprivs_state.syscaps_i->caps, CAP_SET);
  325|      0|	}
  326|       |
  327|       |	/* apply caps. CAP_EFFECTIVE is cleared. we'll raise the caps as
  328|       |	 * and when, and only when, they are needed.
  329|       |	 */
  330|       |#ifndef FUZZING
  331|       |	if (cap_set_proc(zprivs_state.caps)) {
  332|       |		cap_t current_caps;
  333|       |		char *current_caps_text = NULL;
  334|       |		char *wanted_caps_text = NULL;
  335|       |
  336|       |		fprintf(stderr, "privs_init: initial cap_set_proc failed: %s\n",
  337|       |			safe_strerror(errno));
  338|       |
  339|       |		current_caps = cap_get_proc();
  340|       |		if (current_caps) {
  341|       |			current_caps_text = cap_to_text(current_caps, NULL);
  342|       |			cap_free(current_caps);
  343|       |		}
  344|       |
  345|       |		wanted_caps_text = cap_to_text(zprivs_state.caps, NULL);
  346|       |		fprintf(stderr, "Wanted caps: %s\n",
  347|       |			wanted_caps_text ? wanted_caps_text : "???");
  348|       |		fprintf(stderr, "Have   caps: %s\n",
  349|       |			current_caps_text ? current_caps_text : "???");
  350|       |		if (current_caps_text)
  351|       |			cap_free(current_caps_text);
  352|       |		if (wanted_caps_text)
  353|       |			cap_free(wanted_caps_text);
  354|       |
  355|       |		exit(1);
  356|       |	}
  357|       |#endif
  358|       |	/* set methods for the caller to use */
  359|      1|	zprivs->change = zprivs_change_caps;
  360|      1|	zprivs->current_state = zprivs_state_caps;
  361|      1|}
privs.c:zprivs_state_free_caps:
  251|      1|{
  252|      1|	if (zprivs_state.syscaps_p) {
  ------------------
  |  Branch (252:6): [True: 0, False: 1]
  ------------------
  253|      0|		if (zprivs_state.syscaps_p->num)
  ------------------
  |  Branch (253:7): [True: 0, False: 0]
  ------------------
  254|      0|			XFREE(MTYPE_PRIVS, zprivs_state.syscaps_p->caps);
  ------------------
  |  |  170|      0|	do {                                                                   \
  |  |  171|      0|		qfree(mtype, ptr);                                             \
  |  |  172|      0|		ptr = NULL;                                                    \
  |  |  173|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  255|       |
  256|      0|		XFREE(MTYPE_PRIVS, zprivs_state.syscaps_p);
  ------------------
  |  |  170|      0|	do {                                                                   \
  |  |  171|      0|		qfree(mtype, ptr);                                             \
  |  |  172|      0|		ptr = NULL;                                                    \
  |  |  173|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  257|      0|	}
  258|       |
  259|      1|	if (zprivs_state.syscaps_i) {
  ------------------
  |  Branch (259:6): [True: 0, False: 1]
  ------------------
  260|      0|		if (zprivs_state.syscaps_i->num)
  ------------------
  |  Branch (260:7): [True: 0, False: 0]
  ------------------
  261|      0|			XFREE(MTYPE_PRIVS, zprivs_state.syscaps_i->caps);
  ------------------
  |  |  170|      0|	do {                                                                   \
  |  |  171|      0|		qfree(mtype, ptr);                                             \
  |  |  172|      0|		ptr = NULL;                                                    \
  |  |  173|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  262|       |
  263|      0|		XFREE(MTYPE_PRIVS, zprivs_state.syscaps_i);
  ------------------
  |  |  170|      0|	do {                                                                   \
  |  |  171|      0|		qfree(mtype, ptr);                                             \
  |  |  172|      0|		ptr = NULL;                                                    \
  |  |  173|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  264|      0|	}
  265|       |
  266|      1|	if (zprivs_state.caps) {
  ------------------
  |  Branch (266:6): [True: 0, False: 1]
  ------------------
  267|      0|		cap_free(zprivs_state.caps);
  268|       |		zprivs_state.caps = NULL;
  269|      0|	}
  270|      1|}
privs.c:zcaps2sys:
  162|      2|{
  163|      2|	pset_t *syscaps;
  164|      2|	int i, j = 0, count = 0;
  165|       |
  166|      2|	if (!num)
  ------------------
  |  Branch (166:6): [True: 1, False: 1]
  ------------------
  167|      1|		return NULL;
  168|       |
  169|       |	/* first count up how many system caps we have */
  170|      5|	for (i = 0; i < num; i++)
  ------------------
  |  Branch (170:14): [True: 4, False: 1]
  ------------------
  171|      4|		count += cap_map[zcaps[i]].num;
  172|       |
  173|      1|	if ((syscaps = XCALLOC(MTYPE_PRIVS, (sizeof(pset_t) * num))) == NULL) {
  ------------------
  |  |  165|      1|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  |  Branch (173:6): [True: 0, False: 1]
  ------------------
  174|      0|		fprintf(stderr, "%s: could not allocate syscaps!", __func__);
  175|      0|		return NULL;
  176|      0|	}
  177|       |
  178|      1|	syscaps->caps = XCALLOC(MTYPE_PRIVS, (sizeof(pvalue_t) * count));
  ------------------
  |  |  165|      1|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  179|       |
  180|      1|	if (!syscaps->caps) {
  ------------------
  |  Branch (180:6): [True: 0, False: 1]
  ------------------
  181|      0|		fprintf(stderr, "%s: could not XCALLOC caps!", __func__);
  182|      0|		return NULL;
  183|      0|	}
  184|       |
  185|       |	/* copy the capabilities over */
  186|      1|	count = 0;
  187|      5|	for (i = 0; i < num; i++)
  ------------------
  |  Branch (187:14): [True: 4, False: 1]
  ------------------
  188|      8|		for (j = 0; j < cap_map[zcaps[i]].num; j++)
  ------------------
  |  Branch (188:15): [True: 4, False: 4]
  ------------------
  189|      4|			syscaps->caps[count++] =
  190|      4|				cap_map[zcaps[i]].system_caps[j];
  191|       |
  192|       |	/* iterations above should be exact same as previous count, obviously..
  193|       |	 */
  194|      1|	syscaps->num = count;
  195|       |
  196|      1|	return syscaps;
  197|      1|}

qobj_reg:
   40|      4|{
   41|      4|	node->type = type;
   42|      4|	pthread_rwlock_wrlock(&nodes_lock);
   43|      4|	do {
   44|      4|		node->nid = (uint64_t)frr_weak_random();
   45|      4|		node->nid ^= (uint64_t)frr_weak_random() << 32;
   46|      4|	} while (!node->nid || qobj_nodes_find(&nodes, node));
  ------------------
  |  Branch (46:11): [True: 0, False: 4]
  |  Branch (46:25): [True: 0, False: 4]
  ------------------
   47|      4|	qobj_nodes_add(&nodes, node);
   48|      4|	pthread_rwlock_unlock(&nodes_lock);
   49|      4|}
qobj_init:
   92|      1|{
   93|       |	pthread_rwlock_init(&nodes_lock, NULL);
   94|      1|	qobj_nodes_init(&nodes);
   95|      1|}
qobj.c:qobj_hash:
   19|      7|{
   20|      7|	return (uint32_t)node->nid;
   21|      7|}

route_map_match_interface_hook:
   99|      1|{
  100|      1|	rmap_match_set_hook.match_interface = func;
  101|      1|}
route_map_no_match_interface_hook:
  108|      1|{
  109|      1|	rmap_match_set_hook.no_match_interface = func;
  110|      1|}
route_map_match_ip_address_hook:
  117|      1|{
  118|      1|	rmap_match_set_hook.match_ip_address = func;
  119|      1|}
route_map_no_match_ip_address_hook:
  126|      1|{
  127|      1|	rmap_match_set_hook.no_match_ip_address = func;
  128|      1|}
route_map_match_ip_address_prefix_list_hook:
  135|      1|{
  136|      1|	rmap_match_set_hook.match_ip_address_prefix_list = func;
  137|      1|}
route_map_no_match_ip_address_prefix_list_hook:
  144|      1|{
  145|      1|	rmap_match_set_hook.no_match_ip_address_prefix_list = func;
  146|      1|}
route_map_match_ip_next_hop_hook:
  153|      1|{
  154|      1|	rmap_match_set_hook.match_ip_next_hop = func;
  155|      1|}
route_map_no_match_ip_next_hop_hook:
  162|      1|{
  163|      1|	rmap_match_set_hook.no_match_ip_next_hop = func;
  164|      1|}
route_map_match_ip_next_hop_prefix_list_hook:
  187|      1|{
  188|      1|	rmap_match_set_hook.match_ip_next_hop_prefix_list = func;
  189|      1|}
route_map_no_match_ip_next_hop_prefix_list_hook:
  196|      1|{
  197|      1|	rmap_match_set_hook.no_match_ip_next_hop_prefix_list = func;
  198|      1|}
route_map_match_ip_next_hop_type_hook:
  205|      1|{
  206|      1|	rmap_match_set_hook.match_ip_next_hop_type = func;
  207|      1|}
route_map_no_match_ip_next_hop_type_hook:
  214|      1|{
  215|      1|	rmap_match_set_hook.no_match_ip_next_hop_type = func;
  216|      1|}
route_map_match_tag_hook:
  312|      1|{
  313|      1|	rmap_match_set_hook.match_tag = func;
  314|      1|}
route_map_no_match_tag_hook:
  321|      1|{
  322|      1|	rmap_match_set_hook.no_match_tag = func;
  323|      1|}
route_map_set_metric_hook:
  385|      1|{
  386|      1|	rmap_match_set_hook.set_metric = func;
  387|      1|}
route_map_no_set_metric_hook:
  394|      1|{
  395|      1|	rmap_match_set_hook.no_set_metric = func;
  396|      1|}
route_map_set_min_metric_hook:
  402|      1|{
  403|      1|	rmap_match_set_hook.set_min_metric = func;
  404|      1|}
route_map_no_set_min_metric_hook:
  411|      1|{
  412|      1|	rmap_match_set_hook.no_set_min_metric = func;
  413|      1|}
route_map_set_max_metric_hook:
  419|      1|{
  420|      1|	rmap_match_set_hook.set_max_metric = func;
  421|      1|}
route_map_no_set_max_metric_hook:
  428|      1|{
  429|      1|	rmap_match_set_hook.no_set_max_metric = func;
  430|      1|}
route_map_set_tag_hook:
  436|      1|{
  437|      1|	rmap_match_set_hook.set_tag = func;
  438|      1|}
route_map_no_set_tag_hook:
  445|      1|{
  446|      1|	rmap_match_set_hook.no_set_tag = func;
  447|      1|}
_route_map_install_match:
 1306|      7|{
 1307|      7|	rmap_cmd_name_add(rmap_match_cmds, proxy);
 1308|      7|}
_route_map_install_set:
 1312|      5|{
 1313|      5|	rmap_cmd_name_add(rmap_set_cmds, proxy);
 1314|      5|}
route_map_add_hook:
 2762|      1|{
 2763|      1|	route_map_master.add_hook = func;
 2764|      1|}
route_map_delete_hook:
 2767|      1|{
 2768|      1|	route_map_master.delete_hook = func;
 2769|      1|}
route_map_event_hook:
 2772|      1|{
 2773|      1|	route_map_master.event_hook = func;
 2774|      1|}
route_map_init:
 3416|      1|{
 3417|      1|	int i;
 3418|       |
 3419|      1|	route_map_master_hash =
 3420|      1|		hash_create_size(8, route_map_hash_key_make, route_map_hash_cmp,
 3421|      1|				 "Route Map Master Hash");
 3422|       |
 3423|      8|	for (i = 1; i < ROUTE_MAP_DEP_MAX; i++)
  ------------------
  |  Branch (3423:14): [True: 7, False: 1]
  ------------------
 3424|      7|		route_map_dep_hash[i] = hash_create_size(
 3425|      7|			8, route_map_dep_hash_make_key, route_map_dep_hash_cmp,
 3426|      7|			"Route Map Dep Hash");
 3427|       |
 3428|      1|	UNSET_FLAG(rmap_debug, DEBUG_ROUTEMAP);
  ------------------
  |  |  396|      1|#define UNSET_FLAG(V,F)      (V) &= ~(F)
  ------------------
 3429|       |
 3430|      1|	route_map_cli_init();
 3431|       |
 3432|       |	/* Install route map top node. */
 3433|      1|	install_node(&rmap_debug_node);
 3434|       |
 3435|       |	/* Install route map commands. */
 3436|      1|	install_element(CONFIG_NODE, &debug_rmap_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3437|      1|	install_element(CONFIG_NODE, &no_debug_rmap_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3438|       |
 3439|       |	/* Install show command */
 3440|      1|	install_element(ENABLE_NODE, &rmap_clear_counters_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3441|       |
 3442|      1|	install_element(ENABLE_NODE, &rmap_show_name_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3443|      1|	install_element(ENABLE_NODE, &rmap_show_unused_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3444|       |
 3445|      1|	install_element(ENABLE_NODE, &debug_rmap_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3446|      1|	install_element(ENABLE_NODE, &no_debug_rmap_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3447|       |
 3448|      1|	install_element(ENABLE_NODE, &show_route_map_pfx_tbl_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3449|      1|}
routemap.c:rmap_cmd_name_hash:
   45|     12|{
   46|     12|	return jhash(item->cmd->str, strlen(item->cmd->str), 0xbfd69320);
   47|     12|}

route_map_cli_init:
 1568|      1|{
 1569|       |	/* Auto complete handler. */
 1570|      1|	cmd_variable_handler_register(rmap_var_handlers);
 1571|       |
 1572|       |	/* CLI commands. */
 1573|      1|	install_node(&rmap_node);
 1574|      1|	install_default(RMAP_NODE);
 1575|      1|	install_element(CONFIG_NODE, &route_map_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1576|      1|	install_element(CONFIG_NODE, &no_route_map_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1577|      1|	install_element(CONFIG_NODE, &no_route_map_all_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1578|      1|	install_element(CONFIG_NODE, &route_map_optimization_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1579|       |
 1580|       |	/* Install the on-match stuff */
 1581|      1|	install_element(RMAP_NODE, &rmap_onmatch_next_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1582|      1|	install_element(RMAP_NODE, &no_rmap_onmatch_next_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1583|      1|	install_element(RMAP_NODE, &rmap_onmatch_goto_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1584|      1|	install_element(RMAP_NODE, &no_rmap_onmatch_goto_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1585|      1|	install_element(RMAP_NODE, &rmap_continue_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1586|      1|	install_element(RMAP_NODE, &no_rmap_continue_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1587|       |
 1588|       |	/* Install the call stuff. */
 1589|      1|	install_element(RMAP_NODE, &rmap_call_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1590|      1|	install_element(RMAP_NODE, &no_rmap_call_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1591|       |
 1592|       |	/* Install description commands. */
 1593|      1|	install_element(RMAP_NODE, &rmap_description_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1594|      1|	install_element(RMAP_NODE, &no_rmap_description_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1595|       |
 1596|       |	/* Install 'match' commands. */
 1597|      1|	install_element(RMAP_NODE, &match_interface_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1598|      1|	install_element(RMAP_NODE, &no_match_interface_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1599|       |
 1600|      1|	install_element(RMAP_NODE, &match_ip_address_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1601|      1|	install_element(RMAP_NODE, &no_match_ip_address_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1602|       |
 1603|      1|	install_element(RMAP_NODE, &match_ip_address_prefix_list_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1604|      1|	install_element(RMAP_NODE, &no_match_ip_address_prefix_list_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1605|       |
 1606|      1|	install_element(RMAP_NODE, &match_ip_next_hop_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1607|      1|	install_element(RMAP_NODE, &no_match_ip_next_hop_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1608|       |
 1609|      1|	install_element(RMAP_NODE, &match_ip_next_hop_prefix_list_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1610|      1|	install_element(RMAP_NODE, &no_match_ip_next_hop_prefix_list_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1611|       |
 1612|      1|	install_element(RMAP_NODE, &match_ip_next_hop_type_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1613|      1|	install_element(RMAP_NODE, &no_match_ip_next_hop_type_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1614|       |
 1615|      1|	install_element(RMAP_NODE, &match_ipv6_address_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1616|      1|	install_element(RMAP_NODE, &no_match_ipv6_address_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1617|       |
 1618|      1|	install_element(RMAP_NODE, &match_ipv6_address_prefix_list_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1619|      1|	install_element(RMAP_NODE, &no_match_ipv6_address_prefix_list_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1620|       |
 1621|      1|	install_element(RMAP_NODE, &match_ipv6_next_hop_type_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1622|      1|	install_element(RMAP_NODE, &no_match_ipv6_next_hop_type_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1623|       |
 1624|      1|	install_element(RMAP_NODE, &match_metric_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1625|      1|	install_element(RMAP_NODE, &no_match_metric_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1626|       |
 1627|      1|	install_element(RMAP_NODE, &match_tag_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1628|      1|	install_element(RMAP_NODE, &no_match_tag_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1629|       |
 1630|       |	/* Install 'set' commands. */
 1631|      1|	install_element(RMAP_NODE, &set_ip_nexthop_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1632|      1|	install_element(RMAP_NODE, &no_set_ip_nexthop_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1633|       |
 1634|      1|	install_element(RMAP_NODE, &set_ipv6_nexthop_local_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1635|      1|	install_element(RMAP_NODE, &no_set_ipv6_nexthop_local_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1636|       |
 1637|      1|	install_element(RMAP_NODE, &set_metric_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1638|      1|	install_element(RMAP_NODE, &no_set_metric_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1639|       |
 1640|      1|	install_element(RMAP_NODE, &set_min_metric_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1641|      1|	install_element(RMAP_NODE, &no_set_min_metric_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1642|       |
 1643|      1|	install_element(RMAP_NODE, &set_max_metric_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1644|      1|	install_element(RMAP_NODE, &no_set_max_metric_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1645|       |
 1646|      1|	install_element(RMAP_NODE, &set_tag_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1647|      1|	install_element(RMAP_NODE, &no_set_tag_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1648|       |
 1649|      1|	install_element(RMAP_NODE, &set_srte_color_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1650|      1|	install_element(RMAP_NODE, &no_set_srte_color_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1651|      1|}

seqlock_acquire_val:
  250|      4|{
  251|      4|	seqlock_val_t prev;
  252|       |
  253|      4|	seqlock_assert_valid(val);
  ------------------
  |  |   52|      4|#define seqlock_assert_valid(val) assert((val) & SEQLOCK_HELD)
  |  |  ------------------
  |  |  |  |   51|      4|	({                                                                     \
  |  |  |  |   52|      4|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|      4|			(used)) = {                                            \
  |  |  |  |   54|      4|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      4|	{                                                                      \
  |  |  |  |  |  |  284|      4|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|      4|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|      4|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|      4|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|      4|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|      4|			.expr = #expr_,                                        \
  |  |  |  |   56|      4|		};                                                             \
  |  |  |  |   57|      4|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|      4|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|      4|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|      4|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|      4|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 4]
  |  |  |  |  |  Branch (58:24): [True: 4, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|      4|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|      4|	})
  |  |  ------------------
  ------------------
  254|       |
  255|      4|	prev = atomic_exchange_explicit(&sqlo->pos, val, memory_order_relaxed);
  256|      4|	if (prev & SEQLOCK_WAITERS)
  ------------------
  |  |   58|      4|#define SEQLOCK_WAITERS		(1U << 1)
  ------------------
  |  Branch (256:6): [True: 0, False: 4]
  ------------------
  257|       |		wait_poke(sqlo);
  ------------------
  |  |   48|      0|	sys_futex((int *)&sqlo->pos, FUTEX_WAKE, INT_MAX, NULL, NULL, 0)
  ------------------
  258|      4|}
seqlock_init:
  270|      4|{
  271|      4|	sqlo->pos = 0;
  272|      4|	wait_init(sqlo);
  273|      4|}

sockopt_iphdrincl_swab_systoh:
  499|  3.04k|{
  500|  3.04k|#ifndef HAVE_IP_HDRINCL_BSD_ORDER
  501|  3.04k|	iph->ip_len = ntohs(iph->ip_len);
  502|  3.04k|	iph->ip_off = ntohs(iph->ip_off);
  503|  3.04k|#endif /* HAVE_IP_HDRINCL_BSD_ORDER */
  504|       |
  505|       |	iph->ip_id = ntohs(iph->ip_id);
  506|  3.04k|}

stream_new:
   90|  3.33k|{
   91|  3.33k|	struct stream *s;
   92|       |
   93|  3.33k|	assert(size > 0);
  ------------------
  |  |   51|  3.33k|	({                                                                     \
  |  |   52|  3.33k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  3.33k|			(used)) = {                                            \
  |  |   54|  3.33k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  3.33k|	{                                                                      \
  |  |  |  |  284|  3.33k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  3.33k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  3.33k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  3.33k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  3.33k|	}                                                                      \
  |  |  ------------------
  |  |   55|  3.33k|			.expr = #expr_,                                        \
  |  |   56|  3.33k|		};                                                             \
  |  |   57|  3.33k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  3.33k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  3.33k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  3.33k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  3.33k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 3.33k]
  |  |  |  Branch (58:24): [True: 3.33k, False: 0]
  |  |  ------------------
  |  |   59|  3.33k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  3.33k|	})
  ------------------
   94|       |
   95|  3.33k|	s = XMALLOC(MTYPE_STREAM, sizeof(struct stream) + size);
  ------------------
  |  |  164|  3.33k|#define XMALLOC(mtype, size)		qmalloc(mtype, size)
  ------------------
   96|       |
   97|  3.33k|	s->getp = s->endp = 0;
   98|       |	s->next = NULL;
   99|  3.33k|	s->size = size;
  100|  3.33k|	return s;
  101|  3.33k|}
stream_free:
  105|  3.06k|{
  106|  3.06k|	if (!s)
  ------------------
  |  Branch (106:6): [True: 0, False: 3.06k]
  ------------------
  107|      0|		return;
  108|       |
  109|  3.06k|	XFREE(MTYPE_STREAM, s);
  ------------------
  |  |  170|  3.06k|	do {                                                                   \
  |  |  171|  3.06k|		qfree(mtype, ptr);                                             \
  |  |  172|  3.06k|		ptr = NULL;                                                    \
  |  |  173|  3.06k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 3.06k]
  |  |  ------------------
  ------------------
  110|  3.06k|}
stream_copy:
  113|     90|{
  114|     90|	STREAM_VERIFY_SANE(src);
  ------------------
  |  |   52|     90|	do {                                                                   \
  |  |   53|     90|		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   23|    180|#define GETP_VALID(S, G) ((G) <= (S)->endp)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:26): [True: 90, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   25|     90|#define ENDP_VALID(S, E) ((E) <= (S)->size)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (25:26): [True: 90, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   54|      0|			STREAM_WARN_OFFSETS(S);                                \
  |  |  ------------------
  |  |  |  |   43|      0|	do {                                                                   \
  |  |  |  |   44|      0|		flog_warn(EC_LIB_STREAM,				       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  |  |  ------------------
  |  |  |  |   45|      0|			  "&(struct stream): %p, size: %lu, getp: %lu, endp: %lu", \
  |  |  |  |   46|      0|			  (void *)(S), (unsigned long)(S)->size,	       \
  |  |  |  |   47|      0|			  (unsigned long)(S)->getp, (unsigned long)(S)->endp); \
  |  |  |  |   48|      0|		zlog_backtrace(LOG_WARNING);				       \
  |  |  |  |   49|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:11): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   55|      0|		}                                                              \
  |  |   56|     90|		assert(GETP_VALID(S, (S)->getp));                              \
  |  |  ------------------
  |  |  |  |   51|     90|	({                                                                     \
  |  |  |  |   52|     90|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|     90|			(used)) = {                                            \
  |  |  |  |   54|     90|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|     90|	{                                                                      \
  |  |  |  |  |  |  284|     90|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|     90|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|     90|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|     90|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|     90|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|     90|			.expr = #expr_,                                        \
  |  |  |  |   56|     90|		};                                                             \
  |  |  |  |   57|     90|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|     90|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|     90|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|     90|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|     90|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 90]
  |  |  |  |  |  Branch (58:24): [True: 90, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|     90|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|     90|	})
  |  |  ------------------
  |  |   57|     90|		assert(ENDP_VALID(S, (S)->endp));                              \
  |  |  ------------------
  |  |  |  |   51|     90|	({                                                                     \
  |  |  |  |   52|     90|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|     90|			(used)) = {                                            \
  |  |  |  |   54|     90|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|     90|	{                                                                      \
  |  |  |  |  |  |  284|     90|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|     90|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|     90|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|     90|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|     90|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|     90|			.expr = #expr_,                                        \
  |  |  |  |   56|     90|		};                                                             \
  |  |  |  |   57|     90|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|     90|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|     90|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|     90|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|     90|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 90]
  |  |  |  |  |  Branch (58:24): [True: 90, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|     90|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|     90|	})
  |  |  ------------------
  |  |   58|     90|	} while (0)
  |  |  ------------------
  |  |  |  Branch (58:11): [Folded, False: 90]
  |  |  ------------------
  ------------------
  115|       |
  116|     90|	assert(dest != NULL);
  ------------------
  |  |   51|     90|	({                                                                     \
  |  |   52|     90|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|     90|			(used)) = {                                            \
  |  |   54|     90|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|     90|	{                                                                      \
  |  |  |  |  284|     90|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|     90|		/* .type = */ (type_),                                         \
  |  |  |  |  286|     90|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|     90|		/* .func = */ func_,                                           \
  |  |  |  |  289|     90|	}                                                                      \
  |  |  ------------------
  |  |   55|     90|			.expr = #expr_,                                        \
  |  |   56|     90|		};                                                             \
  |  |   57|     90|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|     90|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|     90|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|     90|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|     90|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 90]
  |  |  |  Branch (58:24): [True: 90, False: 0]
  |  |  ------------------
  |  |   59|     90|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|     90|	})
  ------------------
  117|     90|	assert(STREAM_SIZE(dest) >= src->endp);
  ------------------
  |  |   51|     90|	({                                                                     \
  |  |   52|     90|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|     90|			(used)) = {                                            \
  |  |   54|     90|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|     90|	{                                                                      \
  |  |  |  |  284|     90|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|     90|		/* .type = */ (type_),                                         \
  |  |  |  |  286|     90|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|     90|		/* .func = */ func_,                                           \
  |  |  |  |  289|     90|	}                                                                      \
  |  |  ------------------
  |  |   55|     90|			.expr = #expr_,                                        \
  |  |   56|     90|		};                                                             \
  |  |   57|     90|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|     90|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|     90|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|     90|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|     90|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 90]
  |  |  |  Branch (58:24): [True: 90, False: 0]
  |  |  ------------------
  |  |   59|     90|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|     90|	})
  ------------------
  118|       |
  119|     90|	dest->endp = src->endp;
  120|     90|	dest->getp = src->getp;
  121|       |
  122|     90|	memcpy(dest->data, src->data, src->endp);
  123|       |
  124|     90|	return dest;
  125|     90|}
stream_get_getp:
  179|  2.93k|{
  180|  2.93k|	STREAM_VERIFY_SANE(s);
  ------------------
  |  |   52|  2.93k|	do {                                                                   \
  |  |   53|  2.93k|		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   23|  5.86k|#define GETP_VALID(S, G) ((G) <= (S)->endp)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:26): [True: 2.93k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   25|  2.93k|#define ENDP_VALID(S, E) ((E) <= (S)->size)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (25:26): [True: 2.93k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   54|      0|			STREAM_WARN_OFFSETS(S);                                \
  |  |  ------------------
  |  |  |  |   43|      0|	do {                                                                   \
  |  |  |  |   44|      0|		flog_warn(EC_LIB_STREAM,				       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  |  |  ------------------
  |  |  |  |   45|      0|			  "&(struct stream): %p, size: %lu, getp: %lu, endp: %lu", \
  |  |  |  |   46|      0|			  (void *)(S), (unsigned long)(S)->size,	       \
  |  |  |  |   47|      0|			  (unsigned long)(S)->getp, (unsigned long)(S)->endp); \
  |  |  |  |   48|      0|		zlog_backtrace(LOG_WARNING);				       \
  |  |  |  |   49|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:11): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   55|      0|		}                                                              \
  |  |   56|  2.93k|		assert(GETP_VALID(S, (S)->getp));                              \
  |  |  ------------------
  |  |  |  |   51|  2.93k|	({                                                                     \
  |  |  |  |   52|  2.93k|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|  2.93k|			(used)) = {                                            \
  |  |  |  |   54|  2.93k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|  2.93k|	{                                                                      \
  |  |  |  |  |  |  284|  2.93k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|  2.93k|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|  2.93k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|  2.93k|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|  2.93k|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|  2.93k|			.expr = #expr_,                                        \
  |  |  |  |   56|  2.93k|		};                                                             \
  |  |  |  |   57|  2.93k|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|  2.93k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|  2.93k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|  2.93k|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|  2.93k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 2.93k]
  |  |  |  |  |  Branch (58:24): [True: 2.93k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|  2.93k|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|  2.93k|	})
  |  |  ------------------
  |  |   57|  2.93k|		assert(ENDP_VALID(S, (S)->endp));                              \
  |  |  ------------------
  |  |  |  |   51|  2.93k|	({                                                                     \
  |  |  |  |   52|  2.93k|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|  2.93k|			(used)) = {                                            \
  |  |  |  |   54|  2.93k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|  2.93k|	{                                                                      \
  |  |  |  |  |  |  284|  2.93k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|  2.93k|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|  2.93k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|  2.93k|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|  2.93k|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|  2.93k|			.expr = #expr_,                                        \
  |  |  |  |   56|  2.93k|		};                                                             \
  |  |  |  |   57|  2.93k|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|  2.93k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|  2.93k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|  2.93k|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|  2.93k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 2.93k]
  |  |  |  |  |  Branch (58:24): [True: 2.93k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|  2.93k|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|  2.93k|	})
  |  |  ------------------
  |  |   58|  2.93k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (58:11): [Folded, False: 2.93k]
  |  |  ------------------
  ------------------
  181|  2.93k|	return s->getp;
  182|  2.93k|}
stream_get_endp:
  185|  3.20k|{
  186|  3.20k|	STREAM_VERIFY_SANE(s);
  ------------------
  |  |   52|  3.20k|	do {                                                                   \
  |  |   53|  3.20k|		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   23|  6.41k|#define GETP_VALID(S, G) ((G) <= (S)->endp)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:26): [True: 3.20k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   25|  3.20k|#define ENDP_VALID(S, E) ((E) <= (S)->size)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (25:26): [True: 3.20k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   54|      0|			STREAM_WARN_OFFSETS(S);                                \
  |  |  ------------------
  |  |  |  |   43|      0|	do {                                                                   \
  |  |  |  |   44|      0|		flog_warn(EC_LIB_STREAM,				       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  |  |  ------------------
  |  |  |  |   45|      0|			  "&(struct stream): %p, size: %lu, getp: %lu, endp: %lu", \
  |  |  |  |   46|      0|			  (void *)(S), (unsigned long)(S)->size,	       \
  |  |  |  |   47|      0|			  (unsigned long)(S)->getp, (unsigned long)(S)->endp); \
  |  |  |  |   48|      0|		zlog_backtrace(LOG_WARNING);				       \
  |  |  |  |   49|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:11): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   55|      0|		}                                                              \
  |  |   56|  3.20k|		assert(GETP_VALID(S, (S)->getp));                              \
  |  |  ------------------
  |  |  |  |   51|  3.20k|	({                                                                     \
  |  |  |  |   52|  3.20k|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|  3.20k|			(used)) = {                                            \
  |  |  |  |   54|  3.20k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|  3.20k|	{                                                                      \
  |  |  |  |  |  |  284|  3.20k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|  3.20k|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|  3.20k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|  3.20k|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|  3.20k|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|  3.20k|			.expr = #expr_,                                        \
  |  |  |  |   56|  3.20k|		};                                                             \
  |  |  |  |   57|  3.20k|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|  3.20k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|  3.20k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|  3.20k|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|  3.20k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 3.20k]
  |  |  |  |  |  Branch (58:24): [True: 3.20k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|  3.20k|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|  3.20k|	})
  |  |  ------------------
  |  |   57|  3.20k|		assert(ENDP_VALID(S, (S)->endp));                              \
  |  |  ------------------
  |  |  |  |   51|  3.20k|	({                                                                     \
  |  |  |  |   52|  3.20k|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|  3.20k|			(used)) = {                                            \
  |  |  |  |   54|  3.20k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|  3.20k|	{                                                                      \
  |  |  |  |  |  |  284|  3.20k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|  3.20k|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|  3.20k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|  3.20k|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|  3.20k|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|  3.20k|			.expr = #expr_,                                        \
  |  |  |  |   56|  3.20k|		};                                                             \
  |  |  |  |   57|  3.20k|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|  3.20k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|  3.20k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|  3.20k|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|  3.20k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 3.20k]
  |  |  |  |  |  Branch (58:24): [True: 3.20k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|  3.20k|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|  3.20k|	})
  |  |  ------------------
  |  |   58|  3.20k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (58:11): [Folded, False: 3.20k]
  |  |  ------------------
  ------------------
  187|  3.20k|	return s->endp;
  188|  3.20k|}
stream_forward_getp:
  232|  64.3k|{
  233|  64.3k|	STREAM_VERIFY_SANE(s);
  ------------------
  |  |   52|  64.3k|	do {                                                                   \
  |  |   53|  64.3k|		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   23|   128k|#define GETP_VALID(S, G) ((G) <= (S)->endp)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:26): [True: 64.3k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   25|  64.3k|#define ENDP_VALID(S, E) ((E) <= (S)->size)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (25:26): [True: 64.3k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   54|      0|			STREAM_WARN_OFFSETS(S);                                \
  |  |  ------------------
  |  |  |  |   43|      0|	do {                                                                   \
  |  |  |  |   44|      0|		flog_warn(EC_LIB_STREAM,				       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  |  |  ------------------
  |  |  |  |   45|      0|			  "&(struct stream): %p, size: %lu, getp: %lu, endp: %lu", \
  |  |  |  |   46|      0|			  (void *)(S), (unsigned long)(S)->size,	       \
  |  |  |  |   47|      0|			  (unsigned long)(S)->getp, (unsigned long)(S)->endp); \
  |  |  |  |   48|      0|		zlog_backtrace(LOG_WARNING);				       \
  |  |  |  |   49|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:11): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   55|      0|		}                                                              \
  |  |   56|  64.3k|		assert(GETP_VALID(S, (S)->getp));                              \
  |  |  ------------------
  |  |  |  |   51|  64.3k|	({                                                                     \
  |  |  |  |   52|  64.3k|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|  64.3k|			(used)) = {                                            \
  |  |  |  |   54|  64.3k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|  64.3k|	{                                                                      \
  |  |  |  |  |  |  284|  64.3k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|  64.3k|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|  64.3k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|  64.3k|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|  64.3k|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|  64.3k|			.expr = #expr_,                                        \
  |  |  |  |   56|  64.3k|		};                                                             \
  |  |  |  |   57|  64.3k|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|  64.3k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|  64.3k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|  64.3k|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|  64.3k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 64.3k]
  |  |  |  |  |  Branch (58:24): [True: 64.3k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|  64.3k|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|  64.3k|	})
  |  |  ------------------
  |  |   57|  64.3k|		assert(ENDP_VALID(S, (S)->endp));                              \
  |  |  ------------------
  |  |  |  |   51|  64.3k|	({                                                                     \
  |  |  |  |   52|  64.3k|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|  64.3k|			(used)) = {                                            \
  |  |  |  |   54|  64.3k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|  64.3k|	{                                                                      \
  |  |  |  |  |  |  284|  64.3k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|  64.3k|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|  64.3k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|  64.3k|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|  64.3k|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|  64.3k|			.expr = #expr_,                                        \
  |  |  |  |   56|  64.3k|		};                                                             \
  |  |  |  |   57|  64.3k|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|  64.3k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|  64.3k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|  64.3k|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|  64.3k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 64.3k]
  |  |  |  |  |  Branch (58:24): [True: 64.3k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|  64.3k|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|  64.3k|	})
  |  |  ------------------
  |  |   58|  64.3k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (58:11): [Folded, False: 64.3k]
  |  |  ------------------
  ------------------
  234|       |
  235|  64.3k|	if (!GETP_VALID(s, s->getp + size)) {
  ------------------
  |  |   23|  64.3k|#define GETP_VALID(S, G) ((G) <= (S)->endp)
  ------------------
  |  Branch (235:6): [True: 0, False: 64.3k]
  ------------------
  236|      0|		STREAM_BOUND_WARN(s, "seek getp");
  ------------------
  |  |   61|      0|	do {                                                                   \
  |  |   62|      0|		flog_warn(EC_LIB_STREAM, "%s: Attempt to %s out of bounds",    \
  |  |  ------------------
  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  ------------------
  |  |   63|      0|			  __func__, (WHAT));                                   \
  |  |   64|      0|		STREAM_WARN_OFFSETS(S);                                        \
  |  |  ------------------
  |  |  |  |   43|      0|	do {                                                                   \
  |  |  |  |   44|      0|		flog_warn(EC_LIB_STREAM,				       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  |  |  ------------------
  |  |  |  |   45|      0|			  "&(struct stream): %p, size: %lu, getp: %lu, endp: %lu", \
  |  |  |  |   46|      0|			  (void *)(S), (unsigned long)(S)->size,	       \
  |  |  |  |   47|      0|			  (unsigned long)(S)->getp, (unsigned long)(S)->endp); \
  |  |  |  |   48|      0|		zlog_backtrace(LOG_WARNING);				       \
  |  |  |  |   49|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:11): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   65|      0|		assert(0);                                                     \
  |  |  ------------------
  |  |  |  |   51|      0|	({                                                                     \
  |  |  |  |   52|      0|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|      0|			(used)) = {                                            \
  |  |  |  |   54|      0|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{                                                                      \
  |  |  |  |  |  |  284|      0|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|      0|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|      0|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|      0|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|      0|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|      0|			.expr = #expr_,                                        \
  |  |  |  |   56|      0|		};                                                             \
  |  |  |  |   57|      0|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|      0|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|      0|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|      0|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|      0|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, Folded]
  |  |  |  |  |  Branch (58:24): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|      0|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|      0|	})
  |  |  ------------------
  |  |   66|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (66:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  237|      0|		return;
  238|      0|	}
  239|       |
  240|  64.3k|	s->getp += size;
  241|  64.3k|}
stream_forward_endp:
  280|    185|{
  281|    185|	STREAM_VERIFY_SANE(s);
  ------------------
  |  |   52|    185|	do {                                                                   \
  |  |   53|    185|		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   23|    370|#define GETP_VALID(S, G) ((G) <= (S)->endp)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:26): [True: 185, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   25|    185|#define ENDP_VALID(S, E) ((E) <= (S)->size)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (25:26): [True: 185, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   54|      0|			STREAM_WARN_OFFSETS(S);                                \
  |  |  ------------------
  |  |  |  |   43|      0|	do {                                                                   \
  |  |  |  |   44|      0|		flog_warn(EC_LIB_STREAM,				       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  |  |  ------------------
  |  |  |  |   45|      0|			  "&(struct stream): %p, size: %lu, getp: %lu, endp: %lu", \
  |  |  |  |   46|      0|			  (void *)(S), (unsigned long)(S)->size,	       \
  |  |  |  |   47|      0|			  (unsigned long)(S)->getp, (unsigned long)(S)->endp); \
  |  |  |  |   48|      0|		zlog_backtrace(LOG_WARNING);				       \
  |  |  |  |   49|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:11): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   55|      0|		}                                                              \
  |  |   56|    185|		assert(GETP_VALID(S, (S)->getp));                              \
  |  |  ------------------
  |  |  |  |   51|    185|	({                                                                     \
  |  |  |  |   52|    185|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|    185|			(used)) = {                                            \
  |  |  |  |   54|    185|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|    185|	{                                                                      \
  |  |  |  |  |  |  284|    185|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|    185|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|    185|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|    185|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|    185|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|    185|			.expr = #expr_,                                        \
  |  |  |  |   56|    185|		};                                                             \
  |  |  |  |   57|    185|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|    185|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|    185|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|    185|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|    185|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 185]
  |  |  |  |  |  Branch (58:24): [True: 185, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|    185|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|    185|	})
  |  |  ------------------
  |  |   57|    185|		assert(ENDP_VALID(S, (S)->endp));                              \
  |  |  ------------------
  |  |  |  |   51|    185|	({                                                                     \
  |  |  |  |   52|    185|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|    185|			(used)) = {                                            \
  |  |  |  |   54|    185|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|    185|	{                                                                      \
  |  |  |  |  |  |  284|    185|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|    185|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|    185|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|    185|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|    185|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|    185|			.expr = #expr_,                                        \
  |  |  |  |   56|    185|		};                                                             \
  |  |  |  |   57|    185|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|    185|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|    185|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|    185|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|    185|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 185]
  |  |  |  |  |  Branch (58:24): [True: 185, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|    185|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|    185|	})
  |  |  ------------------
  |  |   58|    185|	} while (0)
  |  |  ------------------
  |  |  |  Branch (58:11): [Folded, False: 185]
  |  |  ------------------
  ------------------
  282|       |
  283|    185|	if (!ENDP_VALID(s, s->endp + size)) {
  ------------------
  |  |   25|    185|#define ENDP_VALID(S, E) ((E) <= (S)->size)
  ------------------
  |  Branch (283:6): [True: 0, False: 185]
  ------------------
  284|      0|		STREAM_BOUND_WARN(s, "seek endp");
  ------------------
  |  |   61|      0|	do {                                                                   \
  |  |   62|      0|		flog_warn(EC_LIB_STREAM, "%s: Attempt to %s out of bounds",    \
  |  |  ------------------
  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  ------------------
  |  |   63|      0|			  __func__, (WHAT));                                   \
  |  |   64|      0|		STREAM_WARN_OFFSETS(S);                                        \
  |  |  ------------------
  |  |  |  |   43|      0|	do {                                                                   \
  |  |  |  |   44|      0|		flog_warn(EC_LIB_STREAM,				       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  |  |  ------------------
  |  |  |  |   45|      0|			  "&(struct stream): %p, size: %lu, getp: %lu, endp: %lu", \
  |  |  |  |   46|      0|			  (void *)(S), (unsigned long)(S)->size,	       \
  |  |  |  |   47|      0|			  (unsigned long)(S)->getp, (unsigned long)(S)->endp); \
  |  |  |  |   48|      0|		zlog_backtrace(LOG_WARNING);				       \
  |  |  |  |   49|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:11): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   65|      0|		assert(0);                                                     \
  |  |  ------------------
  |  |  |  |   51|      0|	({                                                                     \
  |  |  |  |   52|      0|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|      0|			(used)) = {                                            \
  |  |  |  |   54|      0|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{                                                                      \
  |  |  |  |  |  |  284|      0|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|      0|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|      0|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|      0|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|      0|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|      0|			.expr = #expr_,                                        \
  |  |  |  |   56|      0|		};                                                             \
  |  |  |  |   57|      0|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|      0|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|      0|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|      0|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|      0|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, Folded]
  |  |  |  |  |  Branch (58:24): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|      0|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|      0|	})
  |  |  ------------------
  |  |   66|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (66:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  285|      0|		return;
  286|      0|	}
  287|       |
  288|    185|	s->endp += size;
  289|    185|}
stream_getl:
  517|  15.8k|{
  518|  15.8k|	uint32_t l;
  519|       |
  520|  15.8k|	STREAM_VERIFY_SANE(s);
  ------------------
  |  |   52|  15.8k|	do {                                                                   \
  |  |   53|  15.8k|		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   23|  31.6k|#define GETP_VALID(S, G) ((G) <= (S)->endp)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:26): [True: 15.8k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   25|  15.8k|#define ENDP_VALID(S, E) ((E) <= (S)->size)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (25:26): [True: 15.8k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   54|      0|			STREAM_WARN_OFFSETS(S);                                \
  |  |  ------------------
  |  |  |  |   43|      0|	do {                                                                   \
  |  |  |  |   44|      0|		flog_warn(EC_LIB_STREAM,				       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  |  |  ------------------
  |  |  |  |   45|      0|			  "&(struct stream): %p, size: %lu, getp: %lu, endp: %lu", \
  |  |  |  |   46|      0|			  (void *)(S), (unsigned long)(S)->size,	       \
  |  |  |  |   47|      0|			  (unsigned long)(S)->getp, (unsigned long)(S)->endp); \
  |  |  |  |   48|      0|		zlog_backtrace(LOG_WARNING);				       \
  |  |  |  |   49|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:11): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   55|      0|		}                                                              \
  |  |   56|  15.8k|		assert(GETP_VALID(S, (S)->getp));                              \
  |  |  ------------------
  |  |  |  |   51|  15.8k|	({                                                                     \
  |  |  |  |   52|  15.8k|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|  15.8k|			(used)) = {                                            \
  |  |  |  |   54|  15.8k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|  15.8k|	{                                                                      \
  |  |  |  |  |  |  284|  15.8k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|  15.8k|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|  15.8k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|  15.8k|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|  15.8k|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|  15.8k|			.expr = #expr_,                                        \
  |  |  |  |   56|  15.8k|		};                                                             \
  |  |  |  |   57|  15.8k|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|  15.8k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|  15.8k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|  15.8k|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|  15.8k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 15.8k]
  |  |  |  |  |  Branch (58:24): [True: 15.8k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|  15.8k|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|  15.8k|	})
  |  |  ------------------
  |  |   57|  15.8k|		assert(ENDP_VALID(S, (S)->endp));                              \
  |  |  ------------------
  |  |  |  |   51|  15.8k|	({                                                                     \
  |  |  |  |   52|  15.8k|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|  15.8k|			(used)) = {                                            \
  |  |  |  |   54|  15.8k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|  15.8k|	{                                                                      \
  |  |  |  |  |  |  284|  15.8k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|  15.8k|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|  15.8k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|  15.8k|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|  15.8k|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|  15.8k|			.expr = #expr_,                                        \
  |  |  |  |   56|  15.8k|		};                                                             \
  |  |  |  |   57|  15.8k|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|  15.8k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|  15.8k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|  15.8k|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|  15.8k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 15.8k]
  |  |  |  |  |  Branch (58:24): [True: 15.8k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|  15.8k|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|  15.8k|	})
  |  |  ------------------
  |  |   58|  15.8k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (58:11): [Folded, False: 15.8k]
  |  |  ------------------
  ------------------
  521|       |
  522|  15.8k|	if (STREAM_READABLE(s) < sizeof(uint32_t)) {
  ------------------
  |  |  121|  15.8k|#define STREAM_READABLE(S) ((S)->endp - (S)->getp)
  ------------------
  |  Branch (522:6): [True: 0, False: 15.8k]
  ------------------
  523|      0|		STREAM_BOUND_WARN(s, "get long");
  ------------------
  |  |   61|      0|	do {                                                                   \
  |  |   62|      0|		flog_warn(EC_LIB_STREAM, "%s: Attempt to %s out of bounds",    \
  |  |  ------------------
  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  ------------------
  |  |   63|      0|			  __func__, (WHAT));                                   \
  |  |   64|      0|		STREAM_WARN_OFFSETS(S);                                        \
  |  |  ------------------
  |  |  |  |   43|      0|	do {                                                                   \
  |  |  |  |   44|      0|		flog_warn(EC_LIB_STREAM,				       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  |  |  ------------------
  |  |  |  |   45|      0|			  "&(struct stream): %p, size: %lu, getp: %lu, endp: %lu", \
  |  |  |  |   46|      0|			  (void *)(S), (unsigned long)(S)->size,	       \
  |  |  |  |   47|      0|			  (unsigned long)(S)->getp, (unsigned long)(S)->endp); \
  |  |  |  |   48|      0|		zlog_backtrace(LOG_WARNING);				       \
  |  |  |  |   49|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:11): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   65|      0|		assert(0);                                                     \
  |  |  ------------------
  |  |  |  |   51|      0|	({                                                                     \
  |  |  |  |   52|      0|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|      0|			(used)) = {                                            \
  |  |  |  |   54|      0|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{                                                                      \
  |  |  |  |  |  |  284|      0|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|      0|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|      0|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|      0|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|      0|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|      0|			.expr = #expr_,                                        \
  |  |  |  |   56|      0|		};                                                             \
  |  |  |  |   57|      0|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|      0|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|      0|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|      0|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|      0|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, Folded]
  |  |  |  |  |  Branch (58:24): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|      0|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|      0|	})
  |  |  ------------------
  |  |   66|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (66:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  524|      0|		return 0;
  525|      0|	}
  526|       |
  527|  15.8k|	l = (unsigned)(s->data[s->getp++]) << 24;
  528|  15.8k|	l |= s->data[s->getp++] << 16;
  529|  15.8k|	l |= s->data[s->getp++] << 8;
  530|  15.8k|	l |= s->data[s->getp++];
  531|       |
  532|  15.8k|	return l;
  533|  15.8k|}
stream_get_ipv4:
  605|  28.6k|{
  606|  28.6k|	uint32_t l;
  607|       |
  608|  28.6k|	STREAM_VERIFY_SANE(s);
  ------------------
  |  |   52|  28.6k|	do {                                                                   \
  |  |   53|  28.6k|		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   23|  57.2k|#define GETP_VALID(S, G) ((G) <= (S)->endp)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:26): [True: 28.6k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   25|  28.6k|#define ENDP_VALID(S, E) ((E) <= (S)->size)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (25:26): [True: 28.6k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   54|      0|			STREAM_WARN_OFFSETS(S);                                \
  |  |  ------------------
  |  |  |  |   43|      0|	do {                                                                   \
  |  |  |  |   44|      0|		flog_warn(EC_LIB_STREAM,				       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  |  |  ------------------
  |  |  |  |   45|      0|			  "&(struct stream): %p, size: %lu, getp: %lu, endp: %lu", \
  |  |  |  |   46|      0|			  (void *)(S), (unsigned long)(S)->size,	       \
  |  |  |  |   47|      0|			  (unsigned long)(S)->getp, (unsigned long)(S)->endp); \
  |  |  |  |   48|      0|		zlog_backtrace(LOG_WARNING);				       \
  |  |  |  |   49|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:11): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   55|      0|		}                                                              \
  |  |   56|  28.6k|		assert(GETP_VALID(S, (S)->getp));                              \
  |  |  ------------------
  |  |  |  |   51|  28.6k|	({                                                                     \
  |  |  |  |   52|  28.6k|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|  28.6k|			(used)) = {                                            \
  |  |  |  |   54|  28.6k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|  28.6k|	{                                                                      \
  |  |  |  |  |  |  284|  28.6k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|  28.6k|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|  28.6k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|  28.6k|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|  28.6k|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|  28.6k|			.expr = #expr_,                                        \
  |  |  |  |   56|  28.6k|		};                                                             \
  |  |  |  |   57|  28.6k|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|  28.6k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|  28.6k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|  28.6k|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|  28.6k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 28.6k]
  |  |  |  |  |  Branch (58:24): [True: 28.6k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|  28.6k|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|  28.6k|	})
  |  |  ------------------
  |  |   57|  28.6k|		assert(ENDP_VALID(S, (S)->endp));                              \
  |  |  ------------------
  |  |  |  |   51|  28.6k|	({                                                                     \
  |  |  |  |   52|  28.6k|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|  28.6k|			(used)) = {                                            \
  |  |  |  |   54|  28.6k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|  28.6k|	{                                                                      \
  |  |  |  |  |  |  284|  28.6k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|  28.6k|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|  28.6k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|  28.6k|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|  28.6k|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|  28.6k|			.expr = #expr_,                                        \
  |  |  |  |   56|  28.6k|		};                                                             \
  |  |  |  |   57|  28.6k|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|  28.6k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|  28.6k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|  28.6k|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|  28.6k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 28.6k]
  |  |  |  |  |  Branch (58:24): [True: 28.6k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|  28.6k|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|  28.6k|	})
  |  |  ------------------
  |  |   58|  28.6k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (58:11): [Folded, False: 28.6k]
  |  |  ------------------
  ------------------
  609|       |
  610|  28.6k|	if (STREAM_READABLE(s) < sizeof(uint32_t)) {
  ------------------
  |  |  121|  28.6k|#define STREAM_READABLE(S) ((S)->endp - (S)->getp)
  ------------------
  |  Branch (610:6): [True: 0, False: 28.6k]
  ------------------
  611|      0|		STREAM_BOUND_WARN(s, "get ipv4");
  ------------------
  |  |   61|      0|	do {                                                                   \
  |  |   62|      0|		flog_warn(EC_LIB_STREAM, "%s: Attempt to %s out of bounds",    \
  |  |  ------------------
  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  ------------------
  |  |   63|      0|			  __func__, (WHAT));                                   \
  |  |   64|      0|		STREAM_WARN_OFFSETS(S);                                        \
  |  |  ------------------
  |  |  |  |   43|      0|	do {                                                                   \
  |  |  |  |   44|      0|		flog_warn(EC_LIB_STREAM,				       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  |  |  ------------------
  |  |  |  |   45|      0|			  "&(struct stream): %p, size: %lu, getp: %lu, endp: %lu", \
  |  |  |  |   46|      0|			  (void *)(S), (unsigned long)(S)->size,	       \
  |  |  |  |   47|      0|			  (unsigned long)(S)->getp, (unsigned long)(S)->endp); \
  |  |  |  |   48|      0|		zlog_backtrace(LOG_WARNING);				       \
  |  |  |  |   49|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:11): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   65|      0|		assert(0);                                                     \
  |  |  ------------------
  |  |  |  |   51|      0|	({                                                                     \
  |  |  |  |   52|      0|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|      0|			(used)) = {                                            \
  |  |  |  |   54|      0|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{                                                                      \
  |  |  |  |  |  |  284|      0|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|      0|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|      0|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|      0|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|      0|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|      0|			.expr = #expr_,                                        \
  |  |  |  |   56|      0|		};                                                             \
  |  |  |  |   57|      0|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|      0|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|      0|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|      0|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|      0|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, Folded]
  |  |  |  |  |  Branch (58:24): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|      0|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|      0|	})
  |  |  ------------------
  |  |   66|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (66:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  612|      0|		return 0;
  613|      0|	}
  614|       |
  615|  28.6k|	memcpy(&l, s->data + s->getp, sizeof(uint32_t));
  616|  28.6k|	s->getp += sizeof(uint32_t);
  617|       |
  618|  28.6k|	return l;
  619|  28.6k|}
stream_put:
  686|  3.05k|{
  687|       |
  688|       |	/* XXX: CHECK_SIZE has strange semantics. It should be deprecated */
  689|  3.05k|	CHECK_SIZE(s, size);
  ------------------
  |  |   77|  3.05k|	do {                                                                   \
  |  |   78|  3.05k|		if (((S)->endp + (Z)) > (S)->size) {                           \
  |  |  ------------------
  |  |  |  Branch (78:7): [True: 0, False: 3.05k]
  |  |  ------------------
  |  |   79|      0|			flog_warn(                                             \
  |  |  ------------------
  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  ------------------
  |  |   80|      0|				EC_LIB_STREAM,                                 \
  |  |   81|      0|				"CHECK_SIZE: truncating requested size %lu",   \
  |  |   82|      0|				(unsigned long)(Z));                           \
  |  |   83|      0|			STREAM_WARN_OFFSETS(S);                                \
  |  |  ------------------
  |  |  |  |   43|      0|	do {                                                                   \
  |  |  |  |   44|      0|		flog_warn(EC_LIB_STREAM,				       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  |  |  ------------------
  |  |  |  |   45|      0|			  "&(struct stream): %p, size: %lu, getp: %lu, endp: %lu", \
  |  |  |  |   46|      0|			  (void *)(S), (unsigned long)(S)->size,	       \
  |  |  |  |   47|      0|			  (unsigned long)(S)->getp, (unsigned long)(S)->endp); \
  |  |  |  |   48|      0|		zlog_backtrace(LOG_WARNING);				       \
  |  |  |  |   49|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:11): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   84|      0|			(Z) = (S)->size - (S)->endp;                           \
  |  |   85|      0|		}                                                              \
  |  |   86|  3.05k|	} while (0);
  |  |  ------------------
  |  |  |  Branch (86:11): [Folded, False: 3.05k]
  |  |  ------------------
  ------------------
  690|       |
  691|  3.05k|	STREAM_VERIFY_SANE(s);
  ------------------
  |  |   52|  3.05k|	do {                                                                   \
  |  |   53|  3.05k|		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   23|  6.10k|#define GETP_VALID(S, G) ((G) <= (S)->endp)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:26): [True: 3.05k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   25|  3.05k|#define ENDP_VALID(S, E) ((E) <= (S)->size)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (25:26): [True: 3.05k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   54|      0|			STREAM_WARN_OFFSETS(S);                                \
  |  |  ------------------
  |  |  |  |   43|      0|	do {                                                                   \
  |  |  |  |   44|      0|		flog_warn(EC_LIB_STREAM,				       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  |  |  ------------------
  |  |  |  |   45|      0|			  "&(struct stream): %p, size: %lu, getp: %lu, endp: %lu", \
  |  |  |  |   46|      0|			  (void *)(S), (unsigned long)(S)->size,	       \
  |  |  |  |   47|      0|			  (unsigned long)(S)->getp, (unsigned long)(S)->endp); \
  |  |  |  |   48|      0|		zlog_backtrace(LOG_WARNING);				       \
  |  |  |  |   49|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:11): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   55|      0|		}                                                              \
  |  |   56|  3.05k|		assert(GETP_VALID(S, (S)->getp));                              \
  |  |  ------------------
  |  |  |  |   51|  3.05k|	({                                                                     \
  |  |  |  |   52|  3.05k|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|  3.05k|			(used)) = {                                            \
  |  |  |  |   54|  3.05k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|  3.05k|	{                                                                      \
  |  |  |  |  |  |  284|  3.05k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|  3.05k|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|  3.05k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|  3.05k|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|  3.05k|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|  3.05k|			.expr = #expr_,                                        \
  |  |  |  |   56|  3.05k|		};                                                             \
  |  |  |  |   57|  3.05k|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|  3.05k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|  3.05k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|  3.05k|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|  3.05k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 3.05k]
  |  |  |  |  |  Branch (58:24): [True: 3.05k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|  3.05k|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|  3.05k|	})
  |  |  ------------------
  |  |   57|  3.05k|		assert(ENDP_VALID(S, (S)->endp));                              \
  |  |  ------------------
  |  |  |  |   51|  3.05k|	({                                                                     \
  |  |  |  |   52|  3.05k|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|  3.05k|			(used)) = {                                            \
  |  |  |  |   54|  3.05k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|  3.05k|	{                                                                      \
  |  |  |  |  |  |  284|  3.05k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|  3.05k|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|  3.05k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|  3.05k|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|  3.05k|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|  3.05k|			.expr = #expr_,                                        \
  |  |  |  |   56|  3.05k|		};                                                             \
  |  |  |  |   57|  3.05k|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|  3.05k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|  3.05k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|  3.05k|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|  3.05k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 3.05k]
  |  |  |  |  |  Branch (58:24): [True: 3.05k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|  3.05k|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|  3.05k|	})
  |  |  ------------------
  |  |   58|  3.05k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (58:11): [Folded, False: 3.05k]
  |  |  ------------------
  ------------------
  692|       |
  693|  3.05k|	if (STREAM_WRITEABLE(s) < size) {
  ------------------
  |  |  119|  3.05k|#define STREAM_WRITEABLE(S) ((S)->size - (S)->endp)
  ------------------
  |  Branch (693:6): [True: 0, False: 3.05k]
  ------------------
  694|      0|		STREAM_BOUND_WARN(s, "put");
  ------------------
  |  |   61|      0|	do {                                                                   \
  |  |   62|      0|		flog_warn(EC_LIB_STREAM, "%s: Attempt to %s out of bounds",    \
  |  |  ------------------
  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  ------------------
  |  |   63|      0|			  __func__, (WHAT));                                   \
  |  |   64|      0|		STREAM_WARN_OFFSETS(S);                                        \
  |  |  ------------------
  |  |  |  |   43|      0|	do {                                                                   \
  |  |  |  |   44|      0|		flog_warn(EC_LIB_STREAM,				       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  |  |  ------------------
  |  |  |  |   45|      0|			  "&(struct stream): %p, size: %lu, getp: %lu, endp: %lu", \
  |  |  |  |   46|      0|			  (void *)(S), (unsigned long)(S)->size,	       \
  |  |  |  |   47|      0|			  (unsigned long)(S)->getp, (unsigned long)(S)->endp); \
  |  |  |  |   48|      0|		zlog_backtrace(LOG_WARNING);				       \
  |  |  |  |   49|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:11): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   65|      0|		assert(0);                                                     \
  |  |  ------------------
  |  |  |  |   51|      0|	({                                                                     \
  |  |  |  |   52|      0|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|      0|			(used)) = {                                            \
  |  |  |  |   54|      0|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{                                                                      \
  |  |  |  |  |  |  284|      0|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|      0|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|      0|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|      0|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|      0|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|      0|			.expr = #expr_,                                        \
  |  |  |  |   56|      0|		};                                                             \
  |  |  |  |   57|      0|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|      0|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|      0|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|      0|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|      0|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, Folded]
  |  |  |  |  |  Branch (58:24): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|      0|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|      0|	})
  |  |  ------------------
  |  |   66|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (66:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  695|      0|		return;
  696|      0|	}
  697|       |
  698|  3.05k|	if (src)
  ------------------
  |  Branch (698:6): [True: 3.05k, False: 0]
  ------------------
  699|  3.05k|		memcpy(s->data + s->endp, src, size);
  700|      0|	else
  701|      0|		memset(s->data + s->endp, 0, size);
  702|       |
  703|  3.05k|	s->endp += size;
  704|  3.05k|}
stream_putc:
  708|    182|{
  709|    182|	STREAM_VERIFY_SANE(s);
  ------------------
  |  |   52|    182|	do {                                                                   \
  |  |   53|    182|		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   23|    364|#define GETP_VALID(S, G) ((G) <= (S)->endp)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:26): [True: 182, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   25|    182|#define ENDP_VALID(S, E) ((E) <= (S)->size)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (25:26): [True: 182, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   54|      0|			STREAM_WARN_OFFSETS(S);                                \
  |  |  ------------------
  |  |  |  |   43|      0|	do {                                                                   \
  |  |  |  |   44|      0|		flog_warn(EC_LIB_STREAM,				       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  |  |  ------------------
  |  |  |  |   45|      0|			  "&(struct stream): %p, size: %lu, getp: %lu, endp: %lu", \
  |  |  |  |   46|      0|			  (void *)(S), (unsigned long)(S)->size,	       \
  |  |  |  |   47|      0|			  (unsigned long)(S)->getp, (unsigned long)(S)->endp); \
  |  |  |  |   48|      0|		zlog_backtrace(LOG_WARNING);				       \
  |  |  |  |   49|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:11): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   55|      0|		}                                                              \
  |  |   56|    182|		assert(GETP_VALID(S, (S)->getp));                              \
  |  |  ------------------
  |  |  |  |   51|    182|	({                                                                     \
  |  |  |  |   52|    182|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|    182|			(used)) = {                                            \
  |  |  |  |   54|    182|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|    182|	{                                                                      \
  |  |  |  |  |  |  284|    182|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|    182|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|    182|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|    182|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|    182|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|    182|			.expr = #expr_,                                        \
  |  |  |  |   56|    182|		};                                                             \
  |  |  |  |   57|    182|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|    182|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|    182|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|    182|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|    182|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 182]
  |  |  |  |  |  Branch (58:24): [True: 182, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|    182|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|    182|	})
  |  |  ------------------
  |  |   57|    182|		assert(ENDP_VALID(S, (S)->endp));                              \
  |  |  ------------------
  |  |  |  |   51|    182|	({                                                                     \
  |  |  |  |   52|    182|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|    182|			(used)) = {                                            \
  |  |  |  |   54|    182|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|    182|	{                                                                      \
  |  |  |  |  |  |  284|    182|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|    182|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|    182|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|    182|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|    182|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|    182|			.expr = #expr_,                                        \
  |  |  |  |   56|    182|		};                                                             \
  |  |  |  |   57|    182|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|    182|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|    182|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|    182|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|    182|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 182]
  |  |  |  |  |  Branch (58:24): [True: 182, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|    182|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|    182|	})
  |  |  ------------------
  |  |   58|    182|	} while (0)
  |  |  ------------------
  |  |  |  Branch (58:11): [Folded, False: 182]
  |  |  ------------------
  ------------------
  710|       |
  711|    182|	if (STREAM_WRITEABLE(s) < sizeof(uint8_t)) {
  ------------------
  |  |  119|    182|#define STREAM_WRITEABLE(S) ((S)->size - (S)->endp)
  ------------------
  |  Branch (711:6): [True: 0, False: 182]
  ------------------
  712|      0|		STREAM_BOUND_WARN(s, "put");
  ------------------
  |  |   61|      0|	do {                                                                   \
  |  |   62|      0|		flog_warn(EC_LIB_STREAM, "%s: Attempt to %s out of bounds",    \
  |  |  ------------------
  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  ------------------
  |  |   63|      0|			  __func__, (WHAT));                                   \
  |  |   64|      0|		STREAM_WARN_OFFSETS(S);                                        \
  |  |  ------------------
  |  |  |  |   43|      0|	do {                                                                   \
  |  |  |  |   44|      0|		flog_warn(EC_LIB_STREAM,				       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  |  |  ------------------
  |  |  |  |   45|      0|			  "&(struct stream): %p, size: %lu, getp: %lu, endp: %lu", \
  |  |  |  |   46|      0|			  (void *)(S), (unsigned long)(S)->size,	       \
  |  |  |  |   47|      0|			  (unsigned long)(S)->getp, (unsigned long)(S)->endp); \
  |  |  |  |   48|      0|		zlog_backtrace(LOG_WARNING);				       \
  |  |  |  |   49|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:11): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   65|      0|		assert(0);                                                     \
  |  |  ------------------
  |  |  |  |   51|      0|	({                                                                     \
  |  |  |  |   52|      0|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|      0|			(used)) = {                                            \
  |  |  |  |   54|      0|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{                                                                      \
  |  |  |  |  |  |  284|      0|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|      0|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|      0|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|      0|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|      0|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|      0|			.expr = #expr_,                                        \
  |  |  |  |   56|      0|		};                                                             \
  |  |  |  |   57|      0|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|      0|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|      0|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|      0|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|      0|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, Folded]
  |  |  |  |  |  Branch (58:24): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|      0|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|      0|	})
  |  |  ------------------
  |  |   66|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (66:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  713|      0|		return 0;
  714|      0|	}
  715|       |
  716|    182|	s->data[s->endp++] = c;
  717|    182|	return sizeof(uint8_t);
  718|    182|}
stream_putw:
  722|     91|{
  723|     91|	STREAM_VERIFY_SANE(s);
  ------------------
  |  |   52|     91|	do {                                                                   \
  |  |   53|     91|		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   23|    182|#define GETP_VALID(S, G) ((G) <= (S)->endp)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:26): [True: 91, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   25|     91|#define ENDP_VALID(S, E) ((E) <= (S)->size)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (25:26): [True: 91, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   54|      0|			STREAM_WARN_OFFSETS(S);                                \
  |  |  ------------------
  |  |  |  |   43|      0|	do {                                                                   \
  |  |  |  |   44|      0|		flog_warn(EC_LIB_STREAM,				       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  |  |  ------------------
  |  |  |  |   45|      0|			  "&(struct stream): %p, size: %lu, getp: %lu, endp: %lu", \
  |  |  |  |   46|      0|			  (void *)(S), (unsigned long)(S)->size,	       \
  |  |  |  |   47|      0|			  (unsigned long)(S)->getp, (unsigned long)(S)->endp); \
  |  |  |  |   48|      0|		zlog_backtrace(LOG_WARNING);				       \
  |  |  |  |   49|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:11): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   55|      0|		}                                                              \
  |  |   56|     91|		assert(GETP_VALID(S, (S)->getp));                              \
  |  |  ------------------
  |  |  |  |   51|     91|	({                                                                     \
  |  |  |  |   52|     91|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|     91|			(used)) = {                                            \
  |  |  |  |   54|     91|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|     91|	{                                                                      \
  |  |  |  |  |  |  284|     91|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|     91|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|     91|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|     91|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|     91|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|     91|			.expr = #expr_,                                        \
  |  |  |  |   56|     91|		};                                                             \
  |  |  |  |   57|     91|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|     91|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|     91|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|     91|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|     91|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 91]
  |  |  |  |  |  Branch (58:24): [True: 91, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|     91|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|     91|	})
  |  |  ------------------
  |  |   57|     91|		assert(ENDP_VALID(S, (S)->endp));                              \
  |  |  ------------------
  |  |  |  |   51|     91|	({                                                                     \
  |  |  |  |   52|     91|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|     91|			(used)) = {                                            \
  |  |  |  |   54|     91|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|     91|	{                                                                      \
  |  |  |  |  |  |  284|     91|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|     91|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|     91|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|     91|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|     91|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|     91|			.expr = #expr_,                                        \
  |  |  |  |   56|     91|		};                                                             \
  |  |  |  |   57|     91|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|     91|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|     91|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|     91|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|     91|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 91]
  |  |  |  |  |  Branch (58:24): [True: 91, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|     91|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|     91|	})
  |  |  ------------------
  |  |   58|     91|	} while (0)
  |  |  ------------------
  |  |  |  Branch (58:11): [Folded, False: 91]
  |  |  ------------------
  ------------------
  724|       |
  725|     91|	if (STREAM_WRITEABLE(s) < sizeof(uint16_t)) {
  ------------------
  |  |  119|     91|#define STREAM_WRITEABLE(S) ((S)->size - (S)->endp)
  ------------------
  |  Branch (725:6): [True: 0, False: 91]
  ------------------
  726|      0|		STREAM_BOUND_WARN(s, "put");
  ------------------
  |  |   61|      0|	do {                                                                   \
  |  |   62|      0|		flog_warn(EC_LIB_STREAM, "%s: Attempt to %s out of bounds",    \
  |  |  ------------------
  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  ------------------
  |  |   63|      0|			  __func__, (WHAT));                                   \
  |  |   64|      0|		STREAM_WARN_OFFSETS(S);                                        \
  |  |  ------------------
  |  |  |  |   43|      0|	do {                                                                   \
  |  |  |  |   44|      0|		flog_warn(EC_LIB_STREAM,				       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  |  |  ------------------
  |  |  |  |   45|      0|			  "&(struct stream): %p, size: %lu, getp: %lu, endp: %lu", \
  |  |  |  |   46|      0|			  (void *)(S), (unsigned long)(S)->size,	       \
  |  |  |  |   47|      0|			  (unsigned long)(S)->getp, (unsigned long)(S)->endp); \
  |  |  |  |   48|      0|		zlog_backtrace(LOG_WARNING);				       \
  |  |  |  |   49|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:11): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   65|      0|		assert(0);                                                     \
  |  |  ------------------
  |  |  |  |   51|      0|	({                                                                     \
  |  |  |  |   52|      0|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|      0|			(used)) = {                                            \
  |  |  |  |   54|      0|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{                                                                      \
  |  |  |  |  |  |  284|      0|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|      0|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|      0|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|      0|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|      0|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|      0|			.expr = #expr_,                                        \
  |  |  |  |   56|      0|		};                                                             \
  |  |  |  |   57|      0|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|      0|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|      0|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|      0|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|      0|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, Folded]
  |  |  |  |  |  Branch (58:24): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|      0|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|      0|	})
  |  |  ------------------
  |  |   66|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (66:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  727|      0|		return 0;
  728|      0|	}
  729|       |
  730|     91|	s->data[s->endp++] = (uint8_t)(w >> 8);
  731|     91|	s->data[s->endp++] = (uint8_t)w;
  732|       |
  733|     91|	return 2;
  734|     91|}
stream_putl:
  755|    247|{
  756|    247|	STREAM_VERIFY_SANE(s);
  ------------------
  |  |   52|    247|	do {                                                                   \
  |  |   53|    247|		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   23|    494|#define GETP_VALID(S, G) ((G) <= (S)->endp)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:26): [True: 247, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   25|    247|#define ENDP_VALID(S, E) ((E) <= (S)->size)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (25:26): [True: 247, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   54|      0|			STREAM_WARN_OFFSETS(S);                                \
  |  |  ------------------
  |  |  |  |   43|      0|	do {                                                                   \
  |  |  |  |   44|      0|		flog_warn(EC_LIB_STREAM,				       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  |  |  ------------------
  |  |  |  |   45|      0|			  "&(struct stream): %p, size: %lu, getp: %lu, endp: %lu", \
  |  |  |  |   46|      0|			  (void *)(S), (unsigned long)(S)->size,	       \
  |  |  |  |   47|      0|			  (unsigned long)(S)->getp, (unsigned long)(S)->endp); \
  |  |  |  |   48|      0|		zlog_backtrace(LOG_WARNING);				       \
  |  |  |  |   49|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:11): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   55|      0|		}                                                              \
  |  |   56|    247|		assert(GETP_VALID(S, (S)->getp));                              \
  |  |  ------------------
  |  |  |  |   51|    247|	({                                                                     \
  |  |  |  |   52|    247|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|    247|			(used)) = {                                            \
  |  |  |  |   54|    247|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|    247|	{                                                                      \
  |  |  |  |  |  |  284|    247|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|    247|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|    247|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|    247|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|    247|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|    247|			.expr = #expr_,                                        \
  |  |  |  |   56|    247|		};                                                             \
  |  |  |  |   57|    247|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|    247|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|    247|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|    247|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|    247|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 247]
  |  |  |  |  |  Branch (58:24): [True: 247, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|    247|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|    247|	})
  |  |  ------------------
  |  |   57|    247|		assert(ENDP_VALID(S, (S)->endp));                              \
  |  |  ------------------
  |  |  |  |   51|    247|	({                                                                     \
  |  |  |  |   52|    247|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|    247|			(used)) = {                                            \
  |  |  |  |   54|    247|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|    247|	{                                                                      \
  |  |  |  |  |  |  284|    247|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|    247|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|    247|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|    247|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|    247|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|    247|			.expr = #expr_,                                        \
  |  |  |  |   56|    247|		};                                                             \
  |  |  |  |   57|    247|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|    247|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|    247|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|    247|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|    247|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 247]
  |  |  |  |  |  Branch (58:24): [True: 247, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|    247|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|    247|	})
  |  |  ------------------
  |  |   58|    247|	} while (0)
  |  |  ------------------
  |  |  |  Branch (58:11): [Folded, False: 247]
  |  |  ------------------
  ------------------
  757|       |
  758|    247|	if (STREAM_WRITEABLE(s) < sizeof(uint32_t)) {
  ------------------
  |  |  119|    247|#define STREAM_WRITEABLE(S) ((S)->size - (S)->endp)
  ------------------
  |  Branch (758:6): [True: 0, False: 247]
  ------------------
  759|      0|		STREAM_BOUND_WARN(s, "put");
  ------------------
  |  |   61|      0|	do {                                                                   \
  |  |   62|      0|		flog_warn(EC_LIB_STREAM, "%s: Attempt to %s out of bounds",    \
  |  |  ------------------
  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  ------------------
  |  |   63|      0|			  __func__, (WHAT));                                   \
  |  |   64|      0|		STREAM_WARN_OFFSETS(S);                                        \
  |  |  ------------------
  |  |  |  |   43|      0|	do {                                                                   \
  |  |  |  |   44|      0|		flog_warn(EC_LIB_STREAM,				       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  |  |  ------------------
  |  |  |  |   45|      0|			  "&(struct stream): %p, size: %lu, getp: %lu, endp: %lu", \
  |  |  |  |   46|      0|			  (void *)(S), (unsigned long)(S)->size,	       \
  |  |  |  |   47|      0|			  (unsigned long)(S)->getp, (unsigned long)(S)->endp); \
  |  |  |  |   48|      0|		zlog_backtrace(LOG_WARNING);				       \
  |  |  |  |   49|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:11): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   65|      0|		assert(0);                                                     \
  |  |  ------------------
  |  |  |  |   51|      0|	({                                                                     \
  |  |  |  |   52|      0|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|      0|			(used)) = {                                            \
  |  |  |  |   54|      0|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{                                                                      \
  |  |  |  |  |  |  284|      0|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|      0|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|      0|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|      0|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|      0|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|      0|			.expr = #expr_,                                        \
  |  |  |  |   56|      0|		};                                                             \
  |  |  |  |   57|      0|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|      0|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|      0|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|      0|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|      0|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, Folded]
  |  |  |  |  |  Branch (58:24): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|      0|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|      0|	})
  |  |  ------------------
  |  |   66|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (66:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  760|      0|		return 0;
  761|      0|	}
  762|       |
  763|    247|	s->data[s->endp++] = (uint8_t)(l >> 24);
  764|    247|	s->data[s->endp++] = (uint8_t)(l >> 16);
  765|    247|	s->data[s->endp++] = (uint8_t)(l >> 8);
  766|    247|	s->data[s->endp++] = (uint8_t)l;
  767|       |
  768|    247|	return 4;
  769|    247|}
stream_putc_at:
  814|     90|{
  815|     90|	STREAM_VERIFY_SANE(s);
  ------------------
  |  |   52|     90|	do {                                                                   \
  |  |   53|     90|		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   23|    180|#define GETP_VALID(S, G) ((G) <= (S)->endp)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:26): [True: 90, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   25|     90|#define ENDP_VALID(S, E) ((E) <= (S)->size)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (25:26): [True: 90, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   54|      0|			STREAM_WARN_OFFSETS(S);                                \
  |  |  ------------------
  |  |  |  |   43|      0|	do {                                                                   \
  |  |  |  |   44|      0|		flog_warn(EC_LIB_STREAM,				       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  |  |  ------------------
  |  |  |  |   45|      0|			  "&(struct stream): %p, size: %lu, getp: %lu, endp: %lu", \
  |  |  |  |   46|      0|			  (void *)(S), (unsigned long)(S)->size,	       \
  |  |  |  |   47|      0|			  (unsigned long)(S)->getp, (unsigned long)(S)->endp); \
  |  |  |  |   48|      0|		zlog_backtrace(LOG_WARNING);				       \
  |  |  |  |   49|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:11): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   55|      0|		}                                                              \
  |  |   56|     90|		assert(GETP_VALID(S, (S)->getp));                              \
  |  |  ------------------
  |  |  |  |   51|     90|	({                                                                     \
  |  |  |  |   52|     90|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|     90|			(used)) = {                                            \
  |  |  |  |   54|     90|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|     90|	{                                                                      \
  |  |  |  |  |  |  284|     90|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|     90|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|     90|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|     90|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|     90|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|     90|			.expr = #expr_,                                        \
  |  |  |  |   56|     90|		};                                                             \
  |  |  |  |   57|     90|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|     90|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|     90|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|     90|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|     90|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 90]
  |  |  |  |  |  Branch (58:24): [True: 90, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|     90|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|     90|	})
  |  |  ------------------
  |  |   57|     90|		assert(ENDP_VALID(S, (S)->endp));                              \
  |  |  ------------------
  |  |  |  |   51|     90|	({                                                                     \
  |  |  |  |   52|     90|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|     90|			(used)) = {                                            \
  |  |  |  |   54|     90|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|     90|	{                                                                      \
  |  |  |  |  |  |  284|     90|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|     90|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|     90|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|     90|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|     90|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|     90|			.expr = #expr_,                                        \
  |  |  |  |   56|     90|		};                                                             \
  |  |  |  |   57|     90|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|     90|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|     90|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|     90|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|     90|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 90]
  |  |  |  |  |  Branch (58:24): [True: 90, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|     90|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|     90|	})
  |  |  ------------------
  |  |   58|     90|	} while (0)
  |  |  ------------------
  |  |  |  Branch (58:11): [Folded, False: 90]
  |  |  ------------------
  ------------------
  816|       |
  817|     90|	if (!PUT_AT_VALID(s, putp + sizeof(uint8_t))) {
  ------------------
  |  |   24|     90|#define PUT_AT_VALID(S,G) GETP_VALID(S,G)
  |  |  ------------------
  |  |  |  |   23|     90|#define GETP_VALID(S, G) ((G) <= (S)->endp)
  |  |  ------------------
  ------------------
  |  Branch (817:6): [True: 0, False: 90]
  ------------------
  818|      0|		STREAM_BOUND_WARN(s, "put");
  ------------------
  |  |   61|      0|	do {                                                                   \
  |  |   62|      0|		flog_warn(EC_LIB_STREAM, "%s: Attempt to %s out of bounds",    \
  |  |  ------------------
  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  ------------------
  |  |   63|      0|			  __func__, (WHAT));                                   \
  |  |   64|      0|		STREAM_WARN_OFFSETS(S);                                        \
  |  |  ------------------
  |  |  |  |   43|      0|	do {                                                                   \
  |  |  |  |   44|      0|		flog_warn(EC_LIB_STREAM,				       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  |  |  ------------------
  |  |  |  |   45|      0|			  "&(struct stream): %p, size: %lu, getp: %lu, endp: %lu", \
  |  |  |  |   46|      0|			  (void *)(S), (unsigned long)(S)->size,	       \
  |  |  |  |   47|      0|			  (unsigned long)(S)->getp, (unsigned long)(S)->endp); \
  |  |  |  |   48|      0|		zlog_backtrace(LOG_WARNING);				       \
  |  |  |  |   49|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:11): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   65|      0|		assert(0);                                                     \
  |  |  ------------------
  |  |  |  |   51|      0|	({                                                                     \
  |  |  |  |   52|      0|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|      0|			(used)) = {                                            \
  |  |  |  |   54|      0|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{                                                                      \
  |  |  |  |  |  |  284|      0|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|      0|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|      0|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|      0|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|      0|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|      0|			.expr = #expr_,                                        \
  |  |  |  |   56|      0|		};                                                             \
  |  |  |  |   57|      0|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|      0|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|      0|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|      0|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|      0|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, Folded]
  |  |  |  |  |  Branch (58:24): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|      0|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|      0|	})
  |  |  ------------------
  |  |   66|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (66:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  819|      0|		return 0;
  820|      0|	}
  821|       |
  822|     90|	s->data[putp] = c;
  823|       |
  824|     90|	return 1;
  825|     90|}
stream_putw_at:
  828|      1|{
  829|      1|	STREAM_VERIFY_SANE(s);
  ------------------
  |  |   52|      1|	do {                                                                   \
  |  |   53|      1|		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   23|      2|#define GETP_VALID(S, G) ((G) <= (S)->endp)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:26): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   25|      1|#define ENDP_VALID(S, E) ((E) <= (S)->size)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (25:26): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   54|      0|			STREAM_WARN_OFFSETS(S);                                \
  |  |  ------------------
  |  |  |  |   43|      0|	do {                                                                   \
  |  |  |  |   44|      0|		flog_warn(EC_LIB_STREAM,				       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  |  |  ------------------
  |  |  |  |   45|      0|			  "&(struct stream): %p, size: %lu, getp: %lu, endp: %lu", \
  |  |  |  |   46|      0|			  (void *)(S), (unsigned long)(S)->size,	       \
  |  |  |  |   47|      0|			  (unsigned long)(S)->getp, (unsigned long)(S)->endp); \
  |  |  |  |   48|      0|		zlog_backtrace(LOG_WARNING);				       \
  |  |  |  |   49|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:11): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   55|      0|		}                                                              \
  |  |   56|      1|		assert(GETP_VALID(S, (S)->getp));                              \
  |  |  ------------------
  |  |  |  |   51|      1|	({                                                                     \
  |  |  |  |   52|      1|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|      1|			(used)) = {                                            \
  |  |  |  |   54|      1|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|      1|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|      1|			.expr = #expr_,                                        \
  |  |  |  |   56|      1|		};                                                             \
  |  |  |  |   57|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|      1|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 1]
  |  |  |  |  |  Branch (58:24): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|      1|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|      1|	})
  |  |  ------------------
  |  |   57|      1|		assert(ENDP_VALID(S, (S)->endp));                              \
  |  |  ------------------
  |  |  |  |   51|      1|	({                                                                     \
  |  |  |  |   52|      1|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|      1|			(used)) = {                                            \
  |  |  |  |   54|      1|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|      1|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|      1|			.expr = #expr_,                                        \
  |  |  |  |   56|      1|		};                                                             \
  |  |  |  |   57|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|      1|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 1]
  |  |  |  |  |  Branch (58:24): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|      1|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|      1|	})
  |  |  ------------------
  |  |   58|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (58:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  830|       |
  831|      1|	if (!PUT_AT_VALID(s, putp + sizeof(uint16_t))) {
  ------------------
  |  |   24|      1|#define PUT_AT_VALID(S,G) GETP_VALID(S,G)
  |  |  ------------------
  |  |  |  |   23|      1|#define GETP_VALID(S, G) ((G) <= (S)->endp)
  |  |  ------------------
  ------------------
  |  Branch (831:6): [True: 0, False: 1]
  ------------------
  832|      0|		STREAM_BOUND_WARN(s, "put");
  ------------------
  |  |   61|      0|	do {                                                                   \
  |  |   62|      0|		flog_warn(EC_LIB_STREAM, "%s: Attempt to %s out of bounds",    \
  |  |  ------------------
  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  ------------------
  |  |   63|      0|			  __func__, (WHAT));                                   \
  |  |   64|      0|		STREAM_WARN_OFFSETS(S);                                        \
  |  |  ------------------
  |  |  |  |   43|      0|	do {                                                                   \
  |  |  |  |   44|      0|		flog_warn(EC_LIB_STREAM,				       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  |  |  ------------------
  |  |  |  |   45|      0|			  "&(struct stream): %p, size: %lu, getp: %lu, endp: %lu", \
  |  |  |  |   46|      0|			  (void *)(S), (unsigned long)(S)->size,	       \
  |  |  |  |   47|      0|			  (unsigned long)(S)->getp, (unsigned long)(S)->endp); \
  |  |  |  |   48|      0|		zlog_backtrace(LOG_WARNING);				       \
  |  |  |  |   49|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:11): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   65|      0|		assert(0);                                                     \
  |  |  ------------------
  |  |  |  |   51|      0|	({                                                                     \
  |  |  |  |   52|      0|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|      0|			(used)) = {                                            \
  |  |  |  |   54|      0|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{                                                                      \
  |  |  |  |  |  |  284|      0|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|      0|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|      0|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|      0|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|      0|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|      0|			.expr = #expr_,                                        \
  |  |  |  |   56|      0|		};                                                             \
  |  |  |  |   57|      0|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|      0|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|      0|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|      0|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|      0|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, Folded]
  |  |  |  |  |  Branch (58:24): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|      0|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|      0|	})
  |  |  ------------------
  |  |   66|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (66:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  833|      0|		return 0;
  834|      0|	}
  835|       |
  836|      1|	s->data[putp] = (uint8_t)(w >> 8);
  837|      1|	s->data[putp + 1] = (uint8_t)w;
  838|       |
  839|      1|	return 2;
  840|      1|}
stream_put_ipv4:
  895|    314|{
  896|    314|	STREAM_VERIFY_SANE(s);
  ------------------
  |  |   52|    314|	do {                                                                   \
  |  |   53|    314|		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   23|    628|#define GETP_VALID(S, G) ((G) <= (S)->endp)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:26): [True: 314, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   25|    314|#define ENDP_VALID(S, E) ((E) <= (S)->size)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (25:26): [True: 314, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   54|      0|			STREAM_WARN_OFFSETS(S);                                \
  |  |  ------------------
  |  |  |  |   43|      0|	do {                                                                   \
  |  |  |  |   44|      0|		flog_warn(EC_LIB_STREAM,				       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  |  |  ------------------
  |  |  |  |   45|      0|			  "&(struct stream): %p, size: %lu, getp: %lu, endp: %lu", \
  |  |  |  |   46|      0|			  (void *)(S), (unsigned long)(S)->size,	       \
  |  |  |  |   47|      0|			  (unsigned long)(S)->getp, (unsigned long)(S)->endp); \
  |  |  |  |   48|      0|		zlog_backtrace(LOG_WARNING);				       \
  |  |  |  |   49|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:11): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   55|      0|		}                                                              \
  |  |   56|    314|		assert(GETP_VALID(S, (S)->getp));                              \
  |  |  ------------------
  |  |  |  |   51|    314|	({                                                                     \
  |  |  |  |   52|    314|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|    314|			(used)) = {                                            \
  |  |  |  |   54|    314|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|    314|	{                                                                      \
  |  |  |  |  |  |  284|    314|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|    314|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|    314|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|    314|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|    314|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|    314|			.expr = #expr_,                                        \
  |  |  |  |   56|    314|		};                                                             \
  |  |  |  |   57|    314|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|    314|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|    314|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|    314|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|    314|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 314]
  |  |  |  |  |  Branch (58:24): [True: 314, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|    314|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|    314|	})
  |  |  ------------------
  |  |   57|    314|		assert(ENDP_VALID(S, (S)->endp));                              \
  |  |  ------------------
  |  |  |  |   51|    314|	({                                                                     \
  |  |  |  |   52|    314|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|    314|			(used)) = {                                            \
  |  |  |  |   54|    314|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|    314|	{                                                                      \
  |  |  |  |  |  |  284|    314|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|    314|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|    314|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|    314|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|    314|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|    314|			.expr = #expr_,                                        \
  |  |  |  |   56|    314|		};                                                             \
  |  |  |  |   57|    314|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|    314|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|    314|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|    314|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|    314|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 314]
  |  |  |  |  |  Branch (58:24): [True: 314, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|    314|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|    314|	})
  |  |  ------------------
  |  |   58|    314|	} while (0)
  |  |  ------------------
  |  |  |  Branch (58:11): [Folded, False: 314]
  |  |  ------------------
  ------------------
  897|       |
  898|    314|	if (STREAM_WRITEABLE(s) < sizeof(uint32_t)) {
  ------------------
  |  |  119|    314|#define STREAM_WRITEABLE(S) ((S)->size - (S)->endp)
  ------------------
  |  Branch (898:6): [True: 0, False: 314]
  ------------------
  899|      0|		STREAM_BOUND_WARN(s, "put");
  ------------------
  |  |   61|      0|	do {                                                                   \
  |  |   62|      0|		flog_warn(EC_LIB_STREAM, "%s: Attempt to %s out of bounds",    \
  |  |  ------------------
  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  ------------------
  |  |   63|      0|			  __func__, (WHAT));                                   \
  |  |   64|      0|		STREAM_WARN_OFFSETS(S);                                        \
  |  |  ------------------
  |  |  |  |   43|      0|	do {                                                                   \
  |  |  |  |   44|      0|		flog_warn(EC_LIB_STREAM,				       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  |  |  ------------------
  |  |  |  |   45|      0|			  "&(struct stream): %p, size: %lu, getp: %lu, endp: %lu", \
  |  |  |  |   46|      0|			  (void *)(S), (unsigned long)(S)->size,	       \
  |  |  |  |   47|      0|			  (unsigned long)(S)->getp, (unsigned long)(S)->endp); \
  |  |  |  |   48|      0|		zlog_backtrace(LOG_WARNING);				       \
  |  |  |  |   49|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:11): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   65|      0|		assert(0);                                                     \
  |  |  ------------------
  |  |  |  |   51|      0|	({                                                                     \
  |  |  |  |   52|      0|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|      0|			(used)) = {                                            \
  |  |  |  |   54|      0|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{                                                                      \
  |  |  |  |  |  |  284|      0|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|      0|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|      0|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|      0|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|      0|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|      0|			.expr = #expr_,                                        \
  |  |  |  |   56|      0|		};                                                             \
  |  |  |  |   57|      0|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|      0|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|      0|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|      0|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|      0|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, Folded]
  |  |  |  |  |  Branch (58:24): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|      0|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|      0|	})
  |  |  ------------------
  |  |   66|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (66:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  900|      0|		return 0;
  901|      0|	}
  902|    314|	memcpy(s->data + s->endp, &l, sizeof(uint32_t));
  903|    314|	s->endp += sizeof(uint32_t);
  904|       |
  905|    314|	return sizeof(uint32_t);
  906|    314|}
stream_pnt:
 1186|  62.3k|{
 1187|  62.3k|	STREAM_VERIFY_SANE(s);
  ------------------
  |  |   52|  62.3k|	do {                                                                   \
  |  |   53|  62.3k|		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   23|   124k|#define GETP_VALID(S, G) ((G) <= (S)->endp)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:26): [True: 62.3k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   25|  62.3k|#define ENDP_VALID(S, E) ((E) <= (S)->size)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (25:26): [True: 62.3k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   54|      0|			STREAM_WARN_OFFSETS(S);                                \
  |  |  ------------------
  |  |  |  |   43|      0|	do {                                                                   \
  |  |  |  |   44|      0|		flog_warn(EC_LIB_STREAM,				       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  |  |  |  |  ------------------
  |  |  |  |   45|      0|			  "&(struct stream): %p, size: %lu, getp: %lu, endp: %lu", \
  |  |  |  |   46|      0|			  (void *)(S), (unsigned long)(S)->size,	       \
  |  |  |  |   47|      0|			  (unsigned long)(S)->getp, (unsigned long)(S)->endp); \
  |  |  |  |   48|      0|		zlog_backtrace(LOG_WARNING);				       \
  |  |  |  |   49|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:11): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   55|      0|		}                                                              \
  |  |   56|  62.3k|		assert(GETP_VALID(S, (S)->getp));                              \
  |  |  ------------------
  |  |  |  |   51|  62.3k|	({                                                                     \
  |  |  |  |   52|  62.3k|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|  62.3k|			(used)) = {                                            \
  |  |  |  |   54|  62.3k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|  62.3k|	{                                                                      \
  |  |  |  |  |  |  284|  62.3k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|  62.3k|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|  62.3k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|  62.3k|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|  62.3k|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|  62.3k|			.expr = #expr_,                                        \
  |  |  |  |   56|  62.3k|		};                                                             \
  |  |  |  |   57|  62.3k|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|  62.3k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|  62.3k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|  62.3k|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|  62.3k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 62.3k]
  |  |  |  |  |  Branch (58:24): [True: 62.3k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|  62.3k|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|  62.3k|	})
  |  |  ------------------
  |  |   57|  62.3k|		assert(ENDP_VALID(S, (S)->endp));                              \
  |  |  ------------------
  |  |  |  |   51|  62.3k|	({                                                                     \
  |  |  |  |   52|  62.3k|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|  62.3k|			(used)) = {                                            \
  |  |  |  |   54|  62.3k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|  62.3k|	{                                                                      \
  |  |  |  |  |  |  284|  62.3k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|  62.3k|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|  62.3k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|  62.3k|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|  62.3k|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|  62.3k|			.expr = #expr_,                                        \
  |  |  |  |   56|  62.3k|		};                                                             \
  |  |  |  |   57|  62.3k|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|  62.3k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|  62.3k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|  62.3k|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|  62.3k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 62.3k]
  |  |  |  |  |  Branch (58:24): [True: 62.3k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|  62.3k|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|  62.3k|	})
  |  |  ------------------
  |  |   58|  62.3k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (58:11): [Folded, False: 62.3k]
  |  |  ------------------
  ------------------
 1188|  62.3k|	return s->data + s->getp;
 1189|  62.3k|}

strlcat:
   25|     14|{
   26|     14|	size_t src_length = strlen(src);
   27|       |
   28|       |	/* Our implementation strlcat supports dest == NULL if size == 0
   29|       |	   (for consistency with snprintf and strlcpy), but strnlen does
   30|       |	   not, so we have to cover this case explicitly.  */
   31|     14|	if (destsize == 0)
  ------------------
  |  Branch (31:6): [True: 0, False: 14]
  ------------------
   32|      0|		return src_length;
   33|       |
   34|     14|	size_t dest_length = strnlen(dest, destsize);
   35|     14|	if (dest_length != destsize) {
  ------------------
  |  Branch (35:6): [True: 14, False: 0]
  ------------------
   36|       |		/* Copy at most the remaining number of characters in the
   37|       |		   destination buffer.  Leave for the NUL terminator.  */
   38|     14|		size_t to_copy = destsize - dest_length - 1;
   39|       |		/* But not more than what is available in the source string.  */
   40|     14|		if (to_copy > src_length)
  ------------------
  |  Branch (40:7): [True: 14, False: 0]
  ------------------
   41|     14|			to_copy = src_length;
   42|       |
   43|     14|		char *target = dest + dest_length;
   44|     14|		memcpy(target, src, to_copy);
   45|     14|		target[to_copy] = '\0';
   46|     14|	}
   47|       |
   48|       |/* If the sum wraps around, we have more than SIZE_MAX + 2 bytes in
   49|       |   the two input strings (including both null terminators).  If each
   50|       |   byte in the address space can be assigned a unique size_t value
   51|       |   (which the static_assert checks), then by the pigeonhole
   52|       |   principle, the two input strings must overlap, which is
   53|       |   undefined.  */
   54|     14|	_Static_assert(sizeof(uintptr_t) == sizeof(size_t),
   55|     14|		       "theoretical maximum object size covers address space");
   56|     14|	return dest_length + src_length;
   57|     14|}

strlcpy:
   24|      9|{
   25|      9|	size_t src_length = strlen(src);
   26|       |
   27|      9|	if (__builtin_expect(src_length >= destsize, 0)) {
  ------------------
  |  Branch (27:6): [True: 0, False: 9]
  ------------------
   28|      0|		if (destsize > 0) {
  ------------------
  |  Branch (28:7): [True: 0, False: 0]
  ------------------
   29|       |			/*
   30|       |			 * Copy the leading portion of the string.  The last
   31|       |			 * character is subsequently overwritten with the NUL
   32|       |			 * terminator, but the destination destsize is usually
   33|       |			 * a multiple of a small power of two, so writing it
   34|       |			 * twice should be more efficient than copying an odd
   35|       |			 * number of bytes.
   36|       |			 */
   37|      0|			memcpy(dest, src, destsize);
   38|      0|			dest[destsize - 1] = '\0';
   39|      0|		}
   40|      0|	} else
   41|       |		/* Copy the string and its terminating NUL character.  */
   42|      9|		memcpy(dest, src, src_length + 1);
   43|      9|	return src_length;
   44|      9|}

systemd_init_env:
  112|      1|{
  113|      1|	char *tmp;
  114|      1|	uintmax_t dev, ino;
  115|      1|	int len;
  116|      1|	struct stat st;
  117|       |
  118|      1|	notify_socket = getenv("NOTIFY_SOCKET");
  119|       |
  120|       |	/* no point in setting up watchdog w/o notify socket */
  121|      1|	if (notify_socket) {
  ------------------
  |  Branch (121:6): [True: 0, False: 1]
  ------------------
  122|      0|		intmax_t watchdog_usec;
  123|       |
  124|      0|		watchdog_pid = getenv_int("WATCHDOG_PID", -1);
  125|      0|		if (watchdog_pid <= 0)
  ------------------
  |  Branch (125:7): [True: 0, False: 0]
  ------------------
  126|      0|			watchdog_pid = -1;
  127|       |
  128|       |		/* note this is the deadline, hence the divide by 3 */
  129|      0|		watchdog_usec = getenv_int("WATCHDOG_USEC", 0);
  130|      0|		if (watchdog_usec >= 3000)
  ------------------
  |  Branch (130:7): [True: 0, False: 0]
  ------------------
  131|      0|			watchdog_msec = watchdog_usec / 3000;
  132|      0|		else {
  133|      0|			if (watchdog_usec != 0)
  ------------------
  |  Branch (133:8): [True: 0, False: 0]
  ------------------
  134|      0|				flog_err(
  ------------------
  |  |  136|      0|#define flog_err(ferr_id, format, ...) 0
  ------------------
  135|      0|					EC_LIB_UNAVAILABLE,
  136|      0|					"systemd expects a %jd microsecond watchdog timer, but FRR only supports millisecond resolution!",
  137|      0|					watchdog_usec);
  138|      0|			watchdog_msec = 0;
  139|      0|		}
  140|      0|	}
  141|       |
  142|      1|	tmp = getenv("JOURNAL_STREAM");
  143|      1|	if (tmp && sscanf(tmp, "%ju:%ju%n", &dev, &ino, &len) == 2
  ------------------
  |  Branch (143:6): [True: 0, False: 1]
  |  Branch (143:13): [True: 0, False: 0]
  ------------------
  144|      0|	    && (size_t)len == strlen(tmp)) {
  ------------------
  |  Branch (144:9): [True: 0, False: 0]
  ------------------
  145|      0|		if (fstat(1, &st) == 0 && st.st_dev == (dev_t)dev
  ------------------
  |  Branch (145:7): [True: 0, False: 0]
  |  Branch (145:29): [True: 0, False: 0]
  ------------------
  146|      0|		    && st.st_ino == (ino_t)ino)
  ------------------
  |  Branch (146:10): [True: 0, False: 0]
  ------------------
  147|      0|			sd_stdout_is_journal = true;
  148|      0|		if (fstat(2, &st) == 0 && st.st_dev == (dev_t)dev
  ------------------
  |  Branch (148:7): [True: 0, False: 0]
  |  Branch (148:29): [True: 0, False: 0]
  ------------------
  149|      0|		    && st.st_ino == (ino_t)ino)
  ------------------
  |  Branch (149:10): [True: 0, False: 0]
  ------------------
  150|      0|			sd_stderr_is_journal = true;
  151|      0|	}
  152|       |
  153|       |	/* these should *not* be passed to any other process we start */
  154|      1|	unsetenv("WATCHDOG_PID");
  155|      1|	unsetenv("WATCHDOG_USEC");
  156|      1|}

route_table_init_with_delegate:
   35|  8.15k|{
   36|  8.15k|	struct route_table *rt;
   37|       |
   38|  8.15k|	rt = XCALLOC(MTYPE_ROUTE_TABLE, sizeof(struct route_table));
  ------------------
  |  |  165|  8.15k|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
   39|  8.15k|	rt->delegate = delegate;
   40|  8.15k|	rn_hash_node_init(&rt->hash);
   41|  8.15k|	return rt;
   42|  8.15k|}
route_node_lookup:
  240|  51.6k|{
  241|  51.6k|	struct route_node rn, *node;
  242|  51.6k|	prefix_copy(&rn.p, pu.p);
  243|  51.6k|	apply_mask(&rn.p);
  244|       |
  245|  51.6k|	node = rn_hash_node_find(&table->hash, &rn);
  246|  51.6k|	return (node && node->info) ? route_lock_node(node) : NULL;
  ------------------
  |  Branch (246:10): [True: 17.7k, False: 33.8k]
  |  Branch (246:18): [True: 17.7k, False: 0]
  ------------------
  247|  51.6k|}
route_node_get:
  264|  12.3k|{
  265|  12.3k|	if (frrtrace_enabled(frr_libfrr, route_node_get)) {
  ------------------
  |  |   62|  12.3k|#define frrtrace_enabled(...) false
  ------------------
  |  Branch (265:6): [Folded, False: 12.3k]
  ------------------
  266|      0|		char buf[PREFIX2STR_BUFFER];
  267|      0|		prefix2str(pu, buf, sizeof(buf));
  268|      0|		frrtrace(2, frr_libfrr, route_node_get, table, buf);
  ------------------
  |  |   61|      0|#define frrtrace(nargs, provider, name, ...) (void)0
  ------------------
  269|      0|	}
  270|       |
  271|  12.3k|	struct route_node search;
  272|  12.3k|	struct prefix *p = &search.p;
  273|       |
  274|  12.3k|	prefix_copy(p, pu.p);
  275|  12.3k|	apply_mask(p);
  276|       |
  277|  12.3k|	struct route_node *new;
  278|  12.3k|	struct route_node *node;
  279|  12.3k|	struct route_node *match;
  280|  12.3k|	uint16_t prefixlen = p->prefixlen;
  281|  12.3k|	const uint8_t *prefix = &p->u.prefix;
  282|       |
  283|  12.3k|	node = rn_hash_node_find(&table->hash, &search);
  284|  12.3k|	if (node && node->info)
  ------------------
  |  Branch (284:6): [True: 7.53k, False: 4.84k]
  |  Branch (284:14): [True: 7.53k, False: 0]
  ------------------
  285|  7.53k|		return route_lock_node(node);
  286|       |
  287|  4.84k|	match = NULL;
  288|  4.84k|	node = table->top;
  289|  25.7k|	while (node && node->p.prefixlen <= prefixlen
  ------------------
  |  Branch (289:9): [True: 25.3k, False: 396]
  |  Branch (289:17): [True: 25.3k, False: 10]
  ------------------
  290|  25.3k|	       && prefix_match(&node->p, p)) {
  ------------------
  |  Branch (290:12): [True: 20.9k, False: 4.44k]
  ------------------
  291|  20.9k|		if (node->p.prefixlen == prefixlen)
  ------------------
  |  Branch (291:7): [True: 0, False: 20.9k]
  ------------------
  292|      0|			return route_lock_node(node);
  293|       |
  294|  20.9k|		match = node;
  295|  20.9k|		node = node->link[prefix_bit(prefix, node->p.prefixlen)];
  296|  20.9k|	}
  297|       |
  298|  4.84k|	if (node == NULL) {
  ------------------
  |  Branch (298:6): [True: 396, False: 4.45k]
  ------------------
  299|    396|		new = route_node_set(table, p);
  300|    396|		if (match)
  ------------------
  |  Branch (300:7): [True: 7, False: 389]
  ------------------
  301|      7|			set_link(match, new);
  302|    389|		else
  303|    389|			table->top = new;
  304|  4.45k|	} else {
  305|  4.45k|		new = route_node_new(table);
  306|  4.45k|		route_common(&node->p, p, &new->p);
  307|  4.45k|		new->p.family = p->family;
  308|  4.45k|		new->table = table;
  309|  4.45k|		set_link(new, node);
  310|  4.45k|		rn_hash_node_add(&table->hash, new);
  311|       |
  312|  4.45k|		if (match)
  ------------------
  |  Branch (312:7): [True: 4.02k, False: 430]
  ------------------
  313|  4.02k|			set_link(match, new);
  314|    430|		else
  315|    430|			table->top = new;
  316|       |
  317|  4.45k|		if (new->p.prefixlen != p->prefixlen) {
  ------------------
  |  Branch (317:7): [True: 4.44k, False: 8]
  ------------------
  318|  4.44k|			match = new;
  319|  4.44k|			new = route_node_set(table, p);
  320|  4.44k|			set_link(match, new);
  321|  4.44k|			table->count++;
  322|  4.44k|		}
  323|  4.45k|	}
  324|  4.84k|	table->count++;
  325|  4.84k|	route_lock_node(new);
  326|       |
  327|  4.84k|	return new;
  328|  4.84k|}
route_node_delete:
  332|  8.51k|{
  333|  8.51k|	struct route_node *child;
  334|  8.51k|	struct route_node *parent;
  335|       |
  336|  8.51k|	assert(node->lock == 0);
  ------------------
  |  |   51|  8.51k|	({                                                                     \
  |  |   52|  8.51k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  8.51k|			(used)) = {                                            \
  |  |   54|  8.51k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  8.51k|	{                                                                      \
  |  |  |  |  284|  8.51k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  8.51k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  8.51k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  8.51k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  8.51k|	}                                                                      \
  |  |  ------------------
  |  |   55|  8.51k|			.expr = #expr_,                                        \
  |  |   56|  8.51k|		};                                                             \
  |  |   57|  8.51k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  8.51k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  8.51k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  8.51k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  8.51k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 8.51k]
  |  |  |  Branch (58:24): [True: 8.51k, False: 0]
  |  |  ------------------
  |  |   59|  8.51k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  8.51k|	})
  ------------------
  337|  8.51k|	assert(node->info == NULL);
  ------------------
  |  |   51|  8.51k|	({                                                                     \
  |  |   52|  8.51k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  8.51k|			(used)) = {                                            \
  |  |   54|  8.51k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  8.51k|	{                                                                      \
  |  |  |  |  284|  8.51k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  8.51k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  8.51k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  8.51k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  8.51k|	}                                                                      \
  |  |  ------------------
  |  |   55|  8.51k|			.expr = #expr_,                                        \
  |  |   56|  8.51k|		};                                                             \
  |  |   57|  8.51k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  8.51k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  8.51k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  8.51k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  8.51k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 8.51k]
  |  |  |  Branch (58:24): [True: 8.51k, False: 0]
  |  |  ------------------
  |  |   59|  8.51k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  8.51k|	})
  ------------------
  338|       |
  339|  8.51k|	if (node->l_left && node->l_right)
  ------------------
  |  |  128|  17.0k|#define l_left   link[0]
  ------------------
              	if (node->l_left && node->l_right)
  ------------------
  |  |  129|  8.51k|#define l_right  link[1]
  ------------------
  |  Branch (339:6): [True: 8.51k, False: 0]
  |  Branch (339:22): [True: 8.51k, False: 0]
  ------------------
  340|  8.51k|		return;
  341|       |
  342|      0|	if (node->l_left)
  ------------------
  |  |  128|      0|#define l_left   link[0]
  ------------------
  |  Branch (342:6): [True: 0, False: 0]
  ------------------
  343|      0|		child = node->l_left;
  ------------------
  |  |  128|      0|#define l_left   link[0]
  ------------------
  344|      0|	else
  345|      0|		child = node->l_right;
  ------------------
  |  |  129|      0|#define l_right  link[1]
  ------------------
  346|       |
  347|      0|	parent = node->parent;
  348|       |
  349|      0|	if (child)
  ------------------
  |  Branch (349:6): [True: 0, False: 0]
  ------------------
  350|      0|		child->parent = parent;
  351|       |
  352|      0|	if (parent) {
  ------------------
  |  Branch (352:6): [True: 0, False: 0]
  ------------------
  353|      0|		if (parent->l_left == node)
  ------------------
  |  |  128|      0|#define l_left   link[0]
  ------------------
  |  Branch (353:7): [True: 0, False: 0]
  ------------------
  354|      0|			parent->l_left = child;
  ------------------
  |  |  128|      0|#define l_left   link[0]
  ------------------
  355|      0|		else
  356|      0|			parent->l_right = child;
  ------------------
  |  |  129|      0|#define l_right  link[1]
  ------------------
  357|      0|	} else
  358|      0|		node->table->top = child;
  359|       |
  360|      0|	node->table->count--;
  361|       |
  362|      0|	rn_hash_node_del(&node->table->hash, node);
  363|       |
  364|       |	/* WARNING: FRAGILE CODE!
  365|       |	 * route_node_free may have the side effect of free'ing the entire
  366|       |	 * table.
  367|       |	 * this is permitted only if table->count got decremented to zero above,
  368|       |	 * because in that case parent will also be NULL, so that we won't try
  369|       |	 * to
  370|       |	 * delete a now-stale parent below.
  371|       |	 *
  372|       |	 * cf. srcdest_srcnode_destroy() in zebra/zebra_rib.c */
  373|       |
  374|      0|	route_node_free(node->table, node);
  375|       |
  376|       |	/* If parent node is stub then delete it also. */
  377|      0|	if (parent && parent->lock == 0)
  ------------------
  |  Branch (377:6): [True: 0, False: 0]
  |  Branch (377:16): [True: 0, False: 0]
  ------------------
  378|      0|		route_node_delete(parent);
  379|      0|}
route_top:
  384|  3.80k|{
  385|       |	/* If there is no node in the routing table return NULL. */
  386|  3.80k|	if (table->top == NULL)
  ------------------
  |  Branch (386:6): [True: 930, False: 2.87k]
  ------------------
  387|    930|		return NULL;
  388|       |
  389|       |	/* Lock the top node and return it. */
  390|  2.87k|	route_lock_node(table->top);
  391|  2.87k|	return table->top;
  392|  3.80k|}
route_next:
  396|  19.3k|{
  397|  19.3k|	struct route_node *next;
  398|  19.3k|	struct route_node *start;
  399|       |
  400|       |	/* Node may be deleted from route_unlock_node so we have to preserve
  401|       |	   next node's pointer. */
  402|       |
  403|  19.3k|	if (node->l_left) {
  ------------------
  |  |  128|  19.3k|#define l_left   link[0]
  ------------------
  |  Branch (403:6): [True: 8.51k, False: 10.8k]
  ------------------
  404|  8.51k|		next = node->l_left;
  ------------------
  |  |  128|  8.51k|#define l_left   link[0]
  ------------------
  405|  8.51k|		route_lock_node(next);
  406|  8.51k|		route_unlock_node(node);
  407|  8.51k|		return next;
  408|  8.51k|	}
  409|  10.8k|	if (node->l_right) {
  ------------------
  |  |  129|  10.8k|#define l_right  link[1]
  ------------------
  |  Branch (409:6): [True: 0, False: 10.8k]
  ------------------
  410|      0|		next = node->l_right;
  ------------------
  |  |  129|      0|#define l_right  link[1]
  ------------------
  411|      0|		route_lock_node(next);
  412|      0|		route_unlock_node(node);
  413|      0|		return next;
  414|      0|	}
  415|       |
  416|  10.8k|	start = node;
  417|  18.9k|	while (node->parent) {
  ------------------
  |  Branch (417:9): [True: 16.2k, False: 2.69k]
  ------------------
  418|  16.2k|		if (node->parent->l_left == node && node->parent->l_right) {
  ------------------
  |  |  128|  16.2k|#define l_left   link[0]
  ------------------
              		if (node->parent->l_left == node && node->parent->l_right) {
  ------------------
  |  |  129|  8.13k|#define l_right  link[1]
  ------------------
  |  Branch (418:7): [True: 8.13k, False: 8.07k]
  |  Branch (418:39): [True: 8.13k, False: 0]
  ------------------
  419|  8.13k|			next = node->parent->l_right;
  ------------------
  |  |  129|  8.13k|#define l_right  link[1]
  ------------------
  420|  8.13k|			route_lock_node(next);
  421|  8.13k|			route_unlock_node(start);
  422|  8.13k|			return next;
  423|  8.13k|		}
  424|  8.07k|		node = node->parent;
  425|  8.07k|	}
  426|  2.69k|	route_unlock_node(start);
  427|       |	return NULL;
  428|  10.8k|}
route_node_create:
  479|  9.28k|{
  480|  9.28k|	struct route_node *node;
  481|  9.28k|	node = XCALLOC(MTYPE_ROUTE_NODE, sizeof(struct route_node));
  ------------------
  |  |  165|  9.28k|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  482|  9.28k|	return node;
  483|  9.28k|}
route_table_init:
  512|  8.15k|{
  513|  8.15k|	return route_table_init_with_delegate(&default_delegate);
  514|  8.15k|}
table.c:route_table_hash_cmp:
   24|  26.0k|{
   25|  26.0k|	return prefix_cmp(&a->p, &b->p);
   26|  26.0k|}
table.c:route_node_set:
   58|  4.83k|{
   59|  4.83k|	struct route_node *node;
   60|       |
   61|  4.83k|	node = route_node_new(table);
   62|       |
   63|  4.83k|	prefix_copy(&node->p, prefix);
   64|  4.83k|	node->table = table;
   65|       |
   66|  4.83k|	rn_hash_node_add(&node->table->hash, node);
   67|       |
   68|  4.83k|	return node;
   69|  4.83k|}
table.c:set_link:
  173|  12.9k|{
  174|  12.9k|	unsigned int bit = prefix_bit(&new->p.u.prefix, node->p.prefixlen);
  175|       |
  176|  12.9k|	node->link[bit] = new;
  177|  12.9k|	new->parent = node;
  178|  12.9k|}
table.c:route_node_new:
   51|  9.28k|{
   52|  9.28k|	return table->delegate->create_node(table->delegate, table);
   53|  9.28k|}
table.c:route_common:
  137|  4.45k|{
  138|  4.45k|	int i;
  139|  4.45k|	uint8_t diff;
  140|  4.45k|	uint8_t mask;
  141|  4.45k|	const uint8_t *np;
  142|  4.45k|	const uint8_t *pp;
  143|  4.45k|	uint8_t *newp;
  144|       |
  145|  4.45k|	if (n->family == AF_FLOWSPEC)
  ------------------
  |  |  158|  4.45k|#define AF_FLOWSPEC (AF_MAX + 2)
  ------------------
  |  Branch (145:6): [True: 0, False: 4.45k]
  ------------------
  146|      0|		return prefix_copy(new, p);
  147|  4.45k|	np = (const uint8_t *)&n->u.prefix;
  148|  4.45k|	pp = (const uint8_t *)&p->u.prefix;
  149|       |
  150|  4.45k|	newp = &new->u.prefix;
  151|       |
  152|  14.7k|	for (i = 0; i < p->prefixlen / 8; i++) {
  ------------------
  |  Branch (152:14): [True: 14.7k, False: 12]
  ------------------
  153|  14.7k|		if (np[i] == pp[i])
  ------------------
  |  Branch (153:7): [True: 10.2k, False: 4.43k]
  ------------------
  154|  10.2k|			newp[i] = np[i];
  155|  4.43k|		else
  156|  4.43k|			break;
  157|  14.7k|	}
  158|       |
  159|  4.45k|	new->prefixlen = i * 8;
  160|       |
  161|  4.45k|	if (new->prefixlen != p->prefixlen) {
  ------------------
  |  Branch (161:6): [True: 4.44k, False: 1]
  ------------------
  162|  4.44k|		diff = np[i] ^ pp[i];
  163|  4.44k|		mask = 0x80;
  164|  15.7k|		while (new->prefixlen < p->prefixlen && !(mask & diff)) {
  ------------------
  |  Branch (164:10): [True: 15.7k, False: 7]
  |  Branch (164:43): [True: 11.3k, False: 4.44k]
  ------------------
  165|  11.3k|			mask >>= 1;
  166|  11.3k|			new->prefixlen++;
  167|  11.3k|		}
  168|  4.44k|		newp[i] = np[i] & maskbit[new->prefixlen % 8];
  169|  4.44k|	}
  170|  4.45k|}

ospf_lsdb.c:route_unlock_node:
  238|  20.8k|{
  239|  20.8k|	assert(node->lock > 0);
  ------------------
  |  |   51|  20.8k|	({                                                                     \
  |  |   52|  20.8k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  20.8k|			(used)) = {                                            \
  |  |   54|  20.8k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  20.8k|	{                                                                      \
  |  |  |  |  284|  20.8k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  20.8k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  20.8k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  20.8k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  20.8k|	}                                                                      \
  |  |  ------------------
  |  |   55|  20.8k|			.expr = #expr_,                                        \
  |  |   56|  20.8k|		};                                                             \
  |  |   57|  20.8k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  20.8k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  20.8k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  20.8k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  20.8k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 20.8k]
  |  |  |  Branch (58:24): [True: 20.8k, False: 0]
  |  |  ------------------
  |  |   59|  20.8k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  20.8k|	})
  ------------------
  240|  20.8k|	(*(unsigned *)&node->lock)--;
  241|       |
  242|  20.8k|	if (node->lock == 0)
  ------------------
  |  Branch (242:6): [True: 0, False: 20.8k]
  ------------------
  243|      0|		route_node_delete(node);
  244|  20.8k|}
ospf_neighbor.c:route_unlock_node:
  238|  4.28k|{
  239|  4.28k|	assert(node->lock > 0);
  ------------------
  |  |   51|  4.28k|	({                                                                     \
  |  |   52|  4.28k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  4.28k|			(used)) = {                                            \
  |  |   54|  4.28k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  4.28k|	{                                                                      \
  |  |  |  |  284|  4.28k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  4.28k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  4.28k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  4.28k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  4.28k|	}                                                                      \
  |  |  ------------------
  |  |   55|  4.28k|			.expr = #expr_,                                        \
  |  |   56|  4.28k|		};                                                             \
  |  |   57|  4.28k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  4.28k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  4.28k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  4.28k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  4.28k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 4.28k]
  |  |  |  Branch (58:24): [True: 4.28k, False: 0]
  |  |  ------------------
  |  |   59|  4.28k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  4.28k|	})
  ------------------
  240|  4.28k|	(*(unsigned *)&node->lock)--;
  241|       |
  242|  4.28k|	if (node->lock == 0)
  ------------------
  |  Branch (242:6): [True: 0, False: 4.28k]
  ------------------
  243|      0|		route_node_delete(node);
  244|  4.28k|}
ospf_packet.c:route_unlock_node:
  238|    180|{
  239|    180|	assert(node->lock > 0);
  ------------------
  |  |   51|    180|	({                                                                     \
  |  |   52|    180|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|    180|			(used)) = {                                            \
  |  |   54|    180|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|    180|	{                                                                      \
  |  |  |  |  284|    180|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|    180|		/* .type = */ (type_),                                         \
  |  |  |  |  286|    180|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|    180|		/* .func = */ func_,                                           \
  |  |  |  |  289|    180|	}                                                                      \
  |  |  ------------------
  |  |   55|    180|			.expr = #expr_,                                        \
  |  |   56|    180|		};                                                             \
  |  |   57|    180|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|    180|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|    180|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|    180|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|    180|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 180]
  |  |  |  Branch (58:24): [True: 180, False: 0]
  |  |  ------------------
  |  |   59|    180|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|    180|	})
  ------------------
  240|    180|	(*(unsigned *)&node->lock)--;
  241|       |
  242|    180|	if (node->lock == 0)
  ------------------
  |  Branch (242:6): [True: 0, False: 180]
  ------------------
  243|      0|		route_node_delete(node);
  244|    180|}
ospf_ase.c:route_unlock_node:
  238|    110|{
  239|    110|	assert(node->lock > 0);
  ------------------
  |  |   51|    110|	({                                                                     \
  |  |   52|    110|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|    110|			(used)) = {                                            \
  |  |   54|    110|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|    110|	{                                                                      \
  |  |  |  |  284|    110|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|    110|		/* .type = */ (type_),                                         \
  |  |  |  |  286|    110|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|    110|		/* .func = */ func_,                                           \
  |  |  |  |  289|    110|	}                                                                      \
  |  |  ------------------
  |  |   55|    110|			.expr = #expr_,                                        \
  |  |   56|    110|		};                                                             \
  |  |   57|    110|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|    110|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|    110|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|    110|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|    110|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 110]
  |  |  |  Branch (58:24): [True: 110, False: 0]
  |  |  ------------------
  |  |   59|    110|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|    110|	})
  ------------------
  240|    110|	(*(unsigned *)&node->lock)--;
  241|       |
  242|    110|	if (node->lock == 0)
  ------------------
  |  Branch (242:6): [True: 0, False: 110]
  ------------------
  243|      0|		route_node_delete(node);
  244|    110|}
table.c:route_lock_node:
  231|  49.6k|{
  232|  49.6k|	(*(unsigned *)&node->lock)++;
  233|  49.6k|	return node;
  234|  49.6k|}
table.c:route_unlock_node:
  238|  19.3k|{
  239|  19.3k|	assert(node->lock > 0);
  ------------------
  |  |   51|  19.3k|	({                                                                     \
  |  |   52|  19.3k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  19.3k|			(used)) = {                                            \
  |  |   54|  19.3k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  19.3k|	{                                                                      \
  |  |  |  |  284|  19.3k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  19.3k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  19.3k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  19.3k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  19.3k|	}                                                                      \
  |  |  ------------------
  |  |   55|  19.3k|			.expr = #expr_,                                        \
  |  |   56|  19.3k|		};                                                             \
  |  |   57|  19.3k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  19.3k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  19.3k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  19.3k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  19.3k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 19.3k]
  |  |  |  Branch (58:24): [True: 19.3k, False: 0]
  |  |  ------------------
  |  |   59|  19.3k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  19.3k|	})
  ------------------
  240|  19.3k|	(*(unsigned *)&node->lock)--;
  241|       |
  242|  19.3k|	if (node->lock == 0)
  ------------------
  |  Branch (242:6): [True: 8.51k, False: 10.8k]
  ------------------
  243|  8.51k|		route_node_delete(node);
  244|  19.3k|}

plist.c:plist_init:
   70|      4|macro_inline void prefix ## _init(struct prefix##_head *h)                     \
   71|      4|{                                                                              \
   72|      4|	memset(h, 0, sizeof(*h));                                              \
   73|      4|}                                                                              \

typesafe_hash_grow:
   84|  1.32k|{
   85|  1.32k|	uint32_t newsize = head->count, i, j;
   86|  1.32k|	uint8_t newshift, delta;
   87|       |
   88|       |	/* note hash_grow is called after head->count++, so newsize is
   89|       |	 * guaranteed to be >= 1.  So the minimum argument to builtin_ctz
   90|       |	 * below is 2, which returns 1, and that makes newshift >= 2.
   91|       |	 *
   92|       |	 * Calling hash_grow with a zero head->count would result in a
   93|       |	 * malformed hash table that has tabshift == 1.
   94|       |	 */
   95|  1.32k|	assert(head->count > 0);
  ------------------
  |  |   51|  1.32k|	({                                                                     \
  |  |   52|  1.32k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  1.32k|			(used)) = {                                            \
  |  |   54|  1.32k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  1.32k|	{                                                                      \
  |  |  |  |  284|  1.32k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  1.32k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  1.32k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  1.32k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  1.32k|	}                                                                      \
  |  |  ------------------
  |  |   55|  1.32k|			.expr = #expr_,                                        \
  |  |   56|  1.32k|		};                                                             \
  |  |   57|  1.32k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  1.32k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  1.32k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  1.32k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  1.32k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 1.32k]
  |  |  |  Branch (58:24): [True: 1.32k, False: 0]
  |  |  ------------------
  |  |   59|  1.32k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  1.32k|	})
  ------------------
   96|       |
   97|  1.32k|	hash_consistency_check(head);
   98|       |
   99|  1.32k|	newsize |= newsize >> 1;
  100|  1.32k|	newsize |= newsize >> 2;
  101|  1.32k|	newsize |= newsize >> 4;
  102|  1.32k|	newsize |= newsize >> 8;
  103|  1.32k|	newsize |= newsize >> 16;
  104|  1.32k|	newsize++;
  105|  1.32k|	newshift = __builtin_ctz(newsize) + 1;
  106|       |
  107|  1.32k|	if (head->maxshift && newshift > head->maxshift)
  ------------------
  |  Branch (107:6): [True: 0, False: 1.32k]
  |  Branch (107:24): [True: 0, False: 0]
  ------------------
  108|      0|		newshift = head->maxshift;
  109|  1.32k|	if (newshift == head->tabshift)
  ------------------
  |  Branch (109:6): [True: 0, False: 1.32k]
  ------------------
  110|      0|		return;
  111|  1.32k|	newsize = _HASH_SIZE(newshift);
  ------------------
  |  |  797|  1.32k|	((1U << (tabshift)) >> 1)
  ------------------
  112|       |
  113|  1.32k|	head->entries = XREALLOC(MTYPE_TYPEDHASH_BUCKET, head->entries,
  ------------------
  |  |  166|  1.32k|#define XREALLOC(mtype, ptr, size)	qrealloc(mtype, ptr, size)
  ------------------
  114|  1.32k|			sizeof(head->entries[0]) * newsize);
  115|  1.32k|	memset(head->entries + HASH_SIZE(*head), 0,
  ------------------
  |  |  799|  1.32k|	_HASH_SIZE((head).tabshift)
  |  |  ------------------
  |  |  |  |  797|  1.32k|	((1U << (tabshift)) >> 1)
  |  |  ------------------
  ------------------
  116|  1.32k|			sizeof(head->entries[0]) *
  117|  1.32k|				(newsize - HASH_SIZE(*head)));
  ------------------
  |  |  799|  1.32k|	_HASH_SIZE((head).tabshift)
  |  |  ------------------
  |  |  |  |  797|  1.32k|	((1U << (tabshift)) >> 1)
  |  |  ------------------
  ------------------
  118|       |
  119|  1.32k|	delta = newshift - head->tabshift;
  120|       |
  121|  1.32k|	i = HASH_SIZE(*head);
  ------------------
  |  |  799|  1.32k|	_HASH_SIZE((head).tabshift)
  |  |  ------------------
  |  |  |  |  797|  1.32k|	((1U << (tabshift)) >> 1)
  |  |  ------------------
  ------------------
  122|  1.32k|	if (i == 0)
  ------------------
  |  Branch (122:6): [True: 392, False: 936]
  ------------------
  123|    392|		goto out;
  124|  12.6k|	do {
  125|  12.6k|		struct thash_item **apos, *item;
  126|       |
  127|  12.6k|		i--;
  128|  12.6k|		apos = &head->entries[i];
  129|       |
  130|  37.9k|		for (j = 0; j < (1U << delta); j++) {
  ------------------
  |  Branch (130:15): [True: 25.3k, False: 12.6k]
  ------------------
  131|  25.3k|			item = *apos;
  132|  25.3k|			*apos = NULL;
  133|       |
  134|  25.3k|			head->entries[(i << delta) + j] = item;
  135|  25.3k|			apos = &head->entries[(i << delta) + j];
  136|       |
  137|  37.0k|			while ((item = *apos)) {
  ------------------
  |  Branch (137:11): [True: 16.2k, False: 20.8k]
  ------------------
  138|  16.2k|				uint32_t midbits;
  139|  16.2k|				midbits = _HASH_KEY(newshift, item->hashval);
  ------------------
  |  |  801|  16.2k|	({                                                                     \
  |  |  802|  16.2k|		assume((tabshift) >= 2 && (tabshift) <= 33);                   \
  |  |  803|  16.2k|		(val) >> (33 - (tabshift));                                    \
  |  |  804|  16.2k|	})
  ------------------
  140|  16.2k|				midbits &= (1 << delta) - 1;
  141|  16.2k|				if (midbits > j)
  ------------------
  |  Branch (141:9): [True: 4.48k, False: 11.7k]
  ------------------
  142|  4.48k|					break;
  143|  11.7k|				apos = &item->next;
  144|  11.7k|			}
  145|  25.3k|		}
  146|  12.6k|	} while (i > 0);
  ------------------
  |  Branch (146:11): [True: 11.7k, False: 936]
  ------------------
  147|       |
  148|  1.32k|out:
  149|  1.32k|	head->tabshift = newshift;
  150|  1.32k|	hash_consistency_check(head);
  151|  1.32k|}

libfrr.c:log_args_init:
  372|      1|macro_inline void prefix ## _init(struct prefix##_head *h)                     \
  373|      1|{                                                                              \
  374|      1|	memset(h, 0, sizeof(*h));                                              \
  375|      1|	h->dh.hitem.prev = &h->dh.hitem;                                       \
  376|      1|	h->dh.hitem.next = &h->dh.hitem;                                       \
  377|      1|}                                                                              \
qobj.c:qobj_nodes_find:
   80|      4|				   const type *item)                           \
   81|      4|{                                                                              \
   82|      4|	return (type *)prefix ## _const_find(h, item);                         \
   83|      4|}                                                                              \
qobj.c:qobj_nodes_init:
  832|      1|macro_inline void prefix ## _init(struct prefix##_head *h)                     \
  833|      1|{                                                                              \
  834|      1|	memset(h, 0, sizeof(*h));                                              \
  835|      1|}                                                                              \
table.c:rn_hash_node_init:
  832|  8.15k|macro_inline void prefix ## _init(struct prefix##_head *h)                     \
  833|  8.15k|{                                                                              \
  834|  8.15k|	memset(h, 0, sizeof(*h));                                              \
  835|  8.15k|}                                                                              \
table.c:rn_hash_node_find:
   80|  63.9k|				   const type *item)                           \
   81|  63.9k|{                                                                              \
   82|  63.9k|	return (type *)prefix ## _const_find(h, item);                         \
   83|  63.9k|}                                                                              \
event.c:event_list_init:
  186|      3|macro_inline void prefix ## _init(struct prefix##_head *h)                     \
  187|      3|{                                                                              \
  188|      3|	memset(h, 0, sizeof(*h));                                              \
  189|      3|	h->sh.first = _SLIST_LAST;                                             \
  ------------------
  |  |  154|      3|#define _SLIST_LAST &typesafe_slist_sentinel
  ------------------
  190|      3|	h->sh.last_next = &h->sh.first;                                        \
  191|      3|}                                                                              \
event.c:event_timer_list_init:
  511|      1|macro_inline void prefix ## _init(struct prefix##_head *h)                     \
  512|      1|{                                                                              \
  513|      1|	memset(h, 0, sizeof(*h));                                              \
  514|      1|}                                                                              \

vector_init:
   16|     65|{
   17|     65|	vector v = XCALLOC(MTYPE_VECTOR, sizeof(struct _vector));
  ------------------
  |  |  165|     65|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
   18|       |
   19|       |	/* allocate at least one slot */
   20|     65|	if (size == 0)
  ------------------
  |  Branch (20:6): [True: 0, False: 65]
  ------------------
   21|      0|		size = 1;
   22|       |
   23|     65|	v->alloced = size;
   24|     65|	v->active = 0;
   25|     65|	v->count = 0;
   26|     65|	v->index = XCALLOC(MTYPE_VECTOR_INDEX, sizeof(void *) * size);
  ------------------
  |  |  165|     65|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
   27|     65|	return v;
   28|     65|}
vector_ensure:
   54|     34|{
   55|     34|	if (v->alloced > num)
  ------------------
  |  Branch (55:6): [True: 27, False: 7]
  ------------------
   56|     27|		return;
   57|       |
   58|      7|	v->index = XREALLOC(MTYPE_VECTOR_INDEX, v->index,
  ------------------
  |  |  166|      7|#define XREALLOC(mtype, ptr, size)	qrealloc(mtype, ptr, size)
  ------------------
   59|      7|			    sizeof(void *) * (v->alloced * 2));
   60|      7|	memset(&v->index[v->alloced], 0, sizeof(void *) * v->alloced);
   61|      7|	v->alloced *= 2;
   62|       |
   63|      7|	if (v->alloced <= num)
  ------------------
  |  Branch (63:6): [True: 2, False: 5]
  ------------------
   64|      2|		vector_ensure(v, num);
   65|      7|}
vector_empty_slot:
   71|     16|{
   72|     16|	unsigned int i;
   73|       |
   74|     16|	if (v->active == v->count)
  ------------------
  |  Branch (74:6): [True: 16, False: 0]
  ------------------
   75|     16|		return v->active;
   76|       |
   77|      0|	if (v->active == 0)
  ------------------
  |  Branch (77:6): [True: 0, False: 0]
  ------------------
   78|      0|		return 0;
   79|       |
   80|      0|	for (i = 0; i < v->active; i++)
  ------------------
  |  Branch (80:14): [True: 0, False: 0]
  ------------------
   81|      0|		if (v->index[i] == 0)
  ------------------
  |  Branch (81:7): [True: 0, False: 0]
  ------------------
   82|      0|			return i;
   83|       |
   84|      0|	return i;
   85|      0|}
vector_set:
   89|     16|{
   90|     16|	unsigned int i;
   91|       |
   92|     16|	i = vector_empty_slot(v);
   93|     16|	vector_ensure(v, i);
   94|       |
   95|     16|	if (v->index[i])
  ------------------
  |  Branch (95:6): [True: 0, False: 16]
  ------------------
   96|      0|		v->count--;
   97|     16|	if (val)
  ------------------
  |  Branch (97:6): [True: 16, False: 0]
  ------------------
   98|     16|		v->count++;
   99|     16|	v->index[i] = val;
  100|       |
  101|     16|	if (v->active <= i)
  ------------------
  |  Branch (101:6): [True: 16, False: 0]
  ------------------
  102|     16|		v->active = i + 1;
  103|       |
  104|     16|	return i;
  105|     16|}
vector_set_index:
  109|     16|{
  110|     16|	vector_ensure(v, i);
  111|       |
  112|     16|	if (v->index[i])
  ------------------
  |  Branch (112:6): [True: 0, False: 16]
  ------------------
  113|      0|		v->count--;
  114|     16|	if (val)
  ------------------
  |  Branch (114:6): [True: 16, False: 0]
  ------------------
  115|     16|		v->count++;
  116|     16|	v->index[i] = val;
  117|       |
  118|     16|	if (v->active <= i)
  ------------------
  |  Branch (118:6): [True: 5, False: 11]
  ------------------
  119|      5|		v->active = i + 1;
  120|       |
  121|     16|	return i;
  122|     16|}

vrf_lookup_by_name:
   65|      4|{
   66|      4|	struct vrf vrf;
   67|      4|	strlcpy(vrf.name, name, sizeof(vrf.name));
   68|      4|	return (RB_FIND(vrf_name_head, &vrfs_by_name, &vrf));
  ------------------
  |  |  511|      4|#define RB_FIND(_name, _head, _key)	_name##_RB_FIND(_head, _key)
  ------------------
   69|      4|}
vrf_get:
  115|      3|{
  116|      3|	struct vrf *vrf = NULL;
  117|      3|	int new = 0;
  118|       |
  119|       |	/* Nothing to see, move along here */
  120|      3|	if (!name && vrf_id == VRF_UNKNOWN)
  ------------------
  |  |   21|      0|#define VRF_UNKNOWN UINT32_MAX
  ------------------
  |  Branch (120:6): [True: 0, False: 3]
  |  Branch (120:15): [True: 0, False: 0]
  ------------------
  121|      0|		return NULL;
  122|       |
  123|       |	/* attempt to find already available VRF
  124|       |	 */
  125|      3|	if (name)
  ------------------
  |  Branch (125:6): [True: 3, False: 0]
  ------------------
  126|      3|		vrf = vrf_lookup_by_name(name);
  127|      3|	if (vrf && vrf_id != VRF_UNKNOWN
  ------------------
  |  |   21|      5|#define VRF_UNKNOWN UINT32_MAX
  ------------------
  |  Branch (127:6): [True: 2, False: 1]
  |  Branch (127:13): [True: 2, False: 0]
  ------------------
  128|      2|	    && vrf->vrf_id != VRF_UNKNOWN
  ------------------
  |  |   21|      5|#define VRF_UNKNOWN UINT32_MAX
  ------------------
  |  Branch (128:9): [True: 2, False: 0]
  ------------------
  129|      2|	    && vrf->vrf_id != vrf_id) {
  ------------------
  |  Branch (129:9): [True: 0, False: 2]
  ------------------
  130|      0|		zlog_debug("VRF_GET: avoid %s creation(%u), same name exists (%u)",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  131|      0|			   name, vrf_id, vrf->vrf_id);
  132|      0|		return NULL;
  133|      0|	}
  134|       |	/* Try to find VRF both by ID and name */
  135|      3|	if (!vrf && vrf_id != VRF_UNKNOWN)
  ------------------
  |  |   21|      1|#define VRF_UNKNOWN UINT32_MAX
  ------------------
  |  Branch (135:6): [True: 1, False: 2]
  |  Branch (135:14): [True: 1, False: 0]
  ------------------
  136|      1|		vrf = vrf_lookup_by_id(vrf_id);
  137|       |
  138|      3|	if (vrf == NULL) {
  ------------------
  |  Branch (138:6): [True: 1, False: 2]
  ------------------
  139|      1|		vrf = XCALLOC(MTYPE_VRF, sizeof(struct vrf));
  ------------------
  |  |  165|      1|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  140|      1|		vrf->vrf_id = VRF_UNKNOWN;
  ------------------
  |  |   21|      1|#define VRF_UNKNOWN UINT32_MAX
  ------------------
  141|      1|		QOBJ_REG(vrf, vrf);
  ------------------
  |  |   88|      1|#define QOBJ_REG(n, structname) qobj_reg(&n->qobj_node, &qobj_t_##structname)
  ------------------
  142|      1|		new = 1;
  143|       |
  144|      1|		if (debug_vrf)
  ------------------
  |  Branch (144:7): [True: 0, False: 1]
  ------------------
  145|      0|			zlog_debug("VRF(%u) %s is created.", vrf_id,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  146|      1|				   (name) ? name : "(NULL)");
  147|      1|	}
  148|       |
  149|       |	/* Set identifier */
  150|      3|	if (vrf_id != VRF_UNKNOWN && vrf->vrf_id == VRF_UNKNOWN) {
  ------------------
  |  |   21|      6|#define VRF_UNKNOWN UINT32_MAX
  ------------------
              	if (vrf_id != VRF_UNKNOWN && vrf->vrf_id == VRF_UNKNOWN) {
  ------------------
  |  |   21|      3|#define VRF_UNKNOWN UINT32_MAX
  ------------------
  |  Branch (150:6): [True: 3, False: 0]
  |  Branch (150:31): [True: 1, False: 2]
  ------------------
  151|      1|		vrf->vrf_id = vrf_id;
  152|      1|		RB_INSERT(vrf_id_head, &vrfs_by_id, vrf);
  ------------------
  |  |  509|      1|#define RB_INSERT(_name, _head, _elm)	_name##_RB_INSERT(_head, _elm)
  ------------------
  153|      1|	}
  154|       |
  155|       |	/* Set name */
  156|      3|	if (name && vrf->name[0] != '\0' && strcmp(name, vrf->name)) {
  ------------------
  |  Branch (156:6): [True: 3, False: 0]
  |  Branch (156:14): [True: 2, False: 1]
  |  Branch (156:38): [True: 0, False: 2]
  ------------------
  157|       |		/* update the vrf name */
  158|      0|		RB_REMOVE(vrf_name_head, &vrfs_by_name, vrf);
  ------------------
  |  |  510|      0|#define RB_REMOVE(_name, _head, _elm)	_name##_RB_REMOVE(_head, _elm)
  ------------------
  159|      0|		strlcpy(vrf->data.l.netns_name,
  160|      0|			name, NS_NAMSIZ);
  ------------------
  |  |   31|      0|#define NS_NAMSIZ 36
  ------------------
  161|      0|		strlcpy(vrf->name, name, sizeof(vrf->name));
  162|      0|		RB_INSERT(vrf_name_head, &vrfs_by_name, vrf);
  ------------------
  |  |  509|      0|#define RB_INSERT(_name, _head, _elm)	_name##_RB_INSERT(_head, _elm)
  ------------------
  163|      3|	} else if (name && vrf->name[0] == '\0') {
  ------------------
  |  Branch (163:13): [True: 3, False: 0]
  |  Branch (163:21): [True: 1, False: 2]
  ------------------
  164|      1|		strlcpy(vrf->name, name, sizeof(vrf->name));
  165|      1|		RB_INSERT(vrf_name_head, &vrfs_by_name, vrf);
  ------------------
  |  |  509|      1|#define RB_INSERT(_name, _head, _elm)	_name##_RB_INSERT(_head, _elm)
  ------------------
  166|      1|	}
  167|      3|	if (new &&vrf_master.vrf_new_hook)
  ------------------
  |  Branch (167:6): [True: 1, False: 2]
  |  Branch (167:12): [True: 1, False: 0]
  ------------------
  168|      1|		(*vrf_master.vrf_new_hook)(vrf);
  169|       |
  170|      3|	return vrf;
  171|      3|}
vrf_lookup_by_id:
  261|      5|{
  262|      5|	struct vrf vrf;
  263|      5|	vrf.vrf_id = vrf_id;
  264|      5|	return (RB_FIND(vrf_id_head, &vrfs_by_id, &vrf));
  ------------------
  |  |  511|      5|#define RB_FIND(_name, _head, _key)	_name##_RB_FIND(_head, _key)
  ------------------
  265|      5|}
vrf_enable:
  275|      1|{
  276|      1|	if (vrf_is_enabled(vrf))
  ------------------
  |  Branch (276:6): [True: 0, False: 1]
  ------------------
  277|      0|		return 1;
  278|       |
  279|      1|	if (debug_vrf)
  ------------------
  |  Branch (279:6): [True: 0, False: 1]
  ------------------
  280|      0|		zlog_debug("VRF %s(%u) is enabled.", vrf->name, vrf->vrf_id);
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  281|       |
  282|      1|	SET_FLAG(vrf->status, VRF_ACTIVE);
  ------------------
  |  |  395|      1|#define SET_FLAG(V,F)        (V) |= (F)
  ------------------
  283|       |
  284|      1|	if (vrf_master.vrf_enable_hook)
  ------------------
  |  Branch (284:6): [True: 1, False: 0]
  ------------------
  285|      1|		(*vrf_master.vrf_enable_hook)(vrf);
  286|       |
  287|       |	/*
  288|       |	 * If we have any nexthop group entries that
  289|       |	 * are awaiting vrf initialization then
  290|       |	 * let's let people know about it
  291|       |	 */
  292|      1|	nexthop_group_enable_vrf(vrf);
  293|       |
  294|      1|	return 1;
  295|      1|}
vrf_bitmap_init:
  388|     96|{
  389|     96|	return hash_create_size(32, vrf_hash_bitmap_key, vrf_hash_bitmap_cmp,
  390|     96|				"VRF BIT HASH");
  391|     96|}
vrf_bitmap_check:
  427|  2.61k|{
  428|  2.61k|	struct vrf_bit_set lookup = { .vrf_id = vrf_id };
  429|  2.61k|	struct hash *vrf_hash = bmap;
  430|  2.61k|	struct vrf_bit_set *bit;
  431|       |
  432|  2.61k|	if (vrf_hash == NULL || vrf_id == VRF_UNKNOWN)
  ------------------
  |  |   21|  2.61k|#define VRF_UNKNOWN UINT32_MAX
  ------------------
  |  Branch (432:6): [True: 0, False: 2.61k]
  |  Branch (432:26): [True: 0, False: 2.61k]
  ------------------
  433|      0|		return 0;
  434|       |
  435|  2.61k|	bit = hash_lookup(vrf_hash, &lookup);
  436|  2.61k|	if (bit)
  ------------------
  |  Branch (436:6): [True: 0, False: 2.61k]
  ------------------
  437|      0|		return bit->set;
  438|       |
  439|  2.61k|	return 0;
  440|  2.61k|}
vrf_init:
  469|      1|{
  470|      1|	struct vrf *default_vrf;
  471|       |
  472|       |	/* initialise NS, in case VRF backend if NETNS */
  473|      1|	ns_init();
  474|      1|	if (debug_vrf)
  ------------------
  |  Branch (474:6): [True: 0, False: 1]
  ------------------
  475|      0|		zlog_debug("%s: Initializing VRF subsystem", __func__);
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  476|       |
  477|      1|	vrf_master.vrf_new_hook = create;
  478|      1|	vrf_master.vrf_enable_hook = enable;
  479|      1|	vrf_master.vrf_disable_hook = disable;
  480|      1|	vrf_master.vrf_delete_hook = destroy;
  481|       |
  482|       |	/* The default VRF always exists. */
  483|      1|	default_vrf = vrf_get(VRF_DEFAULT, VRF_DEFAULT_NAME);
  ------------------
  |  |  254|      1|#define VRF_DEFAULT 0
  ------------------
              	default_vrf = vrf_get(VRF_DEFAULT, VRF_DEFAULT_NAME);
  ------------------
  |  |  260|      1|#define VRF_DEFAULT_NAME    vrf_get_default_name()
  ------------------
  484|      1|	if (!default_vrf) {
  ------------------
  |  Branch (484:6): [True: 0, False: 1]
  ------------------
  485|      0|		flog_err(EC_LIB_VRF_START,
  ------------------
  |  |  136|      0|#define flog_err(ferr_id, format, ...) 0
  ------------------
  486|      0|			 "vrf_init: failed to create the default VRF!");
  487|      0|		exit(1);
  488|      0|	}
  489|      1|	if (vrf_is_backend_netns()) {
  ------------------
  |  Branch (489:6): [True: 0, False: 1]
  ------------------
  490|      0|		struct ns *ns;
  491|       |
  492|      0|		strlcpy(default_vrf->data.l.netns_name,
  493|      0|			VRF_DEFAULT_NAME, NS_NAMSIZ);
  ------------------
  |  |  260|      0|#define VRF_DEFAULT_NAME    vrf_get_default_name()
  ------------------
              			VRF_DEFAULT_NAME, NS_NAMSIZ);
  ------------------
  |  |   31|      0|#define NS_NAMSIZ 36
  ------------------
  494|      0|		ns = ns_lookup(NS_DEFAULT);
  ------------------
  |  |  149|      0|#define NS_DEFAULT 0
  ------------------
  495|      0|		ns->vrf_ctxt = default_vrf;
  496|      0|		default_vrf->ns_ctxt = ns;
  497|      0|	}
  498|       |
  499|       |	/* Enable the default VRF. */
  500|      1|	if (!vrf_enable(default_vrf)) {
  ------------------
  |  Branch (500:6): [True: 0, False: 1]
  ------------------
  501|      0|		flog_err(EC_LIB_VRF_START,
  ------------------
  |  |  136|      0|#define flog_err(ferr_id, format, ...) 0
  ------------------
  502|      0|			 "vrf_init: failed to enable the default VRF!");
  503|      0|		exit(1);
  504|      0|	}
  505|       |
  506|      1|	cmd_variable_handler_register(vrf_var_handlers);
  507|      1|}
vrf_is_backend_netns:
  575|      1|{
  576|      1|	return (vrf_backend == VRF_BACKEND_NETNS);
  577|      1|}
vrf_get_backend:
  580|      1|{
  581|      1|	if (!vrf_backend_configured)
  ------------------
  |  Branch (581:6): [True: 1, False: 0]
  ------------------
  582|      1|		return VRF_BACKEND_UNKNOWN;
  583|      0|	return vrf_backend;
  584|      1|}
vrf_install_commands:
  735|      1|{
  736|      1|	install_node(&vrf_debug_node);
  737|       |
  738|      1|	install_element(CONFIG_NODE, &vrf_debug_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  739|      1|	install_element(ENABLE_NODE, &vrf_debug_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  740|      1|	install_element(CONFIG_NODE, &no_vrf_debug_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  741|      1|	install_element(ENABLE_NODE, &no_vrf_debug_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  742|      1|}
vrf_get_default_name:
  760|      3|{
  761|      3|	return vrf_default_name;
  762|      3|}
vrf.c:vrf_id_compare:
   72|      4|{
   73|      4|	return (a->vrf_id - b->vrf_id);
   74|      4|}
vrf.c:vrf_name_compare:
   77|      3|{
   78|      3|	return strcmp(a->name, b->name);
   79|      3|}

vrf.c:vrf_is_enabled:
  136|      1|{
  137|      1|	return vrf && CHECK_FLAG(vrf->status, VRF_ACTIVE);
  ------------------
  |  |  394|      1|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (137:9): [True: 1, False: 0]
  ------------------
  138|      1|}

vty_init:
 3865|      1|{
 3866|       |	/* For further configuration read, preserve current directory. */
 3867|      1|	vty_save_cwd();
 3868|       |
 3869|      1|	vty_master = master_thread;
 3870|       |
 3871|      1|	atexit(vty_stdio_atexit);
 3872|       |
 3873|       |	/* Install bgp top node. */
 3874|      1|	install_node(&vty_node);
 3875|       |
 3876|      1|	install_element(VIEW_NODE, &config_who_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3877|      1|	install_element(VIEW_NODE, &show_history_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3878|      1|	install_element(CONFIG_NODE, &line_vty_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3879|      1|	install_element(CONFIG_NODE, &service_advanced_vty_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3880|      1|	install_element(CONFIG_NODE, &no_service_advanced_vty_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3881|      1|	install_element(CONFIG_NODE, &show_history_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3882|      1|	install_element(CONFIG_NODE, &log_commands_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3883|       |
 3884|      1|	if (do_command_logging) {
  ------------------
  |  Branch (3884:6): [True: 0, False: 1]
  ------------------
 3885|      0|		vty_log_commands = true;
 3886|      0|		vty_log_commands_perm = true;
 3887|      0|	}
 3888|       |
 3889|      1|	install_element(ENABLE_NODE, &terminal_monitor_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3890|      1|	install_element(ENABLE_NODE, &terminal_no_monitor_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3891|      1|	install_element(ENABLE_NODE, &no_terminal_monitor_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3892|       |
 3893|      1|	install_default(VTY_NODE);
 3894|      1|	install_element(VTY_NODE, &exec_timeout_min_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3895|      1|	install_element(VTY_NODE, &exec_timeout_sec_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3896|      1|	install_element(VTY_NODE, &no_exec_timeout_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3897|      1|	install_element(VTY_NODE, &vty_access_class_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3898|      1|	install_element(VTY_NODE, &no_vty_access_class_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3899|      1|	install_element(VTY_NODE, &vty_login_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3900|      1|	install_element(VTY_NODE, &no_vty_login_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3901|      1|	install_element(VTY_NODE, &vty_ipv6_access_class_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3902|      1|	install_element(VTY_NODE, &no_vty_ipv6_access_class_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3903|      1|}
vty.c:vty_stdio_reset:
 1785|      1|{
 1786|      1|	if (stdio_vty) {
  ------------------
  |  Branch (1786:6): [True: 0, False: 1]
  ------------------
 1787|      0|		if (stdio_termios)
  ------------------
  |  Branch (1787:7): [True: 0, False: 0]
  ------------------
 1788|      0|			tcsetattr(0, TCSANOW, &stdio_orig_termios);
 1789|      0|		stdio_termios = false;
 1790|       |
 1791|      0|		stdio_vty = NULL;
 1792|       |
 1793|      0|		if (stdio_vty_atclose)
  ------------------
  |  Branch (1793:7): [True: 0, False: 0]
  ------------------
 1794|      0|			stdio_vty_atclose(isexit);
 1795|       |		stdio_vty_atclose = NULL;
 1796|      0|	}
 1797|      1|}
vty.c:vty_save_cwd:
 3411|      1|{
 3412|      1|	char *c;
 3413|       |
 3414|      1|	c = getcwd(vty_cwd, sizeof(vty_cwd));
 3415|       |
 3416|      1|	if (!c) {
  ------------------
  |  Branch (3416:6): [True: 0, False: 1]
  ------------------
 3417|       |		/*
 3418|       |		 * At this point if these go wrong, more than likely
 3419|       |		 * the whole world is coming down around us
 3420|       |		 * Hence not worrying about it too much.
 3421|       |		 */
 3422|      0|		if (chdir(SYSCONFDIR)) {
  ------------------
  |  Branch (3422:7): [True: 0, False: 0]
  ------------------
 3423|      0|			flog_err_sys(EC_LIB_SYSTEM_CALL,
  ------------------
  |  |  138|      0|#define flog_err_sys(ferr_id, format, ...) 0
  ------------------
 3424|      0|				     "Failure to chdir to %s, errno: %d",
 3425|      0|				     SYSCONFDIR, errno);
 3426|      0|			exit(-1);
 3427|      0|		}
 3428|      0|		if (getcwd(vty_cwd, sizeof(vty_cwd)) == NULL) {
  ------------------
  |  Branch (3428:7): [True: 0, False: 0]
  ------------------
 3429|      0|			flog_err_sys(EC_LIB_SYSTEM_CALL,
  ------------------
  |  |  138|      0|#define flog_err_sys(ferr_id, format, ...) 0
  ------------------
 3430|      0|				     "Failure to getcwd, errno: %d", errno);
 3431|      0|			exit(-1);
 3432|      0|		}
 3433|      0|	}
 3434|      1|}
vty.c:vty_stdio_atexit:
 1800|      1|{
 1801|      1|	vty_stdio_reset(1);
 1802|      1|}

workqueue_cmd_init:
  191|      1|{
  192|      1|	install_element(VIEW_NODE, &show_work_queues_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  193|      1|}

xref_block_add:
  113|      4|{
  114|      4|	const struct xref * const *xrefp;
  115|       |
  116|      4|	*xref_block_last = block;
  117|      4|	xref_block_last = &block->next;
  118|       |
  119|  11.4k|	for (xrefp = block->start; xrefp < block->stop; xrefp++)
  ------------------
  |  Branch (119:29): [True: 11.4k, False: 4]
  ------------------
  120|  11.4k|		xref_add_one(*xrefp);
  121|      4|}
xref.c:xref_add_one:
   58|  11.4k|{
   59|  11.4k|	SHA256_CTX sha;
   60|  11.4k|	struct xrefdata *xrefdata;
   61|       |
   62|  11.4k|	const char *filename, *p, *q;
   63|  11.4k|	uint8_t hash[32], *h = hash;
   64|  11.4k|	uint32_t be_val;
   65|  11.4k|	int bitpos;
   66|       |
   67|  11.4k|	if (!xref || !xref->xrefdata)
  ------------------
  |  Branch (67:6): [True: 0, False: 11.4k]
  |  Branch (67:15): [True: 11.4k, False: 0]
  ------------------
   68|  11.4k|		return;
   69|       |
   70|      0|	xrefdata = xref->xrefdata;
   71|      0|	xrefdata->xref = xref;
   72|       |
   73|      0|	if (!xrefdata->hashstr)
  ------------------
  |  Branch (73:6): [True: 0, False: 0]
  ------------------
   74|      0|		return;
   75|       |
   76|       |	/* as far as the unique ID is concerned, only use the last
   77|       |	 * directory name + filename, e.g. "bgpd/bgp_route.c".  This
   78|       |	 * gives a little leeway in moving things and avoids IDs being
   79|       |	 * screwed up by out of tree builds or absolute pathnames.
   80|       |	 */
   81|      0|	filename = xref->file;
   82|      0|	p = strrchr(filename, '/');
   83|      0|	if (p) {
  ------------------
  |  Branch (83:6): [True: 0, False: 0]
  ------------------
   84|      0|		q = memrchr(filename, '/', p - filename);
   85|      0|		if (q)
  ------------------
  |  Branch (85:7): [True: 0, False: 0]
  ------------------
   86|      0|			filename = q + 1;
   87|      0|	}
   88|       |
   89|      0|	SHA256_Init(&sha);
   90|      0|	SHA256_Update(&sha, filename, strlen(filename));
   91|      0|	SHA256_Update(&sha, xrefdata->hashstr,
   92|      0|		      strlen(xrefdata->hashstr));
   93|      0|	be_val = htonl(xrefdata->hashu32[0]);
   94|      0|	SHA256_Update(&sha, &be_val, sizeof(be_val));
   95|      0|	be_val = htonl(xrefdata->hashu32[1]);
   96|      0|	SHA256_Update(&sha, &be_val, sizeof(be_val));
   97|      0|	SHA256_Final(hash, &sha);
   98|       |
   99|      0|	bitpos = -1;
  100|      0|	base32(&h, &bitpos, &xrefdata->uid[0], 5);
  101|      0|	xrefdata->uid[5] = '-';
  102|      0|	base32(&h, &bitpos, &xrefdata->uid[6], 5);
  103|       |
  104|      0|	xrefdata_uid_add(&xrefdata_uid, xrefdata);
  105|      0|}

yang_module_embed:
   24|     28|{
   25|       |	embed->next = NULL;
   26|     28|	*embedupd = embed;
   27|     28|	embedupd = &embed->next;
   28|     28|}

zclient_new:
   57|      2|{
   58|      2|	struct zclient *zclient;
   59|      2|	size_t stream_size =
   60|      2|		MAX(ZEBRA_MAX_PACKET_SIZ, sizeof(struct zapi_route));
  ------------------
  |  Branch (60:3): [True: 2, Folded]
  ------------------
   61|       |
   62|      2|	zclient = XCALLOC(MTYPE_ZCLIENT, sizeof(struct zclient));
  ------------------
  |  |  165|      2|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
   63|       |
   64|      2|	zclient->ibuf = stream_new(stream_size);
   65|      2|	zclient->obuf = stream_new(stream_size);
   66|      2|	zclient->wb = buffer_new(0);
   67|      2|	zclient->master = master;
   68|       |
   69|      2|	zclient->handlers = handlers;
   70|      2|	zclient->n_handlers = n_handlers;
   71|       |
   72|      2|	zclient->receive_notify = opt->receive_notify;
   73|      2|	zclient->synchronous = opt->synchronous;
   74|       |
   75|      2|	return zclient;
   76|      2|}
redist_add_instance:
  112|      3|{
  113|      3|	unsigned short *in;
  114|       |
  115|      3|	red->enabled = 1;
  116|       |
  117|      3|	if (!red->instances)
  ------------------
  |  Branch (117:6): [True: 3, False: 0]
  ------------------
  118|      3|		red->instances = list_new();
  119|       |
  120|      3|	in = XMALLOC(MTYPE_REDIST_INST, sizeof(unsigned short));
  ------------------
  |  |  164|      3|#define XMALLOC(mtype, size)		qmalloc(mtype, size)
  ------------------
  121|      3|	*in = instance;
  122|      3|	listnode_add(red->instances, in);
  123|      3|}
zclient_init:
  719|      1|{
  720|      1|	int afi, i;
  721|       |
  722|       |	/* Set -1 to the default socket value. */
  723|      1|	zclient->sock = -1;
  724|      1|	zclient->privs = privs;
  725|       |
  726|       |	/* Clear redistribution flags. */
  727|      4|	for (afi = AFI_IP; afi < AFI_MAX; afi++)
  ------------------
  |  Branch (727:21): [True: 3, False: 1]
  ------------------
  728|     96|		for (i = 0; i < ZEBRA_ROUTE_MAX; i++)
  ------------------
  |  |   39|     96|#define ZEBRA_ROUTE_MAX                  31
  ------------------
  |  Branch (728:15): [True: 93, False: 3]
  ------------------
  729|     93|			zclient->redist[afi][i] = vrf_bitmap_init();
  730|       |
  731|       |	/* Set unwanted redistribute route.  bgpd does not need BGP route
  732|       |	   redistribution. */
  733|      1|	zclient->redist_default = redist_default;
  734|      1|	zclient->instance = instance;
  735|       |	/* Pending: make afi(s) an arg. */
  736|      4|	for (afi = AFI_IP; afi < AFI_MAX; afi++) {
  ------------------
  |  Branch (736:21): [True: 3, False: 1]
  ------------------
  737|      3|		redist_add_instance(&zclient->mi_redist[afi][redist_default],
  738|      3|				    instance);
  739|       |
  740|       |		/* Set default-information redistribute to zero. */
  741|      3|		zclient->default_information[afi] = vrf_bitmap_init();
  742|      3|	}
  743|       |
  744|      1|	if (zclient_debug)
  ------------------
  |  Branch (744:6): [True: 0, False: 1]
  ------------------
  745|      0|		zlog_debug("scheduling zclient connection");
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  746|       |
  747|      1|	zclient_event(ZCLIENT_SCHEDULE, zclient);
  748|      1|}
zclient.c:zclient_event:
 4276|      1|{
 4277|      1|	switch (event) {
  ------------------
  |  Branch (4277:10): [True: 1, False: 0]
  ------------------
 4278|      1|	case ZCLIENT_SCHEDULE:
  ------------------
  |  Branch (4278:2): [True: 1, False: 0]
  ------------------
 4279|      1|		event_add_event(zclient->master, zclient_connect, zclient, 0,
  ------------------
  |  |  219|      1|#define event_add_event(m, f, a, v, t) 0
  ------------------
 4280|      1|				&zclient->t_connect);
 4281|      1|		break;
 4282|      0|	case ZCLIENT_CONNECT:
  ------------------
  |  Branch (4282:2): [True: 0, False: 1]
  ------------------
 4283|      0|		if (zclient_debug)
  ------------------
  |  Branch (4283:7): [True: 0, False: 0]
  ------------------
 4284|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 4285|      0|				"zclient connect failures: %d schedule interval is now %d",
 4286|      0|				zclient->fail, zclient->fail < 3 ? 10 : 60);
 4287|      0|		event_add_timer(zclient->master, zclient_connect, zclient,
  ------------------
  |  |  216|      0|#define event_add_timer(m, f, a, v, t) 0
  ------------------
 4288|      0|				zclient->fail < 3 ? 10 : 60,
 4289|      0|				&zclient->t_connect);
 4290|      0|		break;
 4291|      0|	case ZCLIENT_READ:
  ------------------
  |  Branch (4291:2): [True: 0, False: 1]
  ------------------
 4292|      0|		zclient->t_read = NULL;
 4293|      0|		event_add_read(zclient->master, zclient_read, zclient,
  ------------------
  |  |  214|      0|#define event_add_read(m, f, a, v, t) 0
  ------------------
 4294|      0|			       zclient->sock, &zclient->t_read);
 4295|      0|		break;
 4296|      1|	}
 4297|      1|}

zlog_tls_buffer_init:
  256|      1|{
  257|      1|	struct zlog_tls *zlog_tls;
  258|      1|	char mmpath[MAXPATHLEN];
  259|      1|	int mmfd;
  260|      1|	size_t i;
  261|       |
  262|      1|	zlog_tls = zlog_tls_get();
  263|       |
  264|      1|	if (zlog_tls || zlog_tmpdirfd < 0)
  ------------------
  |  Branch (264:6): [True: 0, False: 1]
  |  Branch (264:18): [True: 0, False: 1]
  ------------------
  265|      0|		return;
  266|       |
  267|      1|	zlog_tls = XCALLOC(MTYPE_LOG_TLSBUF, sizeof(*zlog_tls));
  ------------------
  |  |  165|      1|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  268|     65|	for (i = 0; i < array_size(zlog_tls->msgp); i++)
  ------------------
  |  |  311|     65|#define array_size(ar) (sizeof(ar) / sizeof(ar[0]))
  ------------------
  |  Branch (268:14): [True: 64, False: 1]
  ------------------
  269|     64|		zlog_tls->msgp[i] = &zlog_tls->msgs[i];
  270|       |
  271|      1|	snprintfrr(mmpath, sizeof(mmpath), "logbuf.%jd", zlog_gettid());
  272|       |
  273|      1|	mmfd = openat(zlog_tmpdirfd, mmpath,
  274|      1|		      O_RDWR | O_CREAT | O_EXCL | O_CLOEXEC, 0600);
  275|      1|	if (mmfd < 0) {
  ------------------
  |  Branch (275:6): [True: 0, False: 1]
  ------------------
  276|      0|		zlog_err("failed to open thread log buffer \"%s\": %s",
  ------------------
  |  |  130|      0|#define zlog_err(...) 0
  ------------------
  277|      0|			 mmpath, strerror(errno));
  278|      0|		goto out_anon;
  279|      0|	}
  280|      1|	fchown(mmfd, zlog_uid, zlog_gid);
  281|       |
  282|      1|#ifdef HAVE_POSIX_FALLOCATE
  283|      1|	if (posix_fallocate(mmfd, 0, TLS_LOG_BUF_SIZE) != 0)
  ------------------
  |  |  157|      1|#define TLS_LOG_BUF_SIZE	8192
  ------------------
  |  Branch (283:6): [True: 0, False: 1]
  ------------------
  284|       |	/* note next statement is under above if() */
  285|      0|#endif
  286|      0|	if (ftruncate(mmfd, TLS_LOG_BUF_SIZE) < 0) {
  ------------------
  |  |  157|      0|#define TLS_LOG_BUF_SIZE	8192
  ------------------
  |  Branch (286:6): [True: 0, False: 0]
  ------------------
  287|      0|		zlog_err("failed to allocate thread log buffer \"%s\": %s",
  ------------------
  |  |  130|      0|#define zlog_err(...) 0
  ------------------
  288|      0|			 mmpath, strerror(errno));
  289|      0|		goto out_anon_unlink;
  290|      0|	}
  291|       |
  292|      1|	zlog_tls->mmbuf = mmap(NULL, TLS_LOG_BUF_SIZE, PROT_READ | PROT_WRITE,
  ------------------
  |  |  157|      1|#define TLS_LOG_BUF_SIZE	8192
  ------------------
  293|      1|			      MAP_SHARED, mmfd, 0);
  294|      1|	if (zlog_tls->mmbuf == MAP_FAILED) {
  ------------------
  |  Branch (294:6): [True: 0, False: 1]
  ------------------
  295|      0|		zlog_err("failed to mmap thread log buffer \"%s\": %s",
  ------------------
  |  |  130|      0|#define zlog_err(...) 0
  ------------------
  296|      0|			 mmpath, strerror(errno));
  297|      0|		goto out_anon_unlink;
  298|      0|	}
  299|      1|	zlog_tls->do_unlink = true;
  300|       |
  301|      1|	close(mmfd);
  302|      1|	zlog_tls_set(zlog_tls);
  303|      1|	return;
  304|       |
  305|      0|out_anon_unlink:
  306|      0|	unlinkat(zlog_tmpdirfd, mmpath, 0);
  307|      0|	close(mmfd);
  308|      0|out_anon:
  309|       |
  310|       |#ifndef MAP_ANONYMOUS
  311|       |#define MAP_ANONYMOUS MAP_ANON
  312|       |#endif
  313|      0|	zlog_tls->mmbuf = mmap(NULL, TLS_LOG_BUF_SIZE, PROT_READ | PROT_WRITE,
  ------------------
  |  |  157|      0|#define TLS_LOG_BUF_SIZE	8192
  ------------------
  314|      0|			      MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
  315|       |
  316|      0|	if (!zlog_tls->mmbuf) {
  ------------------
  |  Branch (316:6): [True: 0, False: 0]
  ------------------
  317|      0|		zlog_err("failed to anonymous-mmap thread log buffer: %s",
  ------------------
  |  |  130|      0|#define zlog_err(...) 0
  ------------------
  318|      0|			 strerror(errno));
  319|      0|		XFREE(MTYPE_LOG_TLSBUF, zlog_tls);
  ------------------
  |  |  170|      0|	do {                                                                   \
  |  |  171|      0|		qfree(mtype, ptr);                                             \
  |  |  172|      0|		ptr = NULL;                                                    \
  |  |  173|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  320|      0|		zlog_tls_set(NULL);
  321|      0|		return;
  322|      0|	}
  323|       |
  324|      0|	zlog_tls_set(zlog_tls);
  325|      0|}
zlog_set_prefix_ec:
  914|      1|{
  915|       |	atomic_store_explicit(&zlog_ec, enable, memory_order_relaxed);
  916|      1|}
zlog_set_prefix_xid:
  924|      1|{
  925|       |	atomic_store_explicit(&zlog_xid, enable, memory_order_relaxed);
  926|      1|}
zlog_target_replace:
  952|      3|{
  953|      3|	if (newzt)
  ------------------
  |  Branch (953:6): [True: 2, False: 1]
  ------------------
  954|      2|		zlog_targets_add_tail(&zlog_targets, newzt);
  955|      3|	if (oldzt)
  ------------------
  |  Branch (955:6): [True: 0, False: 3]
  ------------------
  956|      0|		zlog_targets_del(&zlog_targets, oldzt);
  957|      3|	return oldzt;
  958|      3|}
zlog_init:
  985|      1|{
  986|      1|	zlog_uid = uid;
  987|      1|	zlog_gid = gid;
  988|      1|	zlog_instance = instance;
  989|       |
  990|      1|	if (instance) {
  ------------------
  |  Branch (990:6): [True: 0, False: 1]
  ------------------
  991|      0|		snprintfrr(zlog_tmpdir, sizeof(zlog_tmpdir), "%s/%s-%d.%ld",
  992|      0|			   TMPBASEDIR, progname, instance, (long)getpid());
  ------------------
  |  |  971|      0|#define TMPBASEDIR "/var/tmp/frr"
  ------------------
  993|       |
  994|      0|		zlog_prefixsz = snprintfrr(zlog_prefix, sizeof(zlog_prefix),
  995|      0|					   "%s[%d]: ", protoname, instance);
  996|      1|	} else {
  997|      1|		snprintfrr(zlog_tmpdir, sizeof(zlog_tmpdir), "%s/%s.%ld",
  998|      1|			   TMPBASEDIR, progname, (long)getpid());
  ------------------
  |  |  971|      1|#define TMPBASEDIR "/var/tmp/frr"
  ------------------
  999|       |
 1000|      1|		zlog_prefixsz = snprintfrr(zlog_prefix, sizeof(zlog_prefix),
 1001|      1|					   "%s: ", protoname);
 1002|      1|	}
 1003|       |
 1004|      1|	if (mkdir(TMPBASEDIR, 0700) != 0) {
  ------------------
  |  |  971|      1|#define TMPBASEDIR "/var/tmp/frr"
  ------------------
  |  Branch (1004:6): [True: 0, False: 1]
  ------------------
 1005|      0|		if (errno != EEXIST) {
  ------------------
  |  Branch (1005:7): [True: 0, False: 0]
  ------------------
 1006|      0|			zlog_err("failed to mkdir \"%s\": %s",
  ------------------
  |  |  130|      0|#define zlog_err(...) 0
  ------------------
 1007|      0|				 TMPBASEDIR, strerror(errno));
 1008|      0|			goto out_warn;
 1009|      0|		}
 1010|      0|	}
 1011|      1|	chown(TMPBASEDIR, zlog_uid, zlog_gid);
  ------------------
  |  |  971|      1|#define TMPBASEDIR "/var/tmp/frr"
  ------------------
 1012|       |
 1013|      1|	if (mkdir(zlog_tmpdir, 0700) != 0) {
  ------------------
  |  Branch (1013:6): [True: 0, False: 1]
  ------------------
 1014|      0|		zlog_err("failed to mkdir \"%s\": %s",
  ------------------
  |  |  130|      0|#define zlog_err(...) 0
  ------------------
 1015|      0|			 zlog_tmpdir, strerror(errno));
 1016|      0|		goto out_warn;
 1017|      0|	}
 1018|       |
 1019|      1|#ifdef O_PATH
 1020|      1|	zlog_tmpdirfd = open(zlog_tmpdir,
 1021|      1|			     O_PATH | O_RDONLY | O_CLOEXEC);
 1022|       |#else
 1023|       |	zlog_tmpdirfd = open(zlog_tmpdir,
 1024|       |			     O_DIRECTORY | O_RDONLY | O_CLOEXEC);
 1025|       |#endif
 1026|      1|	if (zlog_tmpdirfd < 0) {
  ------------------
  |  Branch (1026:6): [True: 0, False: 1]
  ------------------
 1027|      0|		zlog_err("failed to open \"%s\": %s",
  ------------------
  |  |  130|      0|#define zlog_err(...) 0
  ------------------
 1028|      0|			 zlog_tmpdir, strerror(errno));
 1029|      0|		goto out_warn;
 1030|      0|	}
 1031|       |
 1032|      1|#ifdef AT_EMPTY_PATH
 1033|      1|	fchownat(zlog_tmpdirfd, "", zlog_uid, zlog_gid, AT_EMPTY_PATH);
 1034|       |#else
 1035|       |	chown(zlog_tmpdir, zlog_uid, zlog_gid);
 1036|       |#endif
 1037|       |
 1038|      1|	hook_call(zlog_init, progname, protoname, instance, uid, gid);
  ------------------
  |  |  169|      1|#define hook_call(hookname, ...) hook_call_##hookname(__VA_ARGS__)
  ------------------
 1039|      1|	return;
 1040|       |
 1041|      0|out_warn:
 1042|      0|	zlog_err("crashlog and per-thread log buffering unavailable!");
  ------------------
  |  |  130|      0|#define zlog_err(...) 0
  ------------------
 1043|      0|	hook_call(zlog_init, progname, protoname, instance, uid, gid);
  ------------------
  |  |  169|      0|#define hook_call(hookname, ...) hook_call_##hookname(__VA_ARGS__)
  ------------------
 1044|      0|}
zlog.c:zlog_tls_get:
  209|      1|{
  210|      1|	return zlog_tls_var;
  211|      1|}
zlog.c:zlog_gettid:
  221|      1|{
  222|      1|#ifndef __OpenBSD__
  223|       |	/* accessing a TLS variable is much faster than a syscall */
  224|      1|	static thread_local intmax_t cached_tid = -1;
  225|      1|	if (cached_tid != -1)
  ------------------
  |  Branch (225:6): [True: 0, False: 1]
  ------------------
  226|      0|		return cached_tid;
  227|      1|#endif
  228|       |
  229|      1|	long rv = -1;
  230|       |#ifdef HAVE_PTHREAD_GETTHREADID_NP
  231|       |	rv = pthread_getthreadid_np();
  232|       |#elif defined(linux)
  233|      1|	rv = syscall(__NR_gettid);
  234|       |#elif defined(__NetBSD__)
  235|       |	rv = _lwp_self();
  236|       |#elif defined(__FreeBSD__)
  237|       |	thr_self(&rv);
  238|       |#elif defined(__DragonFly__)
  239|       |	rv = lwp_gettid();
  240|       |#elif defined(__OpenBSD__)
  241|       |	rv = getthrid();
  242|       |#elif defined(__sun)
  243|       |	rv = pthread_self();
  244|       |#elif defined(__APPLE__)
  245|       |	rv = mach_thread_self();
  246|       |	mach_port_deallocate(mach_task_self(), rv);
  247|       |#endif
  248|       |
  249|      1|#ifndef __OpenBSD__
  250|      1|	cached_tid = rv;
  251|      1|#endif
  252|      1|	return rv;
  253|      1|}
zlog.c:zlog_tls_set:
  214|      1|{
  215|      1|	zlog_tls_var = val;
  216|      1|}

log_5424_cmd_init:
  923|      1|{
  924|      1|	hook_register(zlog_cli_show, log_5424_show);
  ------------------
  |  |  143|      1|	_hook_reg_svar(&_hook_##hookname, _hook_typecheck_##hookname(func),    \
  |  |  ------------------
  |  |  |  |  136|      1|	do {                                                                   \
  |  |  |  |  137|      1|		static struct hookent stack_hookent = {};                      \
  |  |  |  |  138|      1|		_hook_register(hook, &stack_hookent, funcptr, arg, has_arg,    \
  |  |  |  |  139|      1|			       module, funcname, prio);                        \
  |  |  |  |  140|      1|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (140:11): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  144|      1|		       NULL, false, THIS_MODULE, #func, HOOK_DEFAULT_PRIORITY)
  ------------------
  925|       |
  926|      1|	cmd_variable_handler_register(log_5424_var_handlers);
  927|       |
  928|       |	/* CLI commands. */
  929|      1|	install_node(&extlog_node);
  930|      1|	install_default(EXTLOG_NODE);
  931|       |
  932|      1|	install_element(CONFIG_NODE, &log_5424_target_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  933|      1|	install_element(CONFIG_NODE, &no_log_5424_target_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  934|       |
  935|      1|	install_element(EXTLOG_NODE, &log_5424_destination_file_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  936|      1|	install_element(EXTLOG_NODE, &log_5424_destination_fifo_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  937|      1|	install_element(EXTLOG_NODE, &log_5424_destination_unix_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  938|      1|	install_element(EXTLOG_NODE, &log_5424_destination_journald_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  939|      1|	install_element(EXTLOG_NODE, &log_5424_destination_syslog_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  940|      1|	install_element(EXTLOG_NODE, &log_5424_destination_fd_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  941|       |
  942|      1|	install_element(EXTLOG_NODE, &log_5424_meta_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  943|      1|	install_element(EXTLOG_NODE, &log_5424_prio_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  944|      1|	install_element(EXTLOG_NODE, &log_5424_facility_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  945|      1|	install_element(EXTLOG_NODE, &log_5424_ts_prec_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  946|      1|	install_element(EXTLOG_NODE, &log_5424_ts_local_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  947|      1|}
zlog_5424_cli.c:zlog_5424_startup_init:
  956|      2|{
  957|      2|	hook_register(frr_early_init, log_5424_early_init);
  ------------------
  |  |  143|      2|	_hook_reg_svar(&_hook_##hookname, _hook_typecheck_##hookname(func),    \
  |  |  ------------------
  |  |  |  |  136|      2|	do {                                                                   \
  |  |  |  |  137|      2|		static struct hookent stack_hookent = {};                      \
  |  |  |  |  138|      2|		_hook_register(hook, &stack_hookent, funcptr, arg, has_arg,    \
  |  |  |  |  139|      2|			       module, funcname, prio);                        \
  |  |  |  |  140|      2|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (140:11): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  144|      2|		       NULL, false, THIS_MODULE, #func, HOOK_DEFAULT_PRIORITY)
  ------------------
  958|      2|	hook_register(zlog_rotate, log_5424_rotate);
  ------------------
  |  |  143|      2|	_hook_reg_svar(&_hook_##hookname, _hook_typecheck_##hookname(func),    \
  |  |  ------------------
  |  |  |  |  136|      2|	do {                                                                   \
  |  |  |  |  137|      2|		static struct hookent stack_hookent = {};                      \
  |  |  |  |  138|      2|		_hook_register(hook, &stack_hookent, funcptr, arg, has_arg,    \
  |  |  |  |  139|      2|			       module, funcname, prio);                        \
  |  |  |  |  140|      2|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (140:11): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  144|      2|		       NULL, false, THIS_MODULE, #func, HOOK_DEFAULT_PRIORITY)
  ------------------
  959|      2|	hook_register(frr_fini, log_5424_fini);
  ------------------
  |  |  143|      2|	_hook_reg_svar(&_hook_##hookname, _hook_typecheck_##hookname(func),    \
  |  |  ------------------
  |  |  |  |  136|      2|	do {                                                                   \
  |  |  |  |  137|      2|		static struct hookent stack_hookent = {};                      \
  |  |  |  |  138|      2|		_hook_register(hook, &stack_hookent, funcptr, arg, has_arg,    \
  |  |  |  |  139|      2|			       module, funcname, prio);                        \
  |  |  |  |  140|      2|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (140:11): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  144|      2|		       NULL, false, THIS_MODULE, #func, HOOK_DEFAULT_PRIORITY)
  ------------------
  960|      2|}

zlog_file_init:
  154|      1|{
  155|      1|	memset(zcf, 0, sizeof(*zcf));
  156|      1|	zcf->prio_min = ZLOG_DISABLED;
  ------------------
  |  |  145|      1|#define ZLOG_DISABLED	(LOG_EMERG-1)
  ------------------
  157|      1|	zcf->fd = -1;
  158|       |	pthread_mutex_init(&zcf->cfg_mtx, NULL);
  159|      1|}
zlog_file_set_fd:
  253|      1|{
  254|      1|	frr_with_mutex (&zcf->cfg_mtx) {
  ------------------
  |  |  223|      1|	for (pthread_mutex_t MACRO_REPEAT(_frr_with_mutex, ##__VA_ARGS__)      \
  |  |  ------------------
  |  |  |  |  173|      1|	MACRO_VARIANT(_MACRO_REPEAT, ##__VA_ARGS__)(NAME, ##__VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      1|	_CONCAT(NAME, _MACRO_VARIANT(0, ##__VA_ARGS__, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  141|      1|#define _CONCAT(a, b) _CONCAT2(a,b)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  140|      1|#define _CONCAT2(a, b) a ## b
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  156|      1|	NAME(A1)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  223|      1|	for (pthread_mutex_t MACRO_REPEAT(_frr_with_mutex, ##__VA_ARGS__)      \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  218|      1|	*NAMECTR(_mtx_) __attribute__((                                        \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  219|      1|		unused, cleanup(_frr_mtx_unlock))) = _frr_mtx_lock(mutex),     \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  145|      1|			_10, _9, _8, _7, _6, _5, _4, _3, _2, _1, _0))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  224|      1|	     *_once = NULL; _once == NULL; _once = (void *)1)                  \
  |  |  ------------------
  |  |  |  Branch (224:22): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  255|      1|		if (zcf->fd == fd)
  ------------------
  |  Branch (255:7): [True: 0, False: 1]
  ------------------
  256|      0|			return true;
  257|       |
  258|      1|		XFREE(MTYPE_LOG_FD_NAME, zcf->filename);
  ------------------
  |  |  170|      1|	do {                                                                   \
  |  |  171|      1|		qfree(mtype, ptr);                                             \
  |  |  172|      1|		ptr = NULL;                                                    \
  |  |  173|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  259|      1|		zcf->fd = fd;
  260|       |
  261|      1|		return zlog_file_cycle(zcf);
  262|      1|	}
  263|      1|	assert(0);
  ------------------
  |  |   51|      1|	({                                                                     \
  |  |   52|      0|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|      0|			(used)) = {                                            \
  |  |   54|      0|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|      0|	{                                                                      \
  |  |  |  |  284|      0|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      0|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      0|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      0|		/* .func = */ func_,                                           \
  |  |  |  |  289|      0|	}                                                                      \
  |  |  ------------------
  |  |   55|      0|			.expr = #expr_,                                        \
  |  |   56|      0|		};                                                             \
  |  |   57|      0|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      0|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      0|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      0|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|      0|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, Folded]
  |  |  |  Branch (58:24): [Folded, False: 0]
  |  |  ------------------
  |  |   59|      0|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [Folded, False: 0]
  |  |  ------------------
  |  |   62|      0|	})
  ------------------
  264|      0|	return false;
  265|      0|}
zlog_targets.c:zlog_startup_init:
  388|      2|{
  389|      2|	zlog_startup_stderr.zt.prio_min = LOG_WARNING;
  390|      2|	zlog_startup_stderr.zt.logfn = zlog_fd;
  391|      2|	zlog_startup_stderr.zt.logfn_sigsafe = zlog_fd_sigsafe;
  392|      2|	zlog_startup_stderr.fd = STDERR_FILENO;
  393|       |
  394|      2|	zlog_target_replace(NULL, &zlog_startup_stderr.zt);
  395|       |
  396|      2|	hook_register(zlog_aux_init, zlt_aux_init);
  ------------------
  |  |  143|      2|	_hook_reg_svar(&_hook_##hookname, _hook_typecheck_##hookname(func),    \
  |  |  ------------------
  |  |  |  |  136|      2|	do {                                                                   \
  |  |  |  |  137|      2|		static struct hookent stack_hookent = {};                      \
  |  |  |  |  138|      2|		_hook_register(hook, &stack_hookent, funcptr, arg, has_arg,    \
  |  |  |  |  139|      2|			       module, funcname, prio);                        \
  |  |  |  |  140|      2|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (140:11): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  144|      2|		       NULL, false, THIS_MODULE, #func, HOOK_DEFAULT_PRIORITY)
  ------------------
  397|      2|	hook_register(zlog_init, zlt_init);
  ------------------
  |  |  143|      2|	_hook_reg_svar(&_hook_##hookname, _hook_typecheck_##hookname(func),    \
  |  |  ------------------
  |  |  |  |  136|      2|	do {                                                                   \
  |  |  |  |  137|      2|		static struct hookent stack_hookent = {};                      \
  |  |  |  |  138|      2|		_hook_register(hook, &stack_hookent, funcptr, arg, has_arg,    \
  |  |  |  |  139|      2|			       module, funcname, prio);                        \
  |  |  |  |  140|      2|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (140:11): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  144|      2|		       NULL, false, THIS_MODULE, #func, HOOK_DEFAULT_PRIORITY)
  ------------------
  398|      2|	hook_register(zlog_fini, zlt_fini);
  ------------------
  |  |  143|      2|	_hook_reg_svar(&_hook_##hookname, _hook_typecheck_##hookname(func),    \
  |  |  ------------------
  |  |  |  |  136|      2|	do {                                                                   \
  |  |  |  |  137|      2|		static struct hookent stack_hookent = {};                      \
  |  |  |  |  138|      2|		_hook_register(hook, &stack_hookent, funcptr, arg, has_arg,    \
  |  |  |  |  139|      2|			       module, funcname, prio);                        \
  |  |  |  |  140|      2|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (140:11): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  144|      2|		       NULL, false, THIS_MODULE, #func, HOOK_DEFAULT_PRIORITY)
  ------------------
  399|      2|}
zlog_targets.c:zlog_file_target_free:
  162|      1|{
  163|      1|	if (!zlt)
  ------------------
  |  Branch (163:6): [True: 1, False: 0]
  ------------------
  164|      1|		return;
  165|       |
  166|      0|	rcu_close(&zlt->head_close, zlt->fd);
  167|      0|	rcu_free(MTYPE_LOG_FD, zlt, zt.rcu_head);
  ------------------
  |  |  134|      0|	do {                                                                   \
  |  |  135|      0|		typeof(ptr) _ptr = (ptr);                                      \
  |  |  136|      0|		if (!_ptr)                                                     \
  |  |  ------------------
  |  |  |  Branch (136:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  137|      0|			break;                                                 \
  |  |  138|      0|		struct rcu_head *_rcu_head = &_ptr->field;                     \
  |  |  139|      0|		static const struct rcu_action _rcu_action = {                 \
  |  |  140|      0|			.type = RCUA_FREE,                                     \
  |  |  141|      0|			.u.free = {                                            \
  |  |  142|      0|				.mt = mtype,                                   \
  |  |  143|      0|				.offset = offsetof(typeof(*_ptr), field),      \
  |  |  ------------------
  |  |  |  |  253|      0|#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
  |  |  ------------------
  |  |  144|      0|			},                                                     \
  |  |  145|      0|		};                                                             \
  |  |  146|      0|		rcu_enqueue(_rcu_head, &_rcu_action);                          \
  |  |  147|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (147:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  168|      0|}
zlog_targets.c:zlog_file_cycle:
  185|      1|{
  186|      1|	struct zlog_target *zt, *old;
  187|      1|	struct zlt_fd *zlt = NULL;
  188|      1|	int fd;
  189|      1|	bool rv = true;
  190|       |
  191|      1|	do {
  192|      1|		if (zcf->prio_min == ZLOG_DISABLED)
  ------------------
  |  |  145|      1|#define ZLOG_DISABLED	(LOG_EMERG-1)
  ------------------
  |  Branch (192:7): [True: 1, False: 0]
  ------------------
  193|      1|			break;
  194|       |
  195|      0|		if (zcf->fd != -1)
  ------------------
  |  Branch (195:7): [True: 0, False: 0]
  ------------------
  196|      0|			fd = dup(zcf->fd);
  197|      0|		else if (zcf->filename)
  ------------------
  |  Branch (197:12): [True: 0, False: 0]
  ------------------
  198|      0|			fd = open(zcf->filename,
  199|      0|				  O_WRONLY | O_APPEND | O_CREAT | O_CLOEXEC
  200|      0|					| O_NOCTTY,
  201|      0|				  LOGFILE_MASK);
  ------------------
  |  |  649|      0|#define LOGFILE_MASK 0600
  ------------------
  202|      0|		else
  203|      0|			fd = -1;
  204|       |
  205|      0|		if (fd < 0) {
  ------------------
  |  Branch (205:7): [True: 0, False: 0]
  ------------------
  206|      0|			rv = false;
  207|      0|			break;
  208|      0|		}
  209|       |
  210|      0|		zt = zlog_target_clone(MTYPE_LOG_FD, &zcf->active->zt,
  211|      0|				       sizeof(*zlt));
  212|      0|		zlt = container_of(zt, struct zlt_fd, zt);
  ------------------
  |  |  281|      0|	(__builtin_choose_expr(                                                \
  |  |  282|      0|		__builtin_types_compatible_p(typeof(&((type *)0)->member),     \
  |  |  ------------------
  |  |  |  Branch (282:3): [True: 0, Folded]
  |  |  ------------------
  |  |  283|      0|			typeof(ptr))                                           \
  |  |  284|      0|		    ||  __builtin_types_compatible_p(void *, typeof(ptr)),     \
  |  |  ------------------
  |  |  |  Branch (284:11): [Folded, False: 0]
  |  |  ------------------
  |  |  285|      0|		({                                                             \
  |  |  286|      0|			typeof(((type *)0)->member) *__mptr = (void *)(ptr);   \
  |  |  287|      0|			(type *)((char *)__mptr - offsetof(type, member));     \
  |  |  ------------------
  |  |  |  |  253|      0|#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
  |  |  ------------------
  |  |  288|      0|		}),                                                            \
  |  |  289|      0|		({                                                             \
  |  |  290|      0|			typeof(((const type *)0)->member) *__mptr = (ptr);     \
  |  |  291|      0|			(const type *)((const char *)__mptr -                  \
  |  |  292|      0|					offsetof(type, member));               \
  |  |  ------------------
  |  |  |  |  253|      0|#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
  |  |  ------------------
  |  |  293|      0|		})                                                             \
  |  |  294|      0|	))
  ------------------
  213|       |
  214|      0|		zlt->fd = fd;
  215|      0|		zlt->record_priority = zcf->record_priority;
  216|      0|		zlt->ts_subsec = zcf->ts_subsec;
  217|       |
  218|      0|		zlt->zt.prio_min = zcf->prio_min;
  219|      0|		zlt->zt.logfn = zcf->zlog_wrap ? zcf->zlog_wrap : zlog_fd;
  ------------------
  |  Branch (219:19): [True: 0, False: 0]
  ------------------
  220|      0|		zlt->zt.logfn_sigsafe = zlog_fd_sigsafe;
  221|      0|	} while (0);
  ------------------
  |  Branch (221:11): [Folded, False: 0]
  ------------------
  222|       |
  223|      1|	old = zlog_target_replace(zcf->active ? &zcf->active->zt : NULL,
  ------------------
  |  Branch (223:28): [True: 0, False: 1]
  ------------------
  224|      1|				  zlt ? &zlt->zt : NULL);
  ------------------
  |  Branch (224:7): [True: 0, False: 1]
  ------------------
  225|      1|	zcf->active = zlt;
  226|       |
  227|      1|	zlog_file_target_free(container_of_null(old, struct zlt_fd, zt));
  ------------------
  |  |  306|      1|	({                                                                     \
  |  |  307|      1|		typeof(ptr) _tmp = (ptr);                                      \
  |  |  308|      1|		_tmp ? container_of(_tmp, type, member) : NULL;                \
  |  |  ------------------
  |  |  |  |  281|      0|	(__builtin_choose_expr(                                                \
  |  |  |  |  282|      0|		__builtin_types_compatible_p(typeof(&((type *)0)->member),     \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (282:3): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  283|      0|			typeof(ptr))                                           \
  |  |  |  |  284|      0|		    ||  __builtin_types_compatible_p(void *, typeof(ptr)),     \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (284:11): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  285|      0|		({                                                             \
  |  |  |  |  286|      0|			typeof(((type *)0)->member) *__mptr = (void *)(ptr);   \
  |  |  |  |  287|      0|			(type *)((char *)__mptr - offsetof(type, member));     \
  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
  |  |  |  |  ------------------
  |  |  |  |  288|      0|		}),                                                            \
  |  |  |  |  289|      0|		({                                                             \
  |  |  |  |  290|      0|			typeof(((const type *)0)->member) *__mptr = (ptr);     \
  |  |  |  |  291|      0|			(const type *)((const char *)__mptr -                  \
  |  |  |  |  292|      0|					offsetof(type, member));               \
  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
  |  |  |  |  ------------------
  |  |  |  |  293|      0|		})                                                             \
  |  |  |  |  294|      0|	))
  |  |  ------------------
  |  |  |  Branch (308:3): [True: 0, False: 1]
  |  |  ------------------
  |  |  309|      1|	})
  ------------------
  228|       |
  229|      1|	return rv;
  230|      1|}
zlog_targets.c:zlt_init:
  372|      1|{
  373|      1|	openlog(progname, LOG_CONS | LOG_NDELAY | LOG_PID, LOG_DAEMON);
  374|      1|	return 0;
  375|      1|}

ospf_recv_indication_lsa_flush:
 1618|    806|{
 1619|    806|	if (!IS_LSA_SELF(lsa) && IS_LSA_MAXAGE(lsa) &&
  ------------------
  |  |  210|  1.61k|#define IS_LSA_SELF(L)          (CHECK_FLAG ((L)->flags, OSPF_LSA_SELF))
  |  |  ------------------
  |  |  |  |  394|    806|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  ------------------
              	if (!IS_LSA_SELF(lsa) && IS_LSA_MAXAGE(lsa) &&
  ------------------
  |  |  211|  1.33k|#define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |  209|    533|#define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    533|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |               #define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|      0|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (209:20): [True: 0, False: 533]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |   33|    533|#define OSPF_LSA_MAXAGE                       3600
  |  |  ------------------
  |  |  |  Branch (211:33): [True: 0, False: 533]
  |  |  ------------------
  ------------------
  |  Branch (1619:6): [True: 533, False: 273]
  ------------------
 1620|      0|	    ospf_check_indication_lsa(lsa)) {
  ------------------
  |  Branch (1620:6): [True: 0, False: 0]
  ------------------
 1621|      0|		lsa->area->fr_info.area_ind_lsa_recvd = false;
 1622|       |
 1623|      0|		OSPF_LOG_INFO("%s: Received an ind lsa: %pI4 area %pI4",
  ------------------
  |  |  128|      0|#define OSPF_LOG_INFO(fmt, ...) OSPF_LOG(info, true, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  119|      0|	do {                                                                   \
  |  |  |  |  120|      0|		if (cond)                                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (120:7): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  121|      0|			zlog_##level(fmt, ##__VA_ARGS__);                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  132|      0|#define zlog_info(...) 0
  |  |  |  |  ------------------
  |  |  |  |  122|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (122:11): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1624|      0|			      __func__, &lsa->data->id, &lsa->area->area_id);
 1625|       |
 1626|      0|		if (!IS_OSPF_ABR(lsa->area->ospf))
  ------------------
  |  |  675|      0|#define IS_OSPF_ABR(O)		((O)->flags & OSPF_FLAG_ABR)
  |  |  ------------------
  |  |  |  |  179|      0|#define OSPF_FLAG_ABR           0x0001
  |  |  ------------------
  ------------------
  |  Branch (1626:7): [True: 0, False: 0]
  ------------------
 1627|      0|			return;
 1628|       |
 1629|       |		/* If the LSA received is a indication LSA with maxage on
 1630|       |		 * the network, then check and regenerate indication
 1631|       |		 * LSA if any of our areas don't support flood reduction.
 1632|       |		 */
 1633|      0|		ospf_generate_indication_lsa(lsa->area->ospf, lsa->area);
 1634|      0|	}
 1635|    806|}
ospf_schedule_abr_task:
 2172|     48|{
 2173|     48|	if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|     48|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|     48|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|     48|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 48]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2174|      0|		zlog_debug("Scheduling ABR task");
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 2175|       |
 2176|     48|	event_add_timer(master, ospf_abr_task_timer, ospf, OSPF_ABR_TASK_DELAY,
  ------------------
  |  |  216|     48|#define event_add_timer(m, f, a, v, t) 0
  ------------------
 2177|     48|			&ospf->t_abr_task);
 2178|     48|}

ospf_asbr_external_aggregator_init:
  364|      1|{
  365|      1|	instance->rt_aggr_tbl = route_table_init();
  366|       |
  367|      1|	instance->t_external_aggr = NULL;
  368|       |
  369|      1|	instance->aggr_action = 0;
  370|       |
  371|      1|	instance->aggr_delay_interval = OSPF_EXTL_AGGR_DEFAULT_DELAY;
  ------------------
  |  |   56|      1|#define OSPF_EXTL_AGGR_DEFAULT_DELAY 5
  ------------------
  372|      1|}
ospf_extrenal_aggregator_lookup:
  504|     87|{
  505|     87|	struct route_node *rn;
  506|     87|	struct ospf_external_aggr_rt *summary_rt = NULL;
  507|       |
  508|     87|	rn = route_node_lookup(ospf->rt_aggr_tbl, (struct prefix *)p);
  509|     87|	if (rn) {
  ------------------
  |  Branch (509:6): [True: 0, False: 87]
  ------------------
  510|      0|		summary_rt = rn->info;
  511|      0|		route_unlock_node(rn);
  512|      0|		return summary_rt;
  513|      0|	}
  514|     87|	return NULL;
  515|     87|}

ospf_ase_register_external_lsa:
  641|    132|{
  642|    132|	struct route_node *rn;
  643|    132|	struct prefix_ipv4 p;
  644|    132|	struct list *lst;
  645|    132|	struct as_external_lsa *al;
  646|       |
  647|    132|	al = (struct as_external_lsa *)lsa->data;
  648|    132|	p.family = AF_INET;
  649|    132|	p.prefix = lsa->data->id;
  650|    132|	p.prefixlen = ip_masklen(al->mask);
  651|    132|	apply_mask_ipv4(&p);
  652|       |
  653|    132|	rn = route_node_get(top->external_lsas, (struct prefix *)&p);
  654|    132|	if ((lst = rn->info) == NULL)
  ------------------
  |  Branch (654:6): [True: 22, False: 110]
  ------------------
  655|     22|		rn->info = lst = list_new();
  656|    110|	else
  657|    110|		route_unlock_node(rn);
  658|       |
  659|       |	/* We assume that if LSA is deleted from DB
  660|       |	   is is also deleted from this RT */
  661|    132|	listnode_add(lst, ospf_lsa_lock(lsa)); /* external_lsas lst */
  662|    132|}
ospf_ase_incremental_update:
  710|     45|{
  711|     45|	struct list *lsas;
  712|     45|	struct listnode *node;
  713|     45|	struct route_node *rn, *rn2;
  714|     45|	struct prefix_ipv4 p;
  715|     45|	struct route_table *tmp_old;
  716|     45|	struct as_external_lsa *al;
  717|       |
  718|     45|	al = (struct as_external_lsa *)lsa->data;
  719|     45|	p.family = AF_INET;
  720|     45|	p.prefix = lsa->data->id;
  721|     45|	p.prefixlen = ip_masklen(al->mask);
  722|     45|	apply_mask_ipv4(&p);
  723|       |
  724|       |	/* if new_table is NULL, there was no spf calculation, thus
  725|       |	   incremental update is unneeded */
  726|     45|	if (!ospf->new_table)
  ------------------
  |  Branch (726:6): [True: 45, False: 0]
  ------------------
  727|     45|		return;
  728|       |
  729|       |	/* If there is already an intra-area or inter-area route
  730|       |	   to the destination, no recalculation is necessary
  731|       |	   (internal routes take precedence). */
  732|       |
  733|      0|	rn = route_node_lookup(ospf->new_table, (struct prefix *)&p);
  734|      0|	if (rn) {
  ------------------
  |  Branch (734:6): [True: 0, False: 0]
  ------------------
  735|      0|		route_unlock_node(rn);
  736|      0|		if (rn->info)
  ------------------
  |  Branch (736:7): [True: 0, False: 0]
  ------------------
  737|      0|			return;
  738|      0|	}
  739|       |
  740|      0|	rn = route_node_lookup(ospf->external_lsas, (struct prefix *)&p);
  741|      0|	assert(rn);
  ------------------
  |  |   51|      0|	({                                                                     \
  |  |   52|      0|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|      0|			(used)) = {                                            \
  |  |   54|      0|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|      0|	{                                                                      \
  |  |  |  |  284|      0|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      0|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      0|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      0|		/* .func = */ func_,                                           \
  |  |  |  |  289|      0|	}                                                                      \
  |  |  ------------------
  |  |   55|      0|			.expr = #expr_,                                        \
  |  |   56|      0|		};                                                             \
  |  |   57|      0|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      0|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      0|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      0|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|      0|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 0]
  |  |  |  Branch (58:24): [True: 0, False: 0]
  |  |  ------------------
  |  |   59|      0|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|      0|	})
  ------------------
  742|      0|	assert(rn->info);
  ------------------
  |  |   51|      0|	({                                                                     \
  |  |   52|      0|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|      0|			(used)) = {                                            \
  |  |   54|      0|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|      0|	{                                                                      \
  |  |  |  |  284|      0|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      0|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      0|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      0|		/* .func = */ func_,                                           \
  |  |  |  |  289|      0|	}                                                                      \
  |  |  ------------------
  |  |   55|      0|			.expr = #expr_,                                        \
  |  |   56|      0|		};                                                             \
  |  |   57|      0|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      0|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      0|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      0|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|      0|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 0]
  |  |  |  Branch (58:24): [True: 0, False: 0]
  |  |  ------------------
  |  |   59|      0|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|      0|	})
  ------------------
  743|      0|	lsas = rn->info;
  744|      0|	route_unlock_node(rn);
  745|       |
  746|      0|	for (ALL_LIST_ELEMENTS_RO(lsas, node, lsa))
  ------------------
  |  |  333|      0|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|      0|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|      0|	(node) != NULL && ((data) = static_cast(data, listgetdata(node)), 1);  \
  |  |  ------------------
  |  |  |  |  204|      0|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (334:2): [True: 0, False: 0]
  |  |  |  Branch (334:20): [True: 0, False: 0]
  |  |  ------------------
  |  |  335|      0|	(node) = listnextnode(node), ((data) = NULL)
  |  |  ------------------
  |  |  |  |   49|      0|#define listnextnode(X) ((X) ? ((X)->next) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  747|      0|		ospf_ase_calculate_route(ospf, lsa);
  748|       |
  749|       |	/* prepare temporary old routing table for compare */
  750|      0|	tmp_old = route_table_init();
  751|      0|	rn = route_node_lookup(ospf->old_external_route, (struct prefix *)&p);
  752|      0|	if (rn && rn->info) {
  ------------------
  |  Branch (752:6): [True: 0, False: 0]
  |  Branch (752:12): [True: 0, False: 0]
  ------------------
  753|      0|		rn2 = route_node_get(tmp_old, (struct prefix *)&p);
  754|      0|		rn2->info = rn->info;
  755|      0|		route_unlock_node(rn);
  756|      0|	}
  757|       |
  758|       |	/* install changes to zebra */
  759|      0|	ospf_ase_compare_tables(ospf, ospf->new_external_route, tmp_old);
  760|       |
  761|       |	/* update ospf->old_external_route table */
  762|      0|	if (rn && rn->info)
  ------------------
  |  Branch (762:6): [True: 0, False: 0]
  |  Branch (762:12): [True: 0, False: 0]
  ------------------
  763|      0|		ospf_route_free((struct ospf_route *)rn->info);
  764|       |
  765|      0|	rn2 = route_node_lookup(ospf->new_external_route, (struct prefix *)&p);
  766|       |	/* if new route exists, install it to ospf->old_external_route */
  767|      0|	if (rn2 && rn2->info) {
  ------------------
  |  Branch (767:6): [True: 0, False: 0]
  |  Branch (767:13): [True: 0, False: 0]
  ------------------
  768|      0|		if (!rn)
  ------------------
  |  Branch (768:7): [True: 0, False: 0]
  ------------------
  769|      0|			rn = route_node_get(ospf->old_external_route,
  770|      0|					    (struct prefix *)&p);
  771|      0|		rn->info = rn2->info;
  772|      0|	} else {
  773|       |		/* remove route node from ospf->old_external_route */
  774|      0|		if (rn) {
  ------------------
  |  Branch (774:7): [True: 0, False: 0]
  ------------------
  775|      0|			rn->info = NULL;
  776|      0|			route_unlock_node(rn);
  777|      0|		}
  778|      0|	}
  779|       |
  780|      0|	if (rn2) {
  ------------------
  |  Branch (780:6): [True: 0, False: 0]
  ------------------
  781|       |		/* rn2->info is stored in route node of ospf->old_external_route
  782|       |		 */
  783|      0|		rn2->info = NULL;
  784|      0|		route_unlock_node(rn2);
  785|      0|		route_unlock_node(rn2);
  786|      0|	}
  787|       |
  788|      0|	route_table_finish(tmp_old);
  789|      0|}

ospf_neighbor_bfd_apply:
   71|    245|{
   72|    245|	struct ospf_interface *oi = nbr->oi;
   73|    245|	struct ospf_if_params *oip = IF_DEF_PARAMS(oi->ifp);
  ------------------
  |  |   17|    245|#define IF_DEF_PARAMS(I) (IF_OSPF_IF_INFO (I)->def_params)
  |  |  ------------------
  |  |  |  |   16|    245|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  ------------------
  ------------------
   74|       |
   75|       |	/* BFD configuration was removed. */
   76|    245|	if (oip->bfd_config == NULL) {
  ------------------
  |  Branch (76:6): [True: 245, False: 0]
  ------------------
   77|    245|		bfd_sess_free(&nbr->bfd_session);
   78|    245|		return;
   79|    245|	}
   80|       |
   81|       |	/* New BFD session. */
   82|      0|	if (nbr->bfd_session == NULL) {
  ------------------
  |  Branch (82:6): [True: 0, False: 0]
  ------------------
   83|      0|		nbr->bfd_session = bfd_sess_new(ospf_bfd_session_change, nbr);
   84|      0|		bfd_sess_set_ipv4_addrs(nbr->bfd_session, NULL, &nbr->src);
   85|      0|		bfd_sess_set_interface(nbr->bfd_session, oi->ifp->name);
   86|      0|		bfd_sess_set_vrf(nbr->bfd_session, oi->ospf->vrf_id);
   87|      0|	}
   88|       |
   89|       |	/* Set new configuration. */
   90|      0|	bfd_sess_set_timers(nbr->bfd_session,
   91|      0|			    oip->bfd_config->detection_multiplier,
   92|      0|			    oip->bfd_config->min_rx, oip->bfd_config->min_tx);
   93|      0|	bfd_sess_set_profile(nbr->bfd_session, oip->bfd_config->profile);
   94|       |
   95|       |	/* Don't start sessions on down OSPF sessions. */
   96|      0|	if (nbr->state < NSM_TwoWay)
  ------------------
  |  |   19|      0|#define NSM_TwoWay		5
  ------------------
  |  Branch (96:6): [True: 0, False: 0]
  ------------------
   97|      0|		return;
   98|       |
   99|      0|	bfd_sess_install(nbr->bfd_session);
  100|      0|}
ospf_bfd_init:
  314|      1|{
  315|      1|	bfd_protocol_integration_init(zclient, tm);
  316|       |
  317|       |	/* Install BFD command */
  318|      1|	install_element(INTERFACE_NODE, &ip_ospf_bfd_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  319|      1|	install_element(INTERFACE_NODE, &ip_ospf_bfd_param_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  320|      1|	install_element(INTERFACE_NODE, &ip_ospf_bfd_prof_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  321|      1|	install_element(INTERFACE_NODE, &no_ip_ospf_bfd_prof_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  322|      1|	install_element(INTERFACE_NODE, &no_ip_ospf_bfd_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  323|      1|}

ospf_debug_init:
 1998|      1|{
 1999|      1|	install_node(&debug_node);
 2000|       |
 2001|      1|	install_element(ENABLE_NODE, &show_debugging_ospf_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2002|      1|	install_element(ENABLE_NODE, &debug_ospf_ism_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2003|      1|	install_element(ENABLE_NODE, &debug_ospf_nsm_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2004|      1|	install_element(ENABLE_NODE, &debug_ospf_lsa_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2005|      1|	install_element(ENABLE_NODE, &debug_ospf_zebra_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2006|      1|	install_element(ENABLE_NODE, &debug_ospf_event_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2007|      1|	install_element(ENABLE_NODE, &debug_ospf_nssa_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2008|      1|	install_element(ENABLE_NODE, &debug_ospf_te_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2009|      1|	install_element(ENABLE_NODE, &debug_ospf_sr_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2010|      1|	install_element(ENABLE_NODE, &debug_ospf_ti_lfa_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2011|      1|	install_element(ENABLE_NODE, &debug_ospf_default_info_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2012|      1|	install_element(ENABLE_NODE, &debug_ospf_ldp_sync_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2013|      1|	install_element(ENABLE_NODE, &debug_ospf_client_api_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2014|      1|	install_element(ENABLE_NODE, &no_debug_ospf_ism_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2015|      1|	install_element(ENABLE_NODE, &no_debug_ospf_nsm_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2016|      1|	install_element(ENABLE_NODE, &no_debug_ospf_lsa_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2017|      1|	install_element(ENABLE_NODE, &no_debug_ospf_zebra_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2018|      1|	install_element(ENABLE_NODE, &no_debug_ospf_event_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2019|      1|	install_element(ENABLE_NODE, &no_debug_ospf_nssa_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2020|      1|	install_element(ENABLE_NODE, &debug_ospf_gr_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2021|      1|	install_element(ENABLE_NODE, &debug_ospf_bfd_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2022|       |
 2023|      1|	install_element(ENABLE_NODE, &show_debugging_ospf_instance_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2024|      1|	install_element(ENABLE_NODE, &debug_ospf_packet_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2025|       |
 2026|      1|	install_element(ENABLE_NODE, &debug_ospf_instance_nsm_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2027|      1|	install_element(ENABLE_NODE, &debug_ospf_instance_lsa_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2028|      1|	install_element(ENABLE_NODE, &debug_ospf_instance_zebra_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2029|      1|	install_element(ENABLE_NODE, &debug_ospf_instance_event_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2030|      1|	install_element(ENABLE_NODE, &debug_ospf_instance_nssa_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2031|      1|	install_element(ENABLE_NODE, &no_debug_ospf_instance_nsm_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2032|      1|	install_element(ENABLE_NODE, &no_debug_ospf_instance_lsa_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2033|      1|	install_element(ENABLE_NODE, &no_debug_ospf_instance_zebra_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2034|      1|	install_element(ENABLE_NODE, &no_debug_ospf_instance_event_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2035|      1|	install_element(ENABLE_NODE, &no_debug_ospf_instance_nssa_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2036|      1|	install_element(ENABLE_NODE, &no_debug_ospf_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2037|       |
 2038|      1|	install_element(CONFIG_NODE, &debug_ospf_packet_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2039|      1|	install_element(CONFIG_NODE, &debug_ospf_ism_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2040|      1|	install_element(CONFIG_NODE, &no_debug_ospf_ism_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2041|       |
 2042|      1|	install_element(CONFIG_NODE, &debug_ospf_nsm_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2043|      1|	install_element(CONFIG_NODE, &debug_ospf_lsa_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2044|      1|	install_element(CONFIG_NODE, &debug_ospf_zebra_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2045|      1|	install_element(CONFIG_NODE, &debug_ospf_event_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2046|      1|	install_element(CONFIG_NODE, &debug_ospf_nssa_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2047|      1|	install_element(CONFIG_NODE, &debug_ospf_te_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2048|      1|	install_element(CONFIG_NODE, &debug_ospf_sr_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2049|      1|	install_element(CONFIG_NODE, &debug_ospf_ti_lfa_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2050|      1|	install_element(CONFIG_NODE, &debug_ospf_default_info_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2051|      1|	install_element(CONFIG_NODE, &debug_ospf_ldp_sync_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2052|      1|	install_element(CONFIG_NODE, &debug_ospf_client_api_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2053|      1|	install_element(CONFIG_NODE, &no_debug_ospf_nsm_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2054|      1|	install_element(CONFIG_NODE, &no_debug_ospf_lsa_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2055|      1|	install_element(CONFIG_NODE, &no_debug_ospf_zebra_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2056|      1|	install_element(CONFIG_NODE, &no_debug_ospf_event_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2057|      1|	install_element(CONFIG_NODE, &no_debug_ospf_nssa_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2058|      1|	install_element(CONFIG_NODE, &debug_ospf_gr_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2059|      1|	install_element(CONFIG_NODE, &debug_ospf_bfd_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2060|       |
 2061|      1|	install_element(CONFIG_NODE, &debug_ospf_instance_nsm_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2062|      1|	install_element(CONFIG_NODE, &debug_ospf_instance_lsa_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2063|      1|	install_element(CONFIG_NODE, &debug_ospf_instance_zebra_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2064|      1|	install_element(CONFIG_NODE, &debug_ospf_instance_event_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2065|      1|	install_element(CONFIG_NODE, &debug_ospf_instance_nssa_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2066|      1|	install_element(CONFIG_NODE, &no_debug_ospf_instance_nsm_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2067|      1|	install_element(CONFIG_NODE, &no_debug_ospf_instance_lsa_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2068|      1|	install_element(CONFIG_NODE, &no_debug_ospf_instance_zebra_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2069|      1|	install_element(CONFIG_NODE, &no_debug_ospf_instance_event_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2070|      1|	install_element(CONFIG_NODE, &no_debug_ospf_instance_nssa_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2071|      1|	install_element(CONFIG_NODE, &no_debug_ospf_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2072|      1|}

ospf_error_init:
  178|      1|{
  179|      1|	log_ref_add(ferr_ospf_warn);
  180|      1|	log_ref_add(ferr_ospf_err);
  181|      1|}

ospf_ext_init:
  101|      1|{
  102|      1|	int rc = 0;
  103|       |
  104|      1|	memset(&OspfEXT, 0, sizeof(OspfEXT));
  105|      1|	OspfEXT.enabled = false;
  106|       |	/* Only Area flooding is supported yet */
  107|      1|	OspfEXT.scope = OSPF_OPAQUE_AREA_LSA;
  ------------------
  |  |   33|      1|#define OSPF_OPAQUE_AREA_LSA	     10
  ------------------
  108|       |	/* Initialize interface list */
  109|      1|	OspfEXT.iflist = list_new();
  110|      1|	OspfEXT.iflist->del = del_ext_info;
  111|       |
  112|      1|	zlog_info("EXT (%s): Register Extended Link Opaque LSA", __func__);
  ------------------
  |  |  132|      1|#define zlog_info(...) 0
  ------------------
  113|      1|	rc = ospf_register_opaque_functab(
  114|      1|		OSPF_OPAQUE_AREA_LSA, OPAQUE_TYPE_EXTENDED_LINK_LSA,
  ------------------
  |  |   33|      1|#define OSPF_OPAQUE_AREA_LSA	     10
  ------------------
              		OSPF_OPAQUE_AREA_LSA, OPAQUE_TYPE_EXTENDED_LINK_LSA,
  ------------------
  |  |   49|      1|#define OPAQUE_TYPE_EXTENDED_LINK_LSA                  8
  ------------------
  115|      1|		ospf_ext_link_new_if,	/* new if */
  116|      1|		ospf_ext_link_del_if,	/* del if */
  117|      1|		ospf_ext_ism_change,	/* ism change */
  118|      1|		ospf_ext_link_nsm_change,    /* nsm change */
  119|      1|		NULL,			     /* Write router config. */
  120|      1|		NULL,			     /* Write interface conf. */
  121|      1|		NULL,			     /* Write debug config. */
  122|      1|		ospf_ext_link_show_info,     /* Show LSA info */
  123|      1|		ospf_ext_link_lsa_originate, /* Originate LSA */
  124|      1|		ospf_ext_link_lsa_refresh,   /* Refresh LSA */
  125|      1|		ospf_ext_link_lsa_update,    /* new_lsa_hook */
  126|      1|		NULL);			     /* del_lsa_hook */
  127|       |
  128|      1|	if (rc != 0) {
  ------------------
  |  Branch (128:6): [True: 0, False: 1]
  ------------------
  129|      0|		flog_warn(EC_OSPF_OPAQUE_REGISTRATION,
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
  130|      0|			  "EXT (%s): Failed to register Extended Link LSA",
  131|      0|			  __func__);
  132|      0|		return rc;
  133|      0|	}
  134|       |
  135|      1|	zlog_info("EXT (%s): Register Extended Prefix Opaque LSA", __func__);
  ------------------
  |  |  132|      1|#define zlog_info(...) 0
  ------------------
  136|      1|	rc = ospf_register_opaque_functab(
  137|      1|		OspfEXT.scope, OPAQUE_TYPE_EXTENDED_PREFIX_LSA,
  ------------------
  |  |   48|      1|#define OPAQUE_TYPE_EXTENDED_PREFIX_LSA                7
  ------------------
  138|      1|		NULL,			     /* new if handle by link */
  139|      1|		NULL,			     /* del if handle by link */
  140|      1|		NULL,			     /* ism change */
  141|      1|		NULL,			     /* nsm change */
  142|      1|		ospf_sr_config_write_router, /* Write router config. */
  143|      1|		NULL,			     /* Write interface conf. */
  144|      1|		NULL,			     /* Write debug config. */
  145|      1|		ospf_ext_pref_show_info,     /* Show LSA info */
  146|      1|		ospf_ext_pref_lsa_originate, /* Originate LSA */
  147|      1|		ospf_ext_pref_lsa_refresh,   /* Refresh LSA */
  148|      1|		ospf_ext_pref_lsa_update,    /* new_lsa_hook */
  149|      1|		NULL);			     /* del_lsa_hook */
  150|      1|	if (rc != 0) {
  ------------------
  |  Branch (150:6): [True: 0, False: 1]
  ------------------
  151|      0|		flog_warn(EC_OSPF_OPAQUE_REGISTRATION,
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
  152|      0|			  "EXT (%s): Failed to register Extended Prefix LSA",
  153|      0|			  __func__);
  154|      0|		return rc;
  155|      0|	}
  156|       |
  157|      1|	return rc;
  158|      1|}
ospf_ext.c:lookup_ext_by_ifp:
  245|      1|{
  246|      1|	struct listnode *node;
  247|      1|	struct ext_itf *exti;
  248|       |
  249|      1|	for (ALL_LIST_ELEMENTS_RO(OspfEXT.iflist, node, exti))
  ------------------
  |  |  333|      1|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|      1|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|      1|	(node) != NULL && ((data) = static_cast(data, listgetdata(node)), 1);  \
  |  |  ------------------
  |  |  |  |  204|      0|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (334:2): [True: 0, False: 1]
  |  |  |  Branch (334:20): [True: 0, False: 0]
  |  |  ------------------
  |  |  335|      1|	(node) = listnextnode(node), ((data) = NULL)
  |  |  ------------------
  |  |  |  |   49|      0|#define listnextnode(X) ((X) ? ((X)->next) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|      0|		if (exti->ifp == ifp)
  ------------------
  |  Branch (250:7): [True: 0, False: 0]
  ------------------
  251|      0|			return exti;
  252|       |
  253|      1|	return NULL;
  254|      1|}
ospf_ext.c:ospf_ext_link_new_if:
  677|      1|{
  678|      1|	struct ext_itf *new;
  679|      1|	int rc = -1;
  680|       |
  681|      1|	if (lookup_ext_by_ifp(ifp) != NULL) {
  ------------------
  |  Branch (681:6): [True: 0, False: 1]
  ------------------
  682|      0|		rc = 0; /* Do nothing here. */
  683|      0|		return rc;
  684|      0|	}
  685|       |
  686|      1|	new = XCALLOC(MTYPE_OSPF_EXT_PARAMS, sizeof(struct ext_itf));
  ------------------
  |  |  165|      1|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  687|       |
  688|       |	/* initialize new information and link back the interface */
  689|      1|	new->ifp = ifp;
  690|      1|	new->flags = EXT_LPFLG_LSA_INACTIVE;
  ------------------
  |  |   62|      1|#define EXT_LPFLG_LSA_INACTIVE          0x00
  ------------------
  691|       |
  692|      1|	listnode_add(OspfEXT.iflist, new);
  693|       |
  694|      1|	rc = 0;
  695|      1|	return rc;
  696|      1|}
ospf_ext.c:ospf_ext_link_lsa_update:
  900|    818|{
  901|       |	/* Sanity Check */
  902|    818|	if (lsa == NULL) {
  ------------------
  |  Branch (902:6): [True: 0, False: 818]
  ------------------
  903|      0|		flog_warn(EC_OSPF_LSA_NULL, "EXT (%s): Abort! LSA is NULL",
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
  904|      0|			  __func__);
  905|      0|		return -1;
  906|      0|	}
  907|       |
  908|       |	/* Process only Opaque LSA */
  909|    818|	if ((lsa->data->type != OSPF_OPAQUE_AREA_LSA)
  ------------------
  |  |   33|    818|#define OSPF_OPAQUE_AREA_LSA	     10
  ------------------
  |  Branch (909:6): [True: 791, False: 27]
  ------------------
  910|    791|	    && (lsa->data->type != OSPF_OPAQUE_AS_LSA))
  ------------------
  |  |   34|    791|#define OSPF_OPAQUE_AS_LSA	     11
  ------------------
  |  Branch (910:9): [True: 776, False: 15]
  ------------------
  911|    776|		return 0;
  912|       |
  913|       |	/* Process only Extended Link LSA */
  914|     42|	if (GET_OPAQUE_TYPE(ntohl(lsa->data->id.s_addr))
  ------------------
  |  |   30|     42|#define GET_OPAQUE_TYPE(lsid) (((uint32_t)(lsid)&LSID_OPAQUE_TYPE_MASK) >> 24)
  |  |  ------------------
  |  |  |  |   27|     42|#define LSID_OPAQUE_TYPE_MASK	0xff000000	/*  8 bits */
  |  |  ------------------
  ------------------
  |  Branch (914:6): [True: 42, False: 0]
  ------------------
  915|     42|	    != OPAQUE_TYPE_EXTENDED_LINK_LSA)
  ------------------
  |  |   49|     42|#define OPAQUE_TYPE_EXTENDED_LINK_LSA                  8
  ------------------
  916|     42|		return 0;
  917|       |
  918|       |	/* Check if it is not my LSA */
  919|      0|	if (IS_LSA_SELF(lsa))
  ------------------
  |  |  210|      0|#define IS_LSA_SELF(L)          (CHECK_FLAG ((L)->flags, OSPF_LSA_SELF))
  |  |  ------------------
  |  |  |  |  394|      0|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (210:33): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  920|      0|		return 0;
  921|       |
  922|       |	/* Check if Extended is enable */
  923|      0|	if (!OspfEXT.enabled)
  ------------------
  |  Branch (923:6): [True: 0, False: 0]
  ------------------
  924|      0|		return 0;
  925|       |
  926|       |	/* Call Segment Routing LSA update or deletion */
  927|      0|	if (!IS_LSA_MAXAGE(lsa))
  ------------------
  |  |  211|      0|#define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |  209|      0|#define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|      0|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |               #define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|      0|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (209:20): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |   33|      0|#define OSPF_LSA_MAXAGE                       3600
  |  |  ------------------
  ------------------
  |  Branch (927:6): [True: 0, False: 0]
  ------------------
  928|      0|		ospf_sr_ext_link_lsa_update(lsa);
  929|      0|	else
  930|      0|		ospf_sr_ext_link_lsa_delete(lsa);
  931|       |
  932|      0|	return 0;
  933|      0|}
ospf_ext.c:ospf_ext_pref_lsa_update:
  937|    818|{
  938|       |
  939|       |	/* Sanity Check */
  940|    818|	if (lsa == NULL) {
  ------------------
  |  Branch (940:6): [True: 0, False: 818]
  ------------------
  941|      0|		flog_warn(EC_OSPF_LSA_NULL, "EXT (%s): Abort! LSA is NULL",
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
  942|      0|			  __func__);
  943|      0|		return -1;
  944|      0|	}
  945|       |
  946|       |	/* Process only Opaque LSA */
  947|    818|	if ((lsa->data->type != OSPF_OPAQUE_AREA_LSA)
  ------------------
  |  |   33|    818|#define OSPF_OPAQUE_AREA_LSA	     10
  ------------------
  |  Branch (947:6): [True: 791, False: 27]
  ------------------
  948|    791|	    && (lsa->data->type != OSPF_OPAQUE_AS_LSA))
  ------------------
  |  |   34|    791|#define OSPF_OPAQUE_AS_LSA	     11
  ------------------
  |  Branch (948:9): [True: 776, False: 15]
  ------------------
  949|    776|		return 0;
  950|       |
  951|       |	/* Process only Extended Prefix LSA */
  952|     42|	if (GET_OPAQUE_TYPE(ntohl(lsa->data->id.s_addr))
  ------------------
  |  |   30|     42|#define GET_OPAQUE_TYPE(lsid) (((uint32_t)(lsid)&LSID_OPAQUE_TYPE_MASK) >> 24)
  |  |  ------------------
  |  |  |  |   27|     42|#define LSID_OPAQUE_TYPE_MASK	0xff000000	/*  8 bits */
  |  |  ------------------
  ------------------
  |  Branch (952:6): [True: 42, False: 0]
  ------------------
  953|     42|	    != OPAQUE_TYPE_EXTENDED_PREFIX_LSA)
  ------------------
  |  |   48|     42|#define OPAQUE_TYPE_EXTENDED_PREFIX_LSA                7
  ------------------
  954|     42|		return 0;
  955|       |
  956|       |	/* Check if it is not my LSA */
  957|      0|	if (IS_LSA_SELF(lsa))
  ------------------
  |  |  210|      0|#define IS_LSA_SELF(L)          (CHECK_FLAG ((L)->flags, OSPF_LSA_SELF))
  |  |  ------------------
  |  |  |  |  394|      0|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (210:33): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  958|      0|		return 0;
  959|       |
  960|       |	/* Check if Extended is enable */
  961|      0|	if (!OspfEXT.enabled)
  ------------------
  |  Branch (961:6): [True: 0, False: 0]
  ------------------
  962|      0|		return 0;
  963|       |
  964|       |	/* Call Segment Routing LSA update or deletion */
  965|      0|	if (!IS_LSA_MAXAGE(lsa))
  ------------------
  |  |  211|      0|#define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |  209|      0|#define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|      0|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |               #define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|      0|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (209:20): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |   33|      0|#define OSPF_LSA_MAXAGE                       3600
  |  |  ------------------
  ------------------
  |  Branch (965:6): [True: 0, False: 0]
  ------------------
  966|      0|		ospf_sr_ext_prefix_lsa_update(lsa);
  967|      0|	else
  968|      0|		ospf_sr_ext_prefix_lsa_delete(lsa);
  969|       |
  970|      0|	return 0;
  971|      0|}

ospf_refresh_dna_type5_and_type7_lsas:
   44|    108|{
   45|    108|	struct route_node *rn;
   46|    108|	struct ospf_lsa *lsa = NULL;
   47|       |
   48|  16.2k|	LSDB_LOOP (EXTERNAL_LSDB(ospf), rn, lsa)
  ------------------
  |  |   29|    108|	if ((T) != NULL)                                                       \
  |  |  ------------------
  |  |  |  Branch (29:6): [True: 108, False: 0]
  |  |  ------------------
  |  |   30|  16.2k|		for ((N) = route_top((T)); ((N)); ((N)) = route_next((N)))     \
  |  |  ------------------
  |  |  |  Branch (30:30): [True: 16.1k, False: 108]
  |  |  ------------------
  |  |   31|  16.1k|			if (((L) = (N)->info))
  |  |  ------------------
  |  |  |  Branch (31:8): [True: 8.12k, False: 8.03k]
  |  |  ------------------
  ------------------
   49|  8.12k|		if (IS_LSA_SELF(lsa) &&
  ------------------
  |  |  210|  16.2k|#define IS_LSA_SELF(L)          (CHECK_FLAG ((L)->flags, OSPF_LSA_SELF))
  |  |  ------------------
  |  |  |  |  394|  8.12k|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (210:33): [True: 6.22k, False: 1.90k]
  |  |  ------------------
  ------------------
   50|  6.22k|		    CHECK_FLAG(lsa->data->ls_age, DO_NOT_AGE))
  ------------------
  |  |  394|  6.22k|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 0, False: 6.22k]
  |  |  ------------------
  ------------------
   51|      0|			ospf_lsa_refresh(ospf, lsa);
   52|       |
   53|    108|	LSDB_LOOP (NSSA_LSDB(ospf), rn, lsa)
  ------------------
  |  |   29|    108|	if ((T) != NULL)                                                       \
  |  |  ------------------
  |  |  |  Branch (29:6): [True: 108, False: 0]
  |  |  ------------------
  |  |   30|    108|		for ((N) = route_top((T)); ((N)); ((N)) = route_next((N)))     \
  |  |  ------------------
  |  |  |  Branch (30:30): [True: 0, False: 108]
  |  |  ------------------
  |  |   31|    108|			if (((L) = (N)->info))
  |  |  ------------------
  |  |  |  Branch (31:8): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   54|      0|		if (IS_LSA_SELF(lsa) &&
  ------------------
  |  |  210|      0|#define IS_LSA_SELF(L)          (CHECK_FLAG ((L)->flags, OSPF_LSA_SELF))
  |  |  ------------------
  |  |  |  |  394|      0|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (210:33): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   55|      0|		    CHECK_FLAG(lsa->data->ls_age, DO_NOT_AGE))
  ------------------
  |  |  394|      0|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   56|      0|			ospf_lsa_refresh(ospf, lsa);
   57|    108|}
ospf_external_info_check:
  136|     87|{
  137|     87|	struct as_external_lsa *al;
  138|     87|	struct prefix_ipv4 p;
  139|     87|	struct route_node *rn;
  140|     87|	struct list *ext_list;
  141|     87|	struct listnode *node;
  142|     87|	struct ospf_external *ext;
  143|     87|	int type;
  144|       |
  145|     87|	al = (struct as_external_lsa *)lsa->data;
  146|       |
  147|     87|	p.family = AF_INET;
  148|     87|	p.prefix = lsa->data->id;
  149|     87|	p.prefixlen = ip_masklen(al->mask);
  150|       |
  151|  2.78k|	for (type = 0; type < ZEBRA_ROUTE_MAX; type++) {
  ------------------
  |  |   39|  2.78k|#define ZEBRA_ROUTE_MAX                  31
  ------------------
  |  Branch (151:17): [True: 2.69k, False: 87]
  ------------------
  152|  2.69k|		int redist_on = 0;
  153|       |
  154|  2.69k|		redist_on =
  155|  2.69k|			is_default_prefix4(&p)
  ------------------
  |  Branch (155:4): [True: 31, False: 2.66k]
  ------------------
  156|  2.69k|				? vrf_bitmap_check(
  157|     31|					zclient->default_information[AFI_IP],
  158|     31|					ospf->vrf_id)
  159|  2.69k|				: (zclient->mi_redist[AFI_IP][type].enabled
  ------------------
  |  Branch (159:8): [True: 86, False: 2.58k]
  ------------------
  160|  2.58k|				   || vrf_bitmap_check(
  ------------------
  |  Branch (160:11): [True: 0, False: 2.58k]
  ------------------
  161|  2.58k|					   zclient->redist[AFI_IP][type],
  162|  2.58k|					   ospf->vrf_id));
  163|       |		// Pending: check for MI above.
  164|  2.69k|		if (redist_on) {
  ------------------
  |  Branch (164:7): [True: 86, False: 2.61k]
  ------------------
  165|     86|			ext_list = ospf->external[type];
  166|     86|			if (!ext_list)
  ------------------
  |  Branch (166:8): [True: 86, False: 0]
  ------------------
  167|     86|				continue;
  168|       |
  169|      0|			for (ALL_LIST_ELEMENTS_RO(ext_list, node, ext)) {
  ------------------
  |  |  333|      0|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|      0|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|      0|	(node) != NULL && ((data) = static_cast(data, listgetdata(node)), 1);  \
  |  |  ------------------
  |  |  |  |  204|      0|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (334:2): [True: 0, False: 0]
  |  |  |  Branch (334:20): [True: 0, False: 0]
  |  |  ------------------
  |  |  335|      0|	(node) = listnextnode(node), ((data) = NULL)
  |  |  ------------------
  |  |  |  |   49|      0|#define listnextnode(X) ((X) ? ((X)->next) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  170|      0|				rn = NULL;
  171|      0|				if (ext->external_info)
  ------------------
  |  Branch (171:9): [True: 0, False: 0]
  ------------------
  172|      0|					rn = route_node_lookup(
  173|      0|						ext->external_info,
  174|      0|						(struct prefix *)&p);
  175|      0|				if (rn) {
  ------------------
  |  Branch (175:9): [True: 0, False: 0]
  ------------------
  176|      0|					route_unlock_node(rn);
  177|      0|					if (rn->info != NULL)
  ------------------
  |  Branch (177:10): [True: 0, False: 0]
  ------------------
  178|      0|						return (struct external_info *)
  179|      0|							rn->info;
  180|      0|				}
  181|      0|			}
  182|      0|		}
  183|  2.69k|	}
  184|       |
  185|     87|	if (is_default_prefix4(&p) && ospf->external[DEFAULT_ROUTE]) {
  ------------------
  |  |   16|      1|#define DEFAULT_ROUTE		    ZEBRA_ROUTE_MAX
  |  |  ------------------
  |  |  |  |   39|      1|#define ZEBRA_ROUTE_MAX                  31
  |  |  ------------------
  ------------------
  |  Branch (185:6): [True: 1, False: 86]
  |  Branch (185:32): [True: 0, False: 1]
  ------------------
  186|      0|		ext_list = ospf->external[DEFAULT_ROUTE];
  ------------------
  |  |   16|      0|#define DEFAULT_ROUTE		    ZEBRA_ROUTE_MAX
  |  |  ------------------
  |  |  |  |   39|      0|#define ZEBRA_ROUTE_MAX                  31
  |  |  ------------------
  ------------------
  187|       |
  188|      0|		for (ALL_LIST_ELEMENTS_RO(ext_list, node, ext)) {
  ------------------
  |  |  333|      0|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|      0|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|      0|	(node) != NULL && ((data) = static_cast(data, listgetdata(node)), 1);  \
  |  |  ------------------
  |  |  |  |  204|      0|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (334:2): [True: 0, False: 0]
  |  |  |  Branch (334:20): [True: 0, False: 0]
  |  |  ------------------
  |  |  335|      0|	(node) = listnextnode(node), ((data) = NULL)
  |  |  ------------------
  |  |  |  |   49|      0|#define listnextnode(X) ((X) ? ((X)->next) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  189|      0|			if (!ext->external_info)
  ------------------
  |  Branch (189:8): [True: 0, False: 0]
  ------------------
  190|      0|				continue;
  191|       |
  192|      0|			rn = route_node_lookup(ext->external_info,
  193|      0|					       (struct prefix *)&p);
  194|      0|			if (!rn)
  ------------------
  |  Branch (194:8): [True: 0, False: 0]
  ------------------
  195|      0|				continue;
  196|      0|			route_unlock_node(rn);
  197|      0|			if (rn->info != NULL)
  ------------------
  |  Branch (197:8): [True: 0, False: 0]
  ------------------
  198|      0|				return (struct external_info *)rn->info;
  199|      0|		}
  200|      0|	}
  201|     87|	return NULL;
  202|     87|}
ospf_flood:
  368|  11.0k|{
  369|  11.0k|	struct ospf_interface *oi;
  370|  11.0k|	int lsa_ack_flag;
  371|       |
  372|       |	/* Type-7 LSA's will be flooded throughout their native NSSA area,
  373|       |	   but will also be flooded as Type-5's into ABR capable links.  */
  374|       |
  375|  11.0k|	if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|  11.0k|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|  11.0k|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|  11.0k|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 11.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  376|      0|		zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  377|  11.0k|			"%s:LSA[Flooding]: start, NBR %pI4 (%s), cur(%p), New-LSA[%s]",
  378|  11.0k|			ospf_get_name(ospf), &nbr->router_id,
  379|  11.0k|			lookup_msg(ospf_nsm_state_msg, nbr->state, NULL),
  380|  11.0k|			(void *)current, dump_lsa_key(new));
  381|       |
  382|  11.0k|	oi = nbr->oi;
  383|       |
  384|       |	/* If there is already a database copy, and if the
  385|       |	   database copy was received via flooding and installed less
  386|       |	   than MinLSArrival seconds ago, discard the new LSA
  387|       |	   (without acknowledging it). */
  388|  11.0k|	if (current != NULL) /* -- endo. */
  ------------------
  |  Branch (388:6): [True: 8.78k, False: 2.26k]
  ------------------
  389|  8.78k|	{
  390|  8.78k|		if (IS_LSA_SELF(current)
  ------------------
  |  |  210|  17.5k|#define IS_LSA_SELF(L)          (CHECK_FLAG ((L)->flags, OSPF_LSA_SELF))
  |  |  ------------------
  |  |  |  |  394|  8.78k|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (210:33): [True: 4.98k, False: 3.80k]
  |  |  ------------------
  ------------------
  391|  4.98k|		    && (ntohs(current->data->ls_age) == 0
  ------------------
  |  Branch (391:11): [True: 3.32k, False: 1.65k]
  ------------------
  392|  4.98k|			&& ntohl(current->data->ls_seqnum)
  ------------------
  |  Branch (392:7): [True: 0, False: 3.32k]
  ------------------
  393|  3.32k|				   == OSPF_INITIAL_SEQUENCE_NUMBER)) {
  ------------------
  |  |   38|  3.32k|#define OSPF_INITIAL_SEQUENCE_NUMBER    0x80000001U
  ------------------
  394|      0|			if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|      0|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|      0|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  395|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  396|      0|					"%s:LSA[Flooding]: Got a self-originated LSA, while local one is initial instance.",
  397|      0|					ospf_get_name(ospf));
  398|      0|			; /* Accept this LSA for quick LSDB resynchronization.
  399|       |			     */
  400|  8.78k|		} else if (monotime_since(&current->tv_recv, NULL)
  ------------------
  |  Branch (400:14): [True: 8.78k, False: 0]
  ------------------
  401|  8.78k|			   < ospf->min_ls_arrival * 1000LL) {
  402|  8.78k|			if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|  8.78k|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|  8.78k|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|  8.78k|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 8.78k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  403|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  404|  8.78k|					"%s:LSA[Flooding]: LSA is received recently.",
  405|  8.78k|					ospf_get_name(ospf));
  406|  8.78k|			return -1;
  407|  8.78k|		}
  408|  8.78k|	}
  409|       |
  410|       |	/* Flood the new LSA out some subset of the router's interfaces.
  411|       |	   In some cases (e.g., the state of the receiving interface is
  412|       |	   DR and the LSA was received from a router other than the
  413|       |	   Backup DR) the LSA will be flooded back out the receiving
  414|       |	   interface. */
  415|  2.26k|	lsa_ack_flag = ospf_flood_through(ospf, nbr, new);
  416|       |
  417|       |	/* Remove the current database copy from all neighbors' Link state
  418|       |	   retransmission lists.  AS_EXTERNAL and AS_EXTERNAL_OPAQUE does
  419|       |					      ^^^^^^^^^^^^^^^^^^^^^^^
  420|       |	   not have area ID.
  421|       |	   All other (even NSSA's) do have area ID.  */
  422|  2.26k|	if (current) {
  ------------------
  |  Branch (422:6): [True: 0, False: 2.26k]
  ------------------
  423|      0|		switch (current->data->type) {
  424|      0|		case OSPF_AS_EXTERNAL_LSA:
  ------------------
  |  |   28|      0|#define OSPF_AS_EXTERNAL_LSA          5
  ------------------
  |  Branch (424:3): [True: 0, False: 0]
  ------------------
  425|      0|		case OSPF_OPAQUE_AS_LSA:
  ------------------
  |  |   34|      0|#define OSPF_OPAQUE_AS_LSA	     11
  ------------------
  |  Branch (425:3): [True: 0, False: 0]
  ------------------
  426|      0|			ospf_ls_retransmit_delete_nbr_as(ospf, current);
  427|      0|			break;
  428|      0|		default:
  ------------------
  |  Branch (428:3): [True: 0, False: 0]
  ------------------
  429|      0|			ospf_ls_retransmit_delete_nbr_area(oi->area, current);
  430|      0|			break;
  431|      0|		}
  432|      0|	}
  433|       |
  434|       |	/* Do some internal house keeping that is needed here */
  435|  2.26k|	SET_FLAG(new->flags, OSPF_LSA_RECEIVED);
  ------------------
  |  |  395|  2.26k|#define SET_FLAG(V,F)        (V) |= (F)
  ------------------
  436|  2.26k|	(void)ospf_lsa_is_self_originated(ospf, new); /* Let it set the flag */
  437|       |
  438|       |	/* Received non-self-originated Grace LSA */
  439|  2.26k|	if (IS_GRACE_LSA(new) && !IS_LSA_SELF(new)) {
  ------------------
  |  |  124|  4.53k|	((lsa->data->type == OSPF_OPAQUE_LINK_LSA)                             \
  |  |  ------------------
  |  |  |  |   32|  2.26k|#define OSPF_OPAQUE_LINK_LSA	      9
  |  |  ------------------
  |  |  |  Branch (124:3): [True: 1.25k, False: 1.00k]
  |  |  ------------------
  |  |  125|  4.53k|	 && (GET_OPAQUE_TYPE(ntohl(lsa->data->id.s_addr))                      \
  |  |  ------------------
  |  |  |  |   30|  1.25k|#define GET_OPAQUE_TYPE(lsid) (((uint32_t)(lsid)&LSID_OPAQUE_TYPE_MASK) >> 24)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  1.25k|#define LSID_OPAQUE_TYPE_MASK	0xff000000	/*  8 bits */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (125:6): [True: 1.24k, False: 18]
  |  |  ------------------
  |  |  126|  1.25k|	     == OPAQUE_TYPE_GRACE_LSA))
  |  |  ------------------
  |  |  |  |   44|  1.25k|#define OPAQUE_TYPE_GRACE_LSA				3
  |  |  ------------------
  ------------------
              	if (IS_GRACE_LSA(new) && !IS_LSA_SELF(new)) {
  ------------------
  |  |  210|  1.24k|#define IS_LSA_SELF(L)          (CHECK_FLAG ((L)->flags, OSPF_LSA_SELF))
  |  |  ------------------
  |  |  |  |  394|  1.24k|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  ------------------
  |  Branch (439:27): [True: 1.24k, False: 0]
  ------------------
  440|       |
  441|  1.24k|		if (IS_LSA_MAXAGE(new)) {
  ------------------
  |  |  211|  1.24k|#define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |  209|  1.24k|#define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|  1.24k|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |               #define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|      0|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (209:20): [True: 0, False: 1.24k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |   33|  1.24k|#define OSPF_LSA_MAXAGE                       3600
  |  |  ------------------
  |  |  |  Branch (211:33): [True: 0, False: 1.24k]
  |  |  ------------------
  ------------------
  442|       |
  443|       |			/*  Handling Max age grace LSA.*/
  444|      0|			if (IS_DEBUG_OSPF_GR)
  ------------------
  |  |  107|      0|#define IS_DEBUG_OSPF_GR IS_DEBUG_OSPF(gr, GR)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|#define OSPF_DEBUG_GR 0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  445|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  446|      0|					"%s, Received a maxage GRACE-LSA from router %pI4",
  447|      0|					__func__, &new->data->adv_router);
  448|       |
  449|      0|			if (current) {
  ------------------
  |  Branch (449:8): [True: 0, False: 0]
  ------------------
  450|      0|				ospf_process_maxage_grace_lsa(ospf, new, nbr);
  451|      0|			} else {
  452|      0|				if (IS_DEBUG_OSPF_GR)
  ------------------
  |  |  107|      0|#define IS_DEBUG_OSPF_GR IS_DEBUG_OSPF(gr, GR)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|#define OSPF_DEBUG_GR 0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  453|      0|					zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  454|      0|						"%s, Grace LSA doesn't exist in lsdb, so discarding grace lsa",
  455|      0|						__func__);
  456|      0|				return -1;
  457|      0|			}
  458|  1.24k|		} else {
  459|  1.24k|			if (IS_DEBUG_OSPF_GR)
  ------------------
  |  |  107|  1.24k|#define IS_DEBUG_OSPF_GR IS_DEBUG_OSPF(gr, GR)
  |  |  ------------------
  |  |  |  |   91|  1.24k|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|  1.24k|#define OSPF_DEBUG_GR 0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 1.24k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  460|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  461|  1.24k|					"%s, Received a GRACE-LSA from router %pI4",
  462|  1.24k|					__func__, &new->data->adv_router);
  463|       |
  464|  1.24k|			if (ospf_process_grace_lsa(ospf, new, nbr)
  ------------------
  |  Branch (464:8): [True: 1.24k, False: 0]
  ------------------
  465|  1.24k|			    == OSPF_GR_NOT_HELPER) {
  ------------------
  |  |   12|  1.24k|#define OSPF_GR_NOT_HELPER 0
  ------------------
  466|  1.24k|				if (IS_DEBUG_OSPF_GR)
  ------------------
  |  |  107|  1.24k|#define IS_DEBUG_OSPF_GR IS_DEBUG_OSPF(gr, GR)
  |  |  ------------------
  |  |  |  |   91|  1.24k|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|  1.24k|#define OSPF_DEBUG_GR 0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 1.24k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  467|      0|					zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  468|  1.24k|						"%s, Not moving to HELPER role, So discarding grace LSA",
  469|  1.24k|						__func__);
  470|  1.24k|				return -1;
  471|  1.24k|			}
  472|  1.24k|		}
  473|  1.24k|	}
  474|       |
  475|       |	/* Install the new LSA in the link state database
  476|       |	   (replacing the current database copy).  This may cause the
  477|       |	   routing table calculation to be scheduled.  In addition,
  478|       |	   timestamp the new LSA with the current time.  The flooding
  479|       |	   procedure cannot overwrite the newly installed LSA until
  480|       |	   MinLSArrival seconds have elapsed. */
  481|       |
  482|  1.02k|	if (!(new = ospf_lsa_install(ospf, oi, new)))
  ------------------
  |  Branch (482:6): [True: 221, False: 806]
  ------------------
  483|    221|		return -1; /* unknown LSA type or any other error condition */
  484|       |
  485|       |	/* check if the installed LSA is an indication LSA */
  486|    806|	if (ospf_check_indication_lsa(new) && !IS_LSA_SELF(new) &&
  ------------------
  |  |  210|    924|#define IS_LSA_SELF(L)          (CHECK_FLAG ((L)->flags, OSPF_LSA_SELF))
  |  |  ------------------
  |  |  |  |  394|    118|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  ------------------
  |  Branch (486:6): [True: 118, False: 688]
  |  Branch (486:40): [True: 108, False: 10]
  ------------------
  487|    108|	    !IS_LSA_MAXAGE(new)) {
  ------------------
  |  |  211|    108|#define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |  209|    108|#define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    108|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |               #define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|      0|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (209:20): [True: 0, False: 108]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |   33|    108|#define OSPF_LSA_MAXAGE                       3600
  |  |  ------------------
  ------------------
  |  Branch (487:6): [True: 108, False: 0]
  ------------------
  488|    108|		new->area->fr_info.area_ind_lsa_recvd = true;
  489|       |		/* check if there are already type 5 LSAs originated
  490|       |		 * with DNA bit set, if yes reoriginate those LSAs.
  491|       |		 */
  492|    108|		ospf_refresh_dna_type5_and_type7_lsas(ospf);
  493|    108|	}
  494|       |
  495|       |	/* Check if we recived an indication LSA flush on backbone
  496|       |	 * network.
  497|       |	 */
  498|    806|	ospf_recv_indication_lsa_flush(new);
  499|       |
  500|    806|	if (new->area && OSPF_FR_CONFIG(ospf, new->area)) {
  ------------------
  |  |  223|    662|	(o->fr_configured || ((a != NULL) ? a->fr_info.configured : 0))
  |  |  ------------------
  |  |  |  Branch (223:3): [True: 0, False: 662]
  |  |  |  Branch (223:23): [True: 0, False: 662]
  |  |  |  Branch (223:24): [True: 662, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (500:6): [True: 662, False: 144]
  ------------------
  501|      0|		struct lsa_header const *lsah = new->data;
  502|       |
  503|      0|		if (!CHECK_FLAG(lsah->options, OSPF_OPTION_DC) &&
  ------------------
  |  |  394|      0|#define CHECK_FLAG(V,F)      ((V) & (F))
  ------------------
  |  Branch (503:7): [True: 0, False: 0]
  ------------------
  504|      0|		    !ospf_check_indication_lsa(new)) {
  ------------------
  |  Branch (504:7): [True: 0, False: 0]
  ------------------
  505|       |
  506|      0|			new->area->fr_info.area_dc_clear = true;
  507|       |			/* check of previously area supported flood reduction */
  508|      0|			if (new->area->fr_info.enabled) {
  ------------------
  |  Branch (508:8): [True: 0, False: 0]
  ------------------
  509|      0|				new->area->fr_info.enabled = false;
  510|      0|				OSPF_LOG_DEBUG(
  ------------------
  |  |  130|      0|#define OSPF_LOG_DEBUG(cond, fmt, ...) OSPF_LOG(debug, cond, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  119|      0|	do {                                                                   \
  |  |  |  |  120|      0|		if (cond)                                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (120:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  121|      0|			zlog_##level(fmt, ##__VA_ARGS__);                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|      0|#define zlog_debug(...) 0
  |  |  |  |  ------------------
  |  |  |  |  122|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (122:11): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|      0|					IS_DEBUG_OSPF_EVENT,
  512|      0|					"Flood Reduction STATE on -> off by %s LSA",
  513|      0|					dump_lsa_key(new));
  514|       |				/* if yes update all the lsa to the area the
  515|       |				 * new LSAs will have DNA bit set to 0.
  516|       |				 */
  517|      0|				ospf_refresh_area_self_lsas(new->area);
  518|      0|			}
  519|      0|		} else if (!new->area->fr_info.enabled) {
  ------------------
  |  Branch (519:14): [True: 0, False: 0]
  ------------------
  520|       |			/* check again after installing new LSA that area
  521|       |			 * supports flood reduction.
  522|       |			 */
  523|      0|			ospf_area_update_fr_state(new->area);
  524|      0|			if (new->area->fr_info.enabled) {
  ------------------
  |  Branch (524:8): [True: 0, False: 0]
  ------------------
  525|      0|				OSPF_LOG_DEBUG(
  ------------------
  |  |  130|      0|#define OSPF_LOG_DEBUG(cond, fmt, ...) OSPF_LOG(debug, cond, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  119|      0|	do {                                                                   \
  |  |  |  |  120|      0|		if (cond)                                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (120:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  121|      0|			zlog_##level(fmt, ##__VA_ARGS__);                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|      0|#define zlog_debug(...) 0
  |  |  |  |  ------------------
  |  |  |  |  122|      0|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (122:11): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  526|      0|					IS_DEBUG_OSPF_EVENT,
  527|      0|					"Flood Reduction STATE off -> on by %s LSA",
  528|      0|					dump_lsa_key(new));
  529|      0|				ospf_refresh_area_self_lsas(new->area);
  530|      0|			}
  531|      0|		}
  532|      0|	}
  533|       |
  534|       |	/* Acknowledge the receipt of the LSA by sending a Link State
  535|       |	   Acknowledgment packet back out the receiving interface. */
  536|    806|	if (lsa_ack_flag)
  ------------------
  |  Branch (536:6): [True: 0, False: 806]
  ------------------
  537|      0|		ospf_flood_delayed_lsa_ack(nbr, new);
  538|       |
  539|       |	/* If this new LSA indicates that it was originated by the
  540|       |	   receiving router itself, the router must take special action,
  541|       |	   either updating the LSA or in some cases flushing it from
  542|       |	   the routing domain. */
  543|    806|	if (ospf_lsa_is_self_originated(ospf, new))
  ------------------
  |  Branch (543:6): [True: 273, False: 533]
  ------------------
  544|    273|		ospf_process_self_originated_lsa(ospf, new, oi->area);
  545|    533|	else
  546|       |		/* Update statistics value for OSPF-MIB. */
  547|    533|		ospf->rx_lsa_count++;
  548|       |
  549|    806|	return 0;
  550|  1.02k|}
ospf_flood_through_interface:
  556|  2.08k|{
  557|  2.08k|	struct ospf_neighbor *onbr;
  558|  2.08k|	struct route_node *rn;
  559|  2.08k|	int retx_flag;
  560|       |
  561|  2.08k|	if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|  2.08k|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|  2.08k|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|  2.08k|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 2.08k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  562|      0|		zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  563|  2.08k|			"%s: considering int %s (%s), INBR(%pI4), LSA[%s] AGE %u",
  564|  2.08k|			__func__, IF_NAME(oi), ospf_get_name(oi->ospf),
  565|  2.08k|			inbr ? &inbr->router_id : NULL, dump_lsa_key(lsa),
  566|  2.08k|			ntohs(lsa->data->ls_age));
  567|       |
  568|  2.08k|	if (!ospf_if_is_enable(oi))
  ------------------
  |  Branch (568:6): [True: 2.08k, False: 0]
  ------------------
  569|  2.08k|		return 0;
  570|       |
  571|       |	/* If flood reduction is configured, set the DC bit on the lsa. */
  572|      0|	if (IS_LSA_SELF(lsa)) {
  ------------------
  |  |  210|      0|#define IS_LSA_SELF(L)          (CHECK_FLAG ((L)->flags, OSPF_LSA_SELF))
  |  |  ------------------
  |  |  |  |  394|      0|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (210:33): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  573|      0|		if (OSPF_FR_CONFIG(oi->area->ospf, oi->area)) {
  ------------------
  |  |  223|      0|	(o->fr_configured || ((a != NULL) ? a->fr_info.configured : 0))
  |  |  ------------------
  |  |  |  Branch (223:3): [True: 0, False: 0]
  |  |  |  Branch (223:23): [True: 0, False: 0]
  |  |  |  Branch (223:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  574|      0|			if (!ospf_check_indication_lsa(lsa)) {
  ------------------
  |  Branch (574:8): [True: 0, False: 0]
  ------------------
  575|      0|				SET_FLAG(lsa->data->options, OSPF_OPTION_DC);
  ------------------
  |  |  395|      0|#define SET_FLAG(V,F)        (V) |= (F)
  ------------------
  576|      0|				ospf_lsa_checksum(lsa->data);
  577|      0|			}
  578|      0|		} else if (CHECK_FLAG(lsa->data->options, OSPF_OPTION_DC)) {
  ------------------
  |  |  394|      0|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  579|      0|			UNSET_FLAG(lsa->data->options, OSPF_OPTION_DC);
  ------------------
  |  |  396|      0|#define UNSET_FLAG(V,F)      (V) &= ~(F)
  ------------------
  580|      0|			ospf_lsa_checksum(lsa->data);
  581|      0|		}
  582|       |
  583|       |		/* If flood reduction is enabled then set DNA bit on the
  584|       |		 * self lsas.
  585|       |		 */
  586|      0|		if (oi->area->fr_info.enabled)
  ------------------
  |  Branch (586:7): [True: 0, False: 0]
  ------------------
  587|      0|			SET_FLAG(lsa->data->ls_age, DO_NOT_AGE);
  ------------------
  |  |  395|      0|#define SET_FLAG(V,F)        (V) |= (F)
  ------------------
  588|      0|	}
  589|       |
  590|       |	/* Remember if new LSA is added to a retransmit list. */
  591|      0|	retx_flag = 0;
  592|       |
  593|       |	/* Each of the neighbors attached to this interface are examined,
  594|       |	   to determine whether they must receive the new LSA.  The following
  595|       |	   steps are executed for each neighbor: */
  596|      0|	for (rn = route_top(oi->nbrs); rn; rn = route_next(rn)) {
  ------------------
  |  Branch (596:33): [True: 0, False: 0]
  ------------------
  597|      0|		struct ospf_lsa *ls_req;
  598|       |
  599|      0|		if (rn->info == NULL)
  ------------------
  |  Branch (599:7): [True: 0, False: 0]
  ------------------
  600|      0|			continue;
  601|       |
  602|      0|		onbr = rn->info;
  603|      0|		if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|      0|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|      0|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  604|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  605|      0|				"%s: considering nbr %pI4 via %s (%s), state: %s",
  606|      0|				__func__, &onbr->router_id, IF_NAME(oi),
  607|      0|				ospf_get_name(oi->ospf),
  608|      0|				lookup_msg(ospf_nsm_state_msg, onbr->state,
  609|      0|					   NULL));
  610|       |
  611|       |		/* If the neighbor is in a lesser state than Exchange, it
  612|       |		   does not participate in flooding, and the next neighbor
  613|       |		   should be examined. */
  614|      0|		if (onbr->state < NSM_Exchange)
  ------------------
  |  |   21|      0|#define NSM_Exchange		7
  ------------------
  |  Branch (614:7): [True: 0, False: 0]
  ------------------
  615|      0|			continue;
  616|       |
  617|       |		/* If the adjacency is not yet full (neighbor state is
  618|       |		   Exchange or Loading), examine the Link state request
  619|       |		   list associated with this adjacency.  If there is an
  620|       |		   instance of the new LSA on the list, it indicates that
  621|       |		   the neighboring router has an instance of the LSA
  622|       |		   already.  Compare the new LSA to the neighbor's copy: */
  623|      0|		if (onbr->state < NSM_Full) {
  ------------------
  |  |   23|      0|#define NSM_Full		9
  ------------------
  |  Branch (623:7): [True: 0, False: 0]
  ------------------
  624|      0|			if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|      0|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|      0|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  625|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  626|      0|					"%s: adj to onbr %pI4 is not Full (%s)",
  627|      0|					__func__, &onbr->router_id,
  628|      0|					lookup_msg(ospf_nsm_state_msg,
  629|      0|						   onbr->state, NULL));
  630|      0|			ls_req = ospf_ls_request_lookup(onbr, lsa);
  631|      0|			if (ls_req != NULL) {
  ------------------
  |  Branch (631:8): [True: 0, False: 0]
  ------------------
  632|      0|				int ret;
  633|       |
  634|      0|				ret = ospf_lsa_more_recent(ls_req, lsa);
  635|       |				/* The new LSA is less recent. */
  636|      0|				if (ret > 0)
  ------------------
  |  Branch (636:9): [True: 0, False: 0]
  ------------------
  637|      0|					continue;
  638|       |				/* The two copies are the same instance, then
  639|       |				   delete
  640|       |				   the LSA from the Link state request list. */
  641|      0|				else if (ret == 0) {
  ------------------
  |  Branch (641:14): [True: 0, False: 0]
  ------------------
  642|      0|					ospf_ls_request_delete(onbr, ls_req);
  643|      0|					ospf_check_nbr_loading(onbr);
  644|      0|					continue;
  645|      0|				}
  646|       |				/* The new LSA is more recent.  Delete the LSA
  647|       |				   from the Link state request list. */
  648|      0|				else {
  649|      0|					ospf_ls_request_delete(onbr, ls_req);
  650|      0|					ospf_check_nbr_loading(onbr);
  651|      0|				}
  652|      0|			}
  653|      0|		}
  654|       |
  655|      0|		if (IS_OPAQUE_LSA(lsa->data->type)) {
  ------------------
  |  |   15|      0|	((type) == OSPF_OPAQUE_LINK_LSA || (type) == OSPF_OPAQUE_AREA_LSA      \
  |  |  ------------------
  |  |  |  |   32|      0|#define OSPF_OPAQUE_LINK_LSA	      9
  |  |  ------------------
  |  |               	((type) == OSPF_OPAQUE_LINK_LSA || (type) == OSPF_OPAQUE_AREA_LSA      \
  |  |  ------------------
  |  |  |  |   33|      0|#define OSPF_OPAQUE_AREA_LSA	     10
  |  |  ------------------
  |  |  |  Branch (15:3): [True: 0, False: 0]
  |  |  |  Branch (15:37): [True: 0, False: 0]
  |  |  ------------------
  |  |   16|      0|	 || (type) == OSPF_OPAQUE_AS_LSA)
  |  |  ------------------
  |  |  |  |   34|      0|#define OSPF_OPAQUE_AS_LSA	     11
  |  |  ------------------
  |  |  |  Branch (16:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  656|      0|			if (!CHECK_FLAG(onbr->options, OSPF_OPTION_O)) {
  ------------------
  |  |  394|      0|#define CHECK_FLAG(V,F)      ((V) & (F))
  ------------------
  |  Branch (656:8): [True: 0, False: 0]
  ------------------
  657|      0|				if (IS_DEBUG_OSPF(lsa, LSA_FLOODING))
  ------------------
  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   33|      0|#define OSPF_DEBUG_LSA_FLOODING	0x02
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  658|      0|					zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  659|      0|						"%s: Skipping neighbor %s via %pI4 -- Not Opaque-capable.",
  660|      0|						__func__, IF_NAME(oi),
  661|      0|						&onbr->router_id);
  662|      0|				continue;
  663|      0|			}
  664|      0|		}
  665|       |
  666|       | /* If the new LSA was received from this neighbor,
  667|       |    examine the next neighbor. */
  668|      0|		if (inbr) {
  ------------------
  |  Branch (668:7): [True: 0, False: 0]
  ------------------
  669|       |			/*
  670|       |			 * Triggered by LSUpd message parser "ospf_ls_upd ()".
  671|       |			 * E.g., all LSAs handling here is received via network.
  672|       |			 */
  673|      0|			if (IPV4_ADDR_SAME(&inbr->router_id,
  ------------------
  |  |  342|      0|#define IPV4_ADDR_SAME(A,B)  ipv4_addr_same((A), (B))
  |  |  ------------------
  |  |  |  Branch (342:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  674|      0|					   &onbr->router_id)) {
  675|      0|				if (IS_DEBUG_OSPF(lsa, LSA_FLOODING))
  ------------------
  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   33|      0|#define OSPF_DEBUG_LSA_FLOODING	0x02
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  676|      0|					zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  677|      0|						"%s: Skipping neighbor %s via %pI4 -- inbr == onbr.",
  678|      0|						__func__, IF_NAME(oi),
  679|      0|						&inbr->router_id);
  680|      0|				continue;
  681|      0|			}
  682|      0|		} else {
  683|       |			/*
  684|       |			 * Triggered by MaxAge remover, so far.
  685|       |			 * NULL "inbr" means flooding starts from this node.
  686|       |			 */
  687|      0|			if (IPV4_ADDR_SAME(&lsa->data->adv_router,
  ------------------
  |  |  342|      0|#define IPV4_ADDR_SAME(A,B)  ipv4_addr_same((A), (B))
  |  |  ------------------
  |  |  |  Branch (342:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  688|      0|					   &onbr->router_id)) {
  689|      0|				if (IS_DEBUG_OSPF(lsa, LSA_FLOODING))
  ------------------
  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   33|      0|#define OSPF_DEBUG_LSA_FLOODING	0x02
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  690|      0|					zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  691|      0|						"%s: Skipping neighbor %s via %pI4 -- lsah->adv_router == onbr.",
  692|      0|						__func__, IF_NAME(oi),
  693|      0|						&onbr->router_id);
  694|      0|				continue;
  695|      0|			}
  696|      0|		}
  697|       |
  698|       |		/* Add the new LSA to the Link state retransmission list
  699|       |		   for the adjacency. The LSA will be retransmitted
  700|       |		   at intervals until an acknowledgment is seen from
  701|       |		   the neighbor. */
  702|      0|		ospf_ls_retransmit_add(onbr, lsa);
  703|      0|		retx_flag = 1;
  704|      0|	}
  705|       |
  706|       |	/* If in the previous step, the LSA was NOT added to any of
  707|       |	   the Link state retransmission lists, there is no need to
  708|       |	   flood the LSA out the interface. */
  709|      0|	if (retx_flag == 0) {
  ------------------
  |  Branch (709:6): [True: 0, False: 0]
  ------------------
  710|      0|		return (inbr && inbr->oi == oi);
  ------------------
  |  Branch (710:11): [True: 0, False: 0]
  |  Branch (710:19): [True: 0, False: 0]
  ------------------
  711|      0|	}
  712|       |
  713|       |	/* if we've received the lsa on this interface we need to perform
  714|       |	   additional checking */
  715|      0|	if (inbr && (inbr->oi == oi)) {
  ------------------
  |  Branch (715:6): [True: 0, False: 0]
  |  Branch (715:14): [True: 0, False: 0]
  ------------------
  716|       |		/* If the new LSA was received on this interface, and it was
  717|       |		   received from either the Designated Router or the Backup
  718|       |		   Designated Router, chances are that all the neighbors have
  719|       |		   received the LSA already. */
  720|      0|		if (NBR_IS_DR(inbr) || NBR_IS_BDR(inbr)) {
  ------------------
  |  |   83|      0|#define NBR_IS_DR(n)	IPV4_ADDR_SAME (&n->address.u.prefix4, &n->d_router)
  |  |  ------------------
  |  |  |  |  342|      0|#define IPV4_ADDR_SAME(A,B)  ipv4_addr_same((A), (B))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (342:30): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              		if (NBR_IS_DR(inbr) || NBR_IS_BDR(inbr)) {
  ------------------
  |  |   84|      0|#define NBR_IS_BDR(n)   IPV4_ADDR_SAME (&n->address.u.prefix4, &n->bd_router)
  |  |  ------------------
  |  |  |  |  342|      0|#define IPV4_ADDR_SAME(A,B)  ipv4_addr_same((A), (B))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (342:30): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  721|      0|			if (IS_DEBUG_OSPF(lsa, LSA_FLOODING))
  ------------------
  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   33|      0|#define OSPF_DEBUG_LSA_FLOODING	0x02
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  722|      0|				zlog_debug("%s: DR/BDR NOT SEND to int %s (%s)",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  723|      0|					   __func__, IF_NAME(oi),
  724|      0|					   ospf_get_name(oi->ospf));
  725|      0|			return 1;
  726|      0|		}
  727|       |
  728|       |		/* If the new LSA was received on this interface, and the
  729|       |		   interface state is Backup, examine the next interface.  The
  730|       |		   Designated Router will do the flooding on this interface.
  731|       |		   However, if the Designated Router fails the router will
  732|       |		   end up retransmitting the updates. */
  733|       |
  734|      0|		if (oi->state == ISM_Backup) {
  ------------------
  |  |   20|      0|#define ISM_Backup                        6
  ------------------
  |  Branch (734:7): [True: 0, False: 0]
  ------------------
  735|      0|			if (IS_DEBUG_OSPF(lsa, LSA_FLOODING))
  ------------------
  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   33|      0|#define OSPF_DEBUG_LSA_FLOODING	0x02
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  736|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  737|      0|					"%s: ISM_Backup NOT SEND to int %s (%s)",
  738|      0|					__func__, IF_NAME(oi),
  739|      0|					ospf_get_name(oi->ospf));
  740|      0|			return 1;
  741|      0|		}
  742|      0|	}
  743|       |
  744|       |	/* The LSA must be flooded out the interface. Send a Link State
  745|       |	   Update packet (including the new LSA as contents) out the
  746|       |	   interface.  The LSA's LS age must be incremented by InfTransDelay
  747|       |	   (which	must be	> 0) when it is copied into the outgoing Link
  748|       |	   State Update packet (until the LS age field reaches the maximum
  749|       |	   value of MaxAge). */
  750|      0|	if (IS_DEBUG_OSPF(lsa, LSA_FLOODING))
  ------------------
  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   33|      0|#define OSPF_DEBUG_LSA_FLOODING	0x02
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  751|      0|		zlog_debug("%s: DR/BDR sending upd to int %s (%s)", __func__,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  752|      0|			   IF_NAME(oi), ospf_get_name(oi->ospf));
  753|       |
  754|       |	/*  RFC2328  Section 13.3
  755|       |	    On non-broadcast networks, separate	Link State Update
  756|       |	    packets must be sent, as unicasts, to each adjacent	neighbor
  757|       |	    (i.e., those in state Exchange or greater).	 The destination
  758|       |	    IP addresses for these packets are the neighbors' IP
  759|       |	    addresses.   */
  760|      0|	if (oi->type == OSPF_IFTYPE_NBMA) {
  ------------------
  |  |   46|      0|#define OSPF_IFTYPE_NBMA		3
  ------------------
  |  Branch (760:6): [True: 0, False: 0]
  ------------------
  761|      0|		struct ospf_neighbor *nbr;
  762|       |
  763|      0|		for (rn = route_top(oi->nbrs); rn; rn = route_next(rn)) {
  ------------------
  |  Branch (763:34): [True: 0, False: 0]
  ------------------
  764|      0|			nbr = rn->info;
  765|       |
  766|      0|			if (!nbr)
  ------------------
  |  Branch (766:8): [True: 0, False: 0]
  ------------------
  767|      0|				continue;
  768|      0|			if (nbr != oi->nbr_self && nbr->state >= NSM_Exchange)
  ------------------
  |  |   21|      0|#define NSM_Exchange		7
  ------------------
  |  Branch (768:8): [True: 0, False: 0]
  |  Branch (768:31): [True: 0, False: 0]
  ------------------
  769|      0|				ospf_ls_upd_send_lsa(nbr, lsa,
  770|      0|						     OSPF_SEND_PACKET_DIRECT);
  ------------------
  |  |   27|      0|#define OSPF_SEND_PACKET_DIRECT         1
  ------------------
  771|      0|		}
  772|      0|	} else
  773|       |		/* If P2MP delayed reflooding is configured and the LSA was
  774|       |		   received from a neighbor on the P2MP interface, do not flood
  775|       |		   if back out on the interface. The LSA will be  retransmitted
  776|       |		   upon expiration of each neighbor's retransmission timer. This
  777|       |		   will allow time to receive a multicast multicast link state
  778|       |		   acknoweldgement and remove the LSA from each neighbor's link
  779|       |		   state retransmission list. */
  780|      0|		if (oi->p2mp_delay_reflood &&
  ------------------
  |  Branch (780:7): [True: 0, False: 0]
  ------------------
  781|      0|		    (oi->type == OSPF_IFTYPE_POINTOMULTIPOINT) &&
  ------------------
  |  |   47|      0|#define OSPF_IFTYPE_POINTOMULTIPOINT	4
  ------------------
  |  Branch (781:7): [True: 0, False: 0]
  ------------------
  782|      0|		    (inbr != NULL) && (oi == inbr->oi)) {
  ------------------
  |  Branch (782:7): [True: 0, False: 0]
  |  Branch (782:25): [True: 0, False: 0]
  ------------------
  783|      0|			if (IS_DEBUG_OSPF(lsa, LSA_FLOODING))
  ------------------
  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   33|      0|#define OSPF_DEBUG_LSA_FLOODING	0x02
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  784|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  785|      0|					"Delay reflooding for LSA[%s] from NBR %pI4 on interface %s",
  786|      0|					dump_lsa_key(lsa),
  787|      0|					inbr ? &(inbr->router_id)
  788|      0|					     : &(oi->ospf->router_id),
  789|      0|					IF_NAME(oi));
  790|      0|		} else
  791|      0|			ospf_ls_upd_send_lsa(oi->nbr_self, lsa,
  792|      0|					     OSPF_SEND_PACKET_INDIRECT);
  ------------------
  |  |   28|      0|#define OSPF_SEND_PACKET_INDIRECT       2
  ------------------
  793|       |
  794|      0|	return 0;
  795|      0|}
ospf_flood_through_area:
  799|  2.08k|{
  800|  2.08k|	struct listnode *node, *nnode;
  801|  2.08k|	struct ospf_interface *oi;
  802|  2.08k|	int lsa_ack_flag = 0;
  803|       |
  804|  2.08k|	assert(area);
  ------------------
  |  |   51|  2.08k|	({                                                                     \
  |  |   52|  2.08k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  2.08k|			(used)) = {                                            \
  |  |   54|  2.08k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  2.08k|	{                                                                      \
  |  |  |  |  284|  2.08k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  2.08k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  2.08k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  2.08k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  2.08k|	}                                                                      \
  |  |  ------------------
  |  |   55|  2.08k|			.expr = #expr_,                                        \
  |  |   56|  2.08k|		};                                                             \
  |  |   57|  2.08k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  2.08k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  2.08k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  2.08k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  2.08k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 2.08k]
  |  |  |  Branch (58:24): [True: 2.08k, False: 0]
  |  |  ------------------
  |  |   59|  2.08k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  2.08k|	})
  ------------------
  805|       |	/* All other types are specific to a single area (Area A).  The
  806|       |	   eligible interfaces are all those interfaces attaching to the
  807|       |	   Area A.  If Area A is the backbone, this includes all the virtual
  808|       |	   links.  */
  809|  2.08k|	for (ALL_LIST_ELEMENTS(area->oiflist, node, nnode, oi)) {
  ------------------
  |  |  320|  2.08k|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|  2.08k|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 2.08k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  321|  4.16k|	(node) != NULL                                                         \
  |  |  ------------------
  |  |  |  Branch (321:2): [True: 2.08k, False: 2.08k]
  |  |  ------------------
  |  |  322|  4.16k|		&& ((data) = static_cast(data, listgetdata(node)),             \
  |  |  ------------------
  |  |  |  |  204|  12.5k|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 2.08k, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 2.08k]
  |  |  |  |  |  Branch (204:28): [True: 2.08k, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 2.08k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:6): [True: 2.08k, False: 0]
  |  |  ------------------
  |  |  323|  4.16k|		    (nextnode) = node->next, 1);                               \
  |  |  324|  2.08k|	(node) = (nextnode), ((data) = NULL)
  ------------------
  810|  2.08k|		if (area->area_id.s_addr != OSPF_AREA_BACKBONE
  ------------------
  |  |   73|  4.16k|#define OSPF_AREA_BACKBONE              0x00000000      /* 0.0.0.0 */
  ------------------
  |  Branch (810:7): [True: 0, False: 2.08k]
  ------------------
  811|      0|		    && oi->type == OSPF_IFTYPE_VIRTUALLINK)
  ------------------
  |  |   48|      0|#define OSPF_IFTYPE_VIRTUALLINK		5
  ------------------
  |  Branch (811:10): [True: 0, False: 0]
  ------------------
  812|      0|			continue;
  813|       |
  814|  2.08k|		if ((lsa->data->type == OSPF_OPAQUE_LINK_LSA)
  ------------------
  |  |   32|  2.08k|#define OSPF_OPAQUE_LINK_LSA	      9
  ------------------
  |  Branch (814:7): [True: 1.25k, False: 825]
  ------------------
  815|  1.25k|		    && (lsa->oi != oi)) {
  ------------------
  |  Branch (815:10): [True: 0, False: 1.25k]
  ------------------
  816|       |			/*
  817|       |			 * Link local scoped Opaque-LSA should only be flooded
  818|       |			 * for the link on which the LSA has received.
  819|       |			 */
  820|      0|			if (IS_DEBUG_OSPF(lsa, LSA_FLOODING))
  ------------------
  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   33|      0|#define OSPF_DEBUG_LSA_FLOODING	0x02
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  821|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  822|      0|					"Type-9 Opaque-LSA: lsa->oi(%p) != oi(%p)",
  823|      0|					(void *)lsa->oi, (void *)oi);
  824|      0|			continue;
  825|      0|		}
  826|       |
  827|  2.08k|		if (ospf_flood_through_interface(oi, inbr, lsa))
  ------------------
  |  Branch (827:7): [True: 0, False: 2.08k]
  ------------------
  828|      0|			lsa_ack_flag = 1;
  829|  2.08k|	}
  830|       |
  831|  2.08k|	return (lsa_ack_flag);
  832|  2.08k|}
ospf_flood_through_as:
  836|    282|{
  837|    282|	struct listnode *node;
  838|    282|	struct ospf_area *area;
  839|    282|	int lsa_ack_flag;
  840|       |
  841|    282|	lsa_ack_flag = 0;
  842|       |
  843|       |	/* The incoming LSA is type 5 or type 7  (AS-EXTERNAL or AS-NSSA )
  844|       |
  845|       |	  Divert the Type-5 LSA's to all non-NSSA/STUB areas
  846|       |
  847|       |	  Divert the Type-7 LSA's to all NSSA areas
  848|       |
  849|       |	   AS-external-LSAs are flooded throughout the entire AS, with the
  850|       |	   exception of stub areas (see Section 3.6).  The eligible
  851|       |	   interfaces are all the router's interfaces, excluding virtual
  852|       |	   links and those interfaces attaching to stub areas.  */
  853|       |
  854|    282|	if (CHECK_FLAG(lsa->flags, OSPF_LSA_LOCAL_XLT)) /* Translated from 7  */
  ------------------
  |  |  394|    282|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 0, False: 282]
  |  |  ------------------
  ------------------
  855|      0|		if (IS_DEBUG_OSPF_NSSA)
  ------------------
  |  |   94|      0|#define IS_DEBUG_OSPF_NSSA  IS_DEBUG_OSPF(nssa, NSSA)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|      0|#define OSPF_DEBUG_NSSA		0x02
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  856|      0|			zlog_debug("Flood/AS: NSSA TRANSLATED LSA");
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  857|       |
  858|    282|	for (ALL_LIST_ELEMENTS_RO(ospf->areas, node, area)) {
  ------------------
  |  |  333|    282|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|    282|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 282, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|    282|	(node) != NULL && ((data) = static_cast(data, listgetdata(node)), 1);  \
  |  |  ------------------
  |  |  |  |  204|      0|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (334:2): [True: 0, False: 282]
  |  |  |  Branch (334:20): [True: 0, False: 0]
  |  |  ------------------
  |  |  335|    282|	(node) = listnextnode(node), ((data) = NULL)
  |  |  ------------------
  |  |  |  |   49|      0|#define listnextnode(X) ((X) ? ((X)->next) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  859|      0|		int continue_flag = 0;
  860|      0|		struct listnode *if_node;
  861|      0|		struct ospf_interface *oi;
  862|       |
  863|      0|		switch (area->external_routing) {
  864|       |		/* Don't send AS externals into stub areas.  Various types
  865|       |		   of support for partial stub areas can be implemented
  866|       |		   here.  NSSA's will receive Type-7's that have areas
  867|       |		   matching the originl LSA. */
  868|      0|		case OSPF_AREA_NSSA: /* Sending Type 5 or 7 into NSSA area */
  ------------------
  |  |   78|      0|#define OSPF_AREA_NSSA          2
  ------------------
  |  Branch (868:3): [True: 0, False: 0]
  ------------------
  869|       |				     /* Type-7, flood NSSA area */
  870|      0|			if (lsa->data->type == OSPF_AS_NSSA_LSA
  ------------------
  |  |   30|      0|#define OSPF_AS_NSSA_LSA	              7
  ------------------
  |  Branch (870:8): [True: 0, False: 0]
  ------------------
  871|      0|			    && area == lsa->area)
  ------------------
  |  Branch (871:11): [True: 0, False: 0]
  ------------------
  872|       |				/* We will send it. */
  873|      0|				continue_flag = 0;
  874|      0|			else
  875|      0|				continue_flag = 1; /* Skip this NSSA area for
  876|       |						      Type-5's et al */
  877|      0|			break;
  878|       |
  879|      0|		case OSPF_AREA_TYPE_MAX:
  ------------------
  |  |   79|      0|#define OSPF_AREA_TYPE_MAX	3
  ------------------
  |  Branch (879:3): [True: 0, False: 0]
  ------------------
  880|      0|		case OSPF_AREA_STUB:
  ------------------
  |  |   77|      0|#define OSPF_AREA_STUB          1
  ------------------
  |  Branch (880:3): [True: 0, False: 0]
  ------------------
  881|      0|			continue_flag = 1; /* Skip this area. */
  882|      0|			break;
  883|       |
  884|      0|		case OSPF_AREA_DEFAULT:
  ------------------
  |  |   76|      0|#define OSPF_AREA_DEFAULT       0
  ------------------
  |  Branch (884:3): [True: 0, False: 0]
  ------------------
  885|      0|		default:
  ------------------
  |  Branch (885:3): [True: 0, False: 0]
  ------------------
  886|       |			/* No Type-7 into normal area */
  887|      0|			if (lsa->data->type == OSPF_AS_NSSA_LSA)
  ------------------
  |  |   30|      0|#define OSPF_AS_NSSA_LSA	              7
  ------------------
  |  Branch (887:8): [True: 0, False: 0]
  ------------------
  888|      0|				continue_flag = 1; /* skip Type-7 */
  889|      0|			else
  890|      0|				continue_flag = 0; /* Do this area. */
  891|      0|			break;
  892|      0|		}
  893|       |
  894|       |		/* Do continue for above switch.  Saves a big if then mess */
  895|      0|		if (continue_flag)
  ------------------
  |  Branch (895:7): [True: 0, False: 0]
  ------------------
  896|      0|			continue; /* main for-loop */
  897|       |
  898|       |		/* send to every interface in this area */
  899|       |
  900|      0|		for (ALL_LIST_ELEMENTS_RO(area->oiflist, if_node, oi)) {
  ------------------
  |  |  333|      0|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|      0|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|      0|	(node) != NULL && ((data) = static_cast(data, listgetdata(node)), 1);  \
  |  |  ------------------
  |  |  |  |  204|      0|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (334:2): [True: 0, False: 0]
  |  |  |  Branch (334:20): [True: 0, False: 0]
  |  |  ------------------
  |  |  335|      0|	(node) = listnextnode(node), ((data) = NULL)
  |  |  ------------------
  |  |  |  |   49|      0|#define listnextnode(X) ((X) ? ((X)->next) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  901|       |			/* Skip virtual links */
  902|      0|			if (oi->type != OSPF_IFTYPE_VIRTUALLINK)
  ------------------
  |  |   48|      0|#define OSPF_IFTYPE_VIRTUALLINK		5
  ------------------
  |  Branch (902:8): [True: 0, False: 0]
  ------------------
  903|      0|				if (ospf_flood_through_interface(oi, inbr,
  ------------------
  |  Branch (903:9): [True: 0, False: 0]
  ------------------
  904|      0|								 lsa)) /* lsa */
  905|      0|					lsa_ack_flag = 1;
  906|      0|		}
  907|      0|	} /* main area for-loop */
  908|       |
  909|    282|	return (lsa_ack_flag);
  910|    282|}
ospf_flood_through:
  914|  2.26k|{
  915|  2.26k|	int lsa_ack_flag = 0;
  916|       |
  917|       |	/* Type-7 LSA's for NSSA are flooded throughout the AS here, and
  918|       |	   upon return are updated in the LSDB for Type-7's.  Later,
  919|       |	   re-fresh will re-send them (and also, if ABR, packet code will
  920|       |	   translate to Type-5's)
  921|       |
  922|       |	   As usual, Type-5 LSA's (if not DISCARDED because we are STUB or
  923|       |	   NSSA) are flooded throughout the AS, and are updated in the
  924|       |	   global table.  */
  925|       |	/*
  926|       |	 * At the common sub-sub-function "ospf_flood_through_interface()",
  927|       |	 * a parameter "inbr" will be used to distinguish the called context
  928|       |	 * whether the given LSA was received from the neighbor, or the
  929|       |	 * flooding for the LSA starts from this node (e.g. the LSA was self-
  930|       |	 * originated, or the LSA is going to be flushed from routing domain).
  931|       |	 *
  932|       |	 * So, for consistency reasons, this function "ospf_flood_through()"
  933|       |	 * should also allow the usage that the given "inbr" parameter to be
  934|       |	 * NULL. If we do so, corresponding AREA parameter should be referred
  935|       |	 * by "lsa->area", instead of "inbr->oi->area".
  936|       |	 */
  937|  2.26k|	switch (lsa->data->type) {
  938|    132|	case OSPF_AS_EXTERNAL_LSA: /* Type-5 */
  ------------------
  |  |   28|    132|#define OSPF_AS_EXTERNAL_LSA          5
  ------------------
  |  Branch (938:2): [True: 132, False: 2.13k]
  ------------------
  939|    192|	case OSPF_OPAQUE_AS_LSA:
  ------------------
  |  |   34|    192|#define OSPF_OPAQUE_AS_LSA	     11
  ------------------
  |  Branch (939:2): [True: 60, False: 2.20k]
  ------------------
  940|    192|		lsa_ack_flag = ospf_flood_through_as(ospf, inbr, lsa);
  941|    192|		break;
  942|       |	/* Type-7 Only received within NSSA, then flooded */
  943|      0|	case OSPF_AS_NSSA_LSA:
  ------------------
  |  |   30|      0|#define OSPF_AS_NSSA_LSA	              7
  ------------------
  |  Branch (943:2): [True: 0, False: 2.26k]
  ------------------
  944|       |		/* Any P-bit was installed with the Type-7. */
  945|       |
  946|      0|		if (IS_DEBUG_OSPF_NSSA)
  ------------------
  |  |   94|      0|#define IS_DEBUG_OSPF_NSSA  IS_DEBUG_OSPF(nssa, NSSA)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|      0|#define OSPF_DEBUG_NSSA		0x02
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  947|      0|			zlog_debug("%s: LOCAL NSSA FLOOD of Type-7.", __func__);
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  948|       |	/* Fallthrough */
  949|  2.07k|	default:
  ------------------
  |  Branch (949:2): [True: 2.07k, False: 192]
  ------------------
  950|  2.07k|		lsa_ack_flag = ospf_flood_through_area(lsa->area, inbr, lsa);
  951|  2.07k|		break;
  952|  2.26k|	}
  953|       |
  954|       |	/* always need to send ack when incoming intf is PTP or P2MP */
  955|  2.26k|	if (inbr != NULL && (inbr->oi->type == OSPF_IFTYPE_POINTOMULTIPOINT ||
  ------------------
  |  |   47|  4.53k|#define OSPF_IFTYPE_POINTOMULTIPOINT	4
  ------------------
  |  Branch (955:6): [True: 2.26k, False: 0]
  |  Branch (955:23): [True: 0, False: 2.26k]
  ------------------
  956|  2.26k|			     inbr->oi->type == OSPF_IFTYPE_POINTOPOINT))
  ------------------
  |  |   44|  2.26k|#define OSPF_IFTYPE_POINTOPOINT		1
  ------------------
  |  Branch (956:9): [True: 0, False: 2.26k]
  ------------------
  957|      0|		lsa_ack_flag = 1;
  958|       |
  959|  2.26k|	return (lsa_ack_flag);
  960|  2.26k|}
ospf_ls_request_add:
  965|  8.86k|{
  966|       |	/*
  967|       |	 * We cannot make use of the newly introduced callback function
  968|       |	 * "lsdb->new_lsa_hook" to replace debug output below, just because
  969|       |	 * it seems no simple and smart way to pass neighbor information to
  970|       |	 * the common function "ospf_lsdb_add()" -- endo.
  971|       |	 */
  972|  8.86k|	if (IS_DEBUG_OSPF(lsa, LSA_FLOODING))
  ------------------
  |  |   91|  8.86k|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   33|  8.86k|#define OSPF_DEBUG_LSA_FLOODING	0x02
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 8.86k]
  |  |  ------------------
  ------------------
  973|      0|		zlog_debug("RqstL(%lu)++, NBR(%pI4(%s)), LSA[%s]",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  974|  8.86k|			   ospf_ls_request_count(nbr),
  975|  8.86k|			   &nbr->router_id,
  976|  8.86k|			   ospf_get_name(nbr->oi->ospf), dump_lsa_key(lsa));
  977|       |
  978|  8.86k|	ospf_lsdb_add(&nbr->ls_req, lsa);
  979|  8.86k|}
ospf_ls_request_lookup:
 1019|  5.21k|{
 1020|  5.21k|	return ospf_lsdb_lookup(&nbr->ls_req, lsa);
 1021|  5.21k|}
ospf_ls_request_new:
 1024|  9.25k|{
 1025|  9.25k|	struct ospf_lsa *new;
 1026|       |
 1027|  9.25k|	new = ospf_lsa_new_and_data(OSPF_LSA_HEADER_SIZE);
  ------------------
  |  |   36|  9.25k|#define OSPF_LSA_HEADER_SIZE	     20U
  ------------------
 1028|  9.25k|	memcpy(new->data, lsah, OSPF_LSA_HEADER_SIZE);
  ------------------
  |  |   36|  9.25k|#define OSPF_LSA_HEADER_SIZE	     20U
  ------------------
 1029|       |
 1030|  9.25k|	return new;
 1031|  9.25k|}
ospf_ls_retransmit_lookup:
 1128|  2.46k|{
 1129|  2.46k|	return ospf_lsdb_lookup(&nbr->ls_rxmt, lsa);
 1130|  2.46k|}
ospf_lsa_flush_as:
 1207|     87|{
 1208|     87|	if (ospf_lsa_is_self_originated(ospf, lsa)
  ------------------
  |  Branch (1208:6): [True: 87, False: 0]
  ------------------
 1209|     87|	    && ospf->gr_info.restart_in_progress) {
  ------------------
  |  Branch (1209:9): [True: 0, False: 87]
  ------------------
 1210|      0|		if (IS_DEBUG_OSPF(lsa, LSA_GENERATE))
  ------------------
  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   32|      0|#define OSPF_DEBUG_LSA_GENERATE 0x01
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1211|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1212|      0|				"%s:LSA[Type%d:%pI4]: Graceful Restart in progress -- not flushing self-originated LSA",
 1213|      0|				ospf_get_name(ospf), lsa->data->type,
 1214|      0|				&lsa->data->id);
 1215|      0|		return;
 1216|      0|	}
 1217|       |
 1218|       |	/* Reset the lsa origination time such that it gives
 1219|       |	   more time for the ACK to be received and avoid
 1220|       |	   retransmissions */
 1221|     87|	lsa->data->ls_age = htons(OSPF_LSA_MAXAGE);
 1222|     87|	if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|     87|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|     87|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|     87|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 87]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1223|      0|		zlog_debug("%s: MaxAge set to LSA[%s]", __func__,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1224|     87|			   dump_lsa_key(lsa));
 1225|     87|	monotime(&lsa->tv_recv);
 1226|     87|	lsa->tv_orig = lsa->tv_recv;
 1227|       |	ospf_flood_through_as(ospf, NULL, lsa);
 1228|     87|	ospf_lsa_maxage(ospf, lsa);
 1229|     87|}
ospf_flood.c:ospf_process_self_originated_lsa:
  207|    273|{
  208|    273|	struct ospf_interface *oi;
  209|    273|	struct external_info *ei;
  210|    273|	struct listnode *node;
  211|    273|	struct as_external_lsa *al;
  212|    273|	struct prefix_ipv4 p;
  213|    273|	struct ospf_external_aggr_rt *aggr;
  214|       |
  215|    273|	if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|    273|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|    273|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|    273|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 273]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  216|      0|		zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  217|    273|			"%s:LSA[Type%d:%pI4]: Process self-originated LSA seq 0x%x",
  218|    273|			ospf_get_name(ospf), new->data->type,
  219|    273|			&new->data->id, ntohl(new->data->ls_seqnum));
  220|       |
  221|       |	/* If we're here, we installed a self-originated LSA that we received
  222|       |	   from a neighbor, i.e. it's more recent.  We must see whether we want
  223|       |	   to originate it.
  224|       |	   If yes, we should use this LSA's sequence number and reoriginate
  225|       |	   a new instance.
  226|       |	   if not --- we must flush this LSA from the domain. */
  227|    273|	switch (new->data->type) {
  228|      1|	case OSPF_ROUTER_LSA:
  ------------------
  |  |   24|      1|#define OSPF_ROUTER_LSA               1
  ------------------
  |  Branch (228:2): [True: 1, False: 272]
  ------------------
  229|       |		/* Originate a new instance and schedule flooding */
  230|      1|		if (area->router_lsa_self)
  ------------------
  |  Branch (230:7): [True: 0, False: 1]
  ------------------
  231|      0|			area->router_lsa_self->data->ls_seqnum =
  232|      0|				new->data->ls_seqnum;
  233|      1|		ospf_router_lsa_update_area(area);
  234|      1|		return;
  235|    137|	case OSPF_NETWORK_LSA:
  ------------------
  |  |   25|    137|#define OSPF_NETWORK_LSA              2
  ------------------
  |  Branch (235:2): [True: 137, False: 136]
  ------------------
  236|    137|	case OSPF_OPAQUE_LINK_LSA:
  ------------------
  |  |   32|    137|#define OSPF_OPAQUE_LINK_LSA	      9
  ------------------
  |  Branch (236:2): [True: 0, False: 273]
  ------------------
  237|       |		/* We must find the interface the LSA could belong to.
  238|       |		   If the interface is no more a broadcast type or we are no
  239|       |		   more
  240|       |		   the DR, we flush the LSA otherwise -- create the new instance
  241|       |		   and
  242|       |		   schedule flooding. */
  243|       |
  244|       |		/* Look through all interfaces, not just area, since interface
  245|       |		   could be moved from one area to another. */
  246|    137|		for (ALL_LIST_ELEMENTS_RO(ospf->oiflist, node, oi))
  ------------------
  |  |  333|    137|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|    137|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 137, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|    274|	(node) != NULL && ((data) = static_cast(data, listgetdata(node)), 1);  \
  |  |  ------------------
  |  |  |  |  204|    822|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 137, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 137]
  |  |  |  |  |  Branch (204:28): [True: 137, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 137]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (334:2): [True: 137, False: 29]
  |  |  |  Branch (334:20): [True: 137, False: 0]
  |  |  ------------------
  |  |  335|    137|	(node) = listnextnode(node), ((data) = NULL)
  |  |  ------------------
  |  |  |  |   49|     29|#define listnextnode(X) ((X) ? ((X)->next) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:26): [True: 29, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  247|       |			/* These are sanity check. */
  248|    137|			if (IPV4_ADDR_SAME(&oi->address->u.prefix4,
  ------------------
  |  |  342|    137|#define IPV4_ADDR_SAME(A,B)  ipv4_addr_same((A), (B))
  |  |  ------------------
  |  |  |  Branch (342:30): [True: 108, False: 29]
  |  |  ------------------
  ------------------
  249|    137|					   &new->data->id)) {
  250|    108|				if (oi->area != area
  ------------------
  |  Branch (250:9): [True: 0, False: 108]
  ------------------
  251|    108|				    || oi->type != OSPF_IFTYPE_BROADCAST
  ------------------
  |  |   45|    216|#define OSPF_IFTYPE_BROADCAST		2
  ------------------
  |  Branch (251:12): [True: 108, False: 0]
  ------------------
  252|      0|				    || !IPV4_ADDR_SAME(&oi->address->u.prefix4,
  ------------------
  |  |  342|      0|#define IPV4_ADDR_SAME(A,B)  ipv4_addr_same((A), (B))
  ------------------
  |  Branch (252:12): [True: 0, False: 0]
  ------------------
  253|    108|						       &DR(oi))) {
  254|    108|					ospf_schedule_lsa_flush_area(area, new);
  255|    108|					return;
  256|    108|				}
  257|       |
  258|      0|				if (new->data->type == OSPF_OPAQUE_LINK_LSA) {
  ------------------
  |  |   32|      0|#define OSPF_OPAQUE_LINK_LSA	      9
  ------------------
  |  Branch (258:9): [True: 0, False: 0]
  ------------------
  259|      0|					ospf_opaque_lsa_refresh(new);
  260|      0|					return;
  261|      0|				}
  262|       |
  263|      0|				if (oi->network_lsa_self)
  ------------------
  |  Branch (263:9): [True: 0, False: 0]
  ------------------
  264|      0|					oi->network_lsa_self->data->ls_seqnum =
  265|      0|						new->data->ls_seqnum;
  266|       |				/* Schedule network-LSA origination. */
  267|      0|				ospf_network_lsa_update(oi);
  268|      0|				return;
  269|      0|			}
  270|     29|		break;
  271|     29|	case OSPF_SUMMARY_LSA:
  ------------------
  |  |   26|     10|#define OSPF_SUMMARY_LSA              3
  ------------------
  |  Branch (271:2): [True: 10, False: 263]
  ------------------
  272|     48|	case OSPF_ASBR_SUMMARY_LSA:
  ------------------
  |  |   27|     48|#define OSPF_ASBR_SUMMARY_LSA         4
  ------------------
  |  Branch (272:2): [True: 38, False: 235]
  ------------------
  273|     48|		ospf_schedule_abr_task(ospf);
  274|     48|		break;
  275|     87|	case OSPF_AS_EXTERNAL_LSA:
  ------------------
  |  |   28|     87|#define OSPF_AS_EXTERNAL_LSA          5
  ------------------
  |  Branch (275:2): [True: 87, False: 186]
  ------------------
  276|     87|	case OSPF_AS_NSSA_LSA:
  ------------------
  |  |   30|     87|#define OSPF_AS_NSSA_LSA	              7
  ------------------
  |  Branch (276:2): [True: 0, False: 273]
  ------------------
  277|     87|		if ((new->data->type == OSPF_AS_EXTERNAL_LSA)
  ------------------
  |  |   28|     87|#define OSPF_AS_EXTERNAL_LSA          5
  ------------------
  |  Branch (277:7): [True: 87, False: 0]
  ------------------
  278|     87|		    && CHECK_FLAG(new->flags, OSPF_LSA_LOCAL_XLT)) {
  ------------------
  |  |  394|     87|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 0, False: 87]
  |  |  ------------------
  ------------------
  279|      0|			ospf_translated_nssa_refresh(ospf, NULL, new);
  280|      0|			return;
  281|      0|		}
  282|       |
  283|     87|		al = (struct as_external_lsa *)new->data;
  284|     87|		p.family = AF_INET;
  285|     87|		p.prefixlen = ip_masklen(al->mask);
  286|     87|		p.prefix = new->data->id;
  287|       |
  288|     87|		ei = ospf_external_info_check(ospf, new);
  289|     87|		if (ei) {
  ------------------
  |  Branch (289:7): [True: 0, False: 87]
  ------------------
  290|      0|			if (ospf_external_aggr_match(ospf, &ei->p)) {
  ------------------
  |  Branch (290:8): [True: 0, False: 0]
  ------------------
  291|      0|				if (IS_DEBUG_OSPF(lsa, EXTNL_LSA_AGGR))
  ------------------
  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   37|      0|#define OSPF_DEBUG_EXTNL_LSA_AGGR 0x10
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  292|      0|					zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  293|      0|						"%s, Matching external aggregate route found for %pI4, so don't refresh it.",
  294|      0|						__func__,
  295|      0|						&ei->p.prefix);
  296|       |
  297|       |				/* Aggregated external route shouldn't
  298|       |				 * be in LSDB.
  299|       |				 */
  300|      0|				if (!IS_LSA_MAXAGE(new))
  ------------------
  |  |  211|      0|#define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |  209|      0|#define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|      0|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |               #define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|      0|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (209:20): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |   33|      0|#define OSPF_LSA_MAXAGE                       3600
  |  |  ------------------
  ------------------
  |  Branch (300:9): [True: 0, False: 0]
  ------------------
  301|      0|					ospf_lsa_flush_as(ospf, new);
  302|       |
  303|      0|				return;
  304|      0|			}
  305|       |
  306|      0|			ospf_external_lsa_refresh(ospf, new, ei,
  307|      0|						  LSA_REFRESH_FORCE, false);
  ------------------
  |  |   43|      0|#define LSA_REFRESH_FORCE	1
  ------------------
  308|     87|		} else {
  309|     87|			aggr = (struct ospf_external_aggr_rt *)
  310|     87|				ospf_extrenal_aggregator_lookup(ospf, &p);
  311|     87|			if (aggr) {
  ------------------
  |  Branch (311:8): [True: 0, False: 87]
  ------------------
  312|      0|				struct external_info ei_aggr;
  313|       |
  314|      0|				memset(&ei_aggr, 0,
  315|      0|					sizeof(struct external_info));
  316|      0|				ei_aggr.p = aggr->p;
  317|      0|				ei_aggr.tag = aggr->tag;
  318|      0|				ei_aggr.instance = ospf->instance;
  319|      0|				ei_aggr.route_map_set.metric = -1;
  320|      0|				ei_aggr.route_map_set.metric_type = -1;
  321|       |
  322|      0|				ospf_external_lsa_refresh(ospf, new, &ei_aggr,
  323|      0|						  LSA_REFRESH_FORCE, true);
  ------------------
  |  |   43|      0|#define LSA_REFRESH_FORCE	1
  ------------------
  324|      0|				SET_FLAG(aggr->flags,
  ------------------
  |  |  395|      0|#define SET_FLAG(V,F)        (V) |= (F)
  ------------------
  325|      0|					 OSPF_EXTERNAL_AGGRT_ORIGINATED);
  326|      0|			} else
  327|     87|				ospf_lsa_flush_as(ospf, new);
  328|     87|		}
  329|     87|		break;
  330|     87|	case OSPF_OPAQUE_AREA_LSA:
  ------------------
  |  |   33|      0|#define OSPF_OPAQUE_AREA_LSA	     10
  ------------------
  |  Branch (330:2): [True: 0, False: 273]
  ------------------
  331|      0|		ospf_opaque_lsa_refresh(new);
  332|      0|		break;
  333|      0|	case OSPF_OPAQUE_AS_LSA:
  ------------------
  |  |   34|      0|#define OSPF_OPAQUE_AS_LSA	     11
  ------------------
  |  Branch (333:2): [True: 0, False: 273]
  ------------------
  334|      0|		ospf_opaque_lsa_refresh(new);
  335|       |		/* Reconsideration may needed. */ /* XXX */
  336|      0|		break;
  337|      0|	default:
  ------------------
  |  Branch (337:2): [True: 0, False: 273]
  ------------------
  338|      0|		break;
  339|    273|	}
  340|    273|}

ospf_gr_nvm_read:
  672|      1|{
  673|      1|	char *filepath;
  674|      1|	const char *inst_name;
  675|      1|	json_object *json;
  676|      1|	json_object *json_instances;
  677|      1|	json_object *json_instance;
  678|      1|	json_object *json_timestamp;
  679|      1|	json_object *json_grace_period;
  680|      1|	time_t timestamp = 0;
  681|       |
  682|      1|	filepath = ospf_gr_nvm_filepath(ospf);
  683|      1|	inst_name = ospf_get_name(ospf);
  684|       |
  685|      1|	json = json_object_from_file(filepath);
  686|      1|	if (json == NULL)
  ------------------
  |  Branch (686:6): [True: 1, False: 0]
  ------------------
  687|      1|		json = json_object_new_object();
  688|       |
  689|      1|	json_object_object_get_ex(json, "instances", &json_instances);
  690|      1|	if (!json_instances) {
  ------------------
  |  Branch (690:6): [True: 1, False: 0]
  ------------------
  691|      1|		json_instances = json_object_new_object();
  692|      1|		json_object_object_add(json, "instances", json_instances);
  693|      1|	}
  694|       |
  695|      1|	json_object_object_get_ex(json_instances, inst_name, &json_instance);
  696|      1|	if (!json_instance) {
  ------------------
  |  Branch (696:6): [True: 1, False: 0]
  ------------------
  697|      1|		json_instance = json_object_new_object();
  698|      1|		json_object_object_add(json_instances, inst_name,
  699|      1|				       json_instance);
  700|      1|	}
  701|       |
  702|      1|	json_object_object_get_ex(json_instance, "gracePeriod",
  703|      1|				  &json_grace_period);
  704|      1|	json_object_object_get_ex(json_instance, "timestamp", &json_timestamp);
  705|       |
  706|      1|	if (json_timestamp) {
  ------------------
  |  Branch (706:6): [True: 0, False: 1]
  ------------------
  707|      0|		time_t now;
  708|       |
  709|       |		/* Planned GR: check if the grace period has already expired. */
  710|      0|		now = time(NULL);
  711|      0|		timestamp = json_object_get_int(json_timestamp);
  712|      0|		if (now > timestamp) {
  ------------------
  |  Branch (712:7): [True: 0, False: 0]
  ------------------
  713|      0|			ospf_gr_restart_exit(
  714|      0|				ospf, "grace period has expired already");
  715|      0|		} else
  716|      0|			ospf_gr_restart_enter(ospf, OSPF_GR_SW_RESTART,
  717|      0|					      timestamp);
  718|      1|	} else if (json_grace_period) {
  ------------------
  |  Branch (718:13): [True: 0, False: 1]
  ------------------
  719|      0|		uint32_t grace_period;
  720|       |
  721|       |		/*
  722|       |		 * Unplanned GR: the Grace-LSAs will be sent later as soon as
  723|       |		 * the interfaces are operational.
  724|       |		 */
  725|      0|		grace_period = json_object_get_int(json_grace_period);
  726|      0|		ospf->gr_info.grace_period = grace_period;
  727|      0|		ospf_gr_restart_enter(ospf, OSPF_GR_UNKNOWN_RESTART,
  728|      0|				      time(NULL) + ospf->gr_info.grace_period);
  729|      0|	}
  730|       |
  731|      1|	json_object_object_del(json_instances, inst_name);
  732|       |
  733|       |	json_object_to_file_ext(filepath, json, JSON_C_TO_STRING_PRETTY);
  734|      1|	json_object_free(json);
  735|      1|}
ospf_gr.c:ospf_gr_nvm_filepath:
  563|      1|{
  564|      1|	static char filepath[MAXPATHLEN];
  565|      1|	char instance[16] = "";
  566|       |
  567|      1|	if (ospf->instance)
  ------------------
  |  Branch (567:6): [True: 0, False: 1]
  ------------------
  568|      0|		snprintf(instance, sizeof(instance), "-%d", ospf->instance);
  569|      1|	snprintf(filepath, sizeof(filepath), OSPFD_GR_STATE, instance);
  ------------------
  |  |  685|      1|#define OSPFD_GR_STATE "/var/run%s/ospfd-gr.json"
  ------------------
  570|      1|	return filepath;
  571|      1|}

ospf_gr_helper_instance_init:
  148|      1|{
  149|      1|	if (IS_DEBUG_OSPF_GR)
  ------------------
  |  |  107|      1|#define IS_DEBUG_OSPF_GR IS_DEBUG_OSPF(gr, GR)
  |  |  ------------------
  |  |  |  |   91|      1|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      1|#define OSPF_DEBUG_GR 0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  150|      0|		zlog_debug("%s, GR Helper init.", __func__);
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  151|       |
  152|      1|	ospf->is_helper_supported = OSPF_GR_FALSE;
  ------------------
  |  |  136|      1|#define OSPF_GR_FALSE false
  ------------------
  153|      1|	ospf->strict_lsa_check = OSPF_GR_TRUE;
  ------------------
  |  |  137|      1|#define OSPF_GR_TRUE true
  ------------------
  154|      1|	ospf->only_planned_restart = OSPF_GR_FALSE;
  ------------------
  |  |  136|      1|#define OSPF_GR_FALSE false
  ------------------
  155|      1|	ospf->supported_grace_time = OSPF_MAX_GRACE_INTERVAL;
  ------------------
  |  |   18|      1|#define OSPF_MAX_GRACE_INTERVAL 1800
  ------------------
  156|      1|	ospf->last_exit_reason = OSPF_GR_HELPER_EXIT_NONE;
  157|      1|	ospf->active_restarter_cnt = 0;
  158|       |
  159|      1|	ospf->enable_rtr_list =
  160|      1|		hash_create(ospf_enable_rtr_hash_key, ospf_enable_rtr_hash_cmp,
  161|      1|			    "OSPF enable router hash");
  162|      1|}
ospf_process_grace_lsa:
  362|  1.24k|{
  363|  1.24k|	struct in_addr restart_addr = {0};
  364|  1.24k|	uint8_t restart_reason = 0;
  365|  1.24k|	uint32_t grace_interval = 0;
  366|  1.24k|	uint32_t actual_grace_interval = 0;
  367|  1.24k|	struct advRtr lookup;
  368|  1.24k|	struct ospf_neighbor *restarter = NULL;
  369|  1.24k|	struct ospf_interface *oi = nbr->oi;
  370|  1.24k|	int ret;
  371|       |
  372|       |
  373|       |	/* Extract the grace lsa packet fields */
  374|  1.24k|	ret = ospf_extract_grace_lsa_fields(lsa, &grace_interval, &restart_addr,
  375|  1.24k|					    &restart_reason);
  376|  1.24k|	if (ret != OSPF_GR_SUCCESS) {
  ------------------
  |  |  139|  1.24k|#define OSPF_GR_SUCCESS 1
  ------------------
  |  Branch (376:6): [True: 1.19k, False: 41]
  ------------------
  377|  1.19k|		if (IS_DEBUG_OSPF_GR)
  ------------------
  |  |  107|  1.19k|#define IS_DEBUG_OSPF_GR IS_DEBUG_OSPF(gr, GR)
  |  |  ------------------
  |  |  |  |   91|  1.19k|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|  1.19k|#define OSPF_DEBUG_GR 0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 1.19k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  378|      0|			zlog_debug("%s, Wrong Grace LSA packet.", __func__);
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  379|  1.19k|		return OSPF_GR_NOT_HELPER;
  ------------------
  |  |   12|  1.19k|#define OSPF_GR_NOT_HELPER 0
  ------------------
  380|  1.19k|	}
  381|       |
  382|     41|	if (IS_DEBUG_OSPF_GR)
  ------------------
  |  |  107|     41|#define IS_DEBUG_OSPF_GR IS_DEBUG_OSPF(gr, GR)
  |  |  ------------------
  |  |  |  |   91|     41|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|     41|#define OSPF_DEBUG_GR 0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 41]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  383|      0|		zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  384|     41|			"%s, Grace LSA received from %pI4, grace interval:%u, restart reason:%s",
  385|     41|			__func__, &restart_addr, grace_interval,
  386|     41|			ospf_restart_reason2str(restart_reason));
  387|       |
  388|       |	/* In case of broadcast links, if RESTARTER is DR_OTHER,
  389|       |	 * grace LSA might be received from DR, so need to get
  390|       |	 * actual neighbour info , here RESTARTER.
  391|       |	 */
  392|     41|	if (oi->type != OSPF_IFTYPE_POINTOPOINT) {
  ------------------
  |  |   44|     41|#define OSPF_IFTYPE_POINTOPOINT		1
  ------------------
  |  Branch (392:6): [True: 41, False: 0]
  ------------------
  393|     41|		restarter = ospf_nbr_lookup_by_addr(oi->nbrs, &restart_addr);
  394|       |
  395|     41|		if (!restarter) {
  ------------------
  |  Branch (395:7): [True: 41, False: 0]
  ------------------
  396|     41|			if (IS_DEBUG_OSPF_GR)
  ------------------
  |  |  107|     41|#define IS_DEBUG_OSPF_GR IS_DEBUG_OSPF(gr, GR)
  |  |  ------------------
  |  |  |  |   91|     41|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|     41|#define OSPF_DEBUG_GR 0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 41]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  397|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  398|     41|					"%s, Restarter is not a nbr(%pI4) for this router.",
  399|     41|					__func__, &restart_addr);
  400|     41|			return OSPF_GR_NOT_HELPER;
  ------------------
  |  |   12|     41|#define OSPF_GR_NOT_HELPER 0
  ------------------
  401|     41|		}
  402|     41|	} else
  403|      0|		restarter = nbr;
  404|       |
  405|       |	/* Verify Helper enabled globally */
  406|      0|	if (!ospf->is_helper_supported) {
  ------------------
  |  Branch (406:6): [True: 0, False: 0]
  ------------------
  407|       |		/* Verify that Helper support is enabled for the
  408|       |		 * current neighbour router-id.
  409|       |		 */
  410|      0|		lookup.advRtrAddr.s_addr = restarter->router_id.s_addr;
  411|       |
  412|      0|		if (!hash_lookup(ospf->enable_rtr_list, &lookup)) {
  ------------------
  |  Branch (412:7): [True: 0, False: 0]
  ------------------
  413|      0|			if (IS_DEBUG_OSPF_GR)
  ------------------
  |  |  107|      0|#define IS_DEBUG_OSPF_GR IS_DEBUG_OSPF(gr, GR)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|#define OSPF_DEBUG_GR 0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  414|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  415|      0|					"%s, HELPER support is disabled, So not a HELPER",
  416|      0|					__func__);
  417|      0|			restarter->gr_helper_info.rejected_reason =
  418|      0|				OSPF_HELPER_SUPPORT_DISABLED;
  419|      0|			return OSPF_GR_NOT_HELPER;
  ------------------
  |  |   12|      0|#define OSPF_GR_NOT_HELPER 0
  ------------------
  420|      0|		}
  421|      0|	}
  422|       |
  423|       |
  424|       |	/* Check neighbour is in FULL state and
  425|       |	 * became a adjacency.
  426|       |	 */
  427|      0|	if (!IS_NBR_STATE_FULL(restarter)) {
  ------------------
  |  |  129|      0|#define IS_NBR_STATE_FULL(nbr) (nsm_should_adj(nbr) && (nbr->state == NSM_Full))
  |  |  ------------------
  |  |  |  |   23|      0|#define NSM_Full		9
  |  |  ------------------
  |  |  |  Branch (129:33): [True: 0, False: 0]
  |  |  |  Branch (129:56): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  428|      0|		if (IS_DEBUG_OSPF_GR)
  ------------------
  |  |  107|      0|#define IS_DEBUG_OSPF_GR IS_DEBUG_OSPF(gr, GR)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|#define OSPF_DEBUG_GR 0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  429|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  430|      0|				"%s, This Neighbour %pI4 is not in FULL state.",
  431|      0|				__func__, &restarter->src);
  432|      0|		restarter->gr_helper_info.rejected_reason =
  433|      0|			OSPF_HELPER_NOT_A_VALID_NEIGHBOUR;
  434|      0|		return OSPF_GR_NOT_HELPER;
  ------------------
  |  |   12|      0|#define OSPF_GR_NOT_HELPER 0
  ------------------
  435|      0|	}
  436|       |
  437|       |	/* Based on the restart reason from grace lsa
  438|       |	 * check the current router is supporting or not
  439|       |	 */
  440|      0|	if (ospf->only_planned_restart
  ------------------
  |  Branch (440:6): [True: 0, False: 0]
  ------------------
  441|      0|	    && !OSPF_GR_IS_PLANNED_RESTART(restart_reason)) {
  ------------------
  |  |  116|      0|	((reason == OSPF_GR_SW_RESTART) || (reason == OSPF_GR_SW_UPGRADE))
  |  |  ------------------
  |  |  |  Branch (116:3): [True: 0, False: 0]
  |  |  |  Branch (116:37): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  442|      0|		if (IS_DEBUG_OSPF_GR)
  ------------------
  |  |  107|      0|#define IS_DEBUG_OSPF_GR IS_DEBUG_OSPF(gr, GR)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|#define OSPF_DEBUG_GR 0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  443|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  444|      0|				"%s, Router supports only planned restarts but received the GRACE LSA for an unplanned restart.",
  445|      0|				__func__);
  446|      0|		restarter->gr_helper_info.rejected_reason =
  447|      0|			OSPF_HELPER_PLANNED_ONLY_RESTART;
  448|      0|		return OSPF_GR_NOT_HELPER;
  ------------------
  |  |   12|      0|#define OSPF_GR_NOT_HELPER 0
  ------------------
  449|      0|	}
  450|       |
  451|       |	/* Check the retransmission list of this
  452|       |	 * neighbour, check any change in lsas.
  453|       |	 */
  454|      0|	if (ospf->strict_lsa_check && !ospf_ls_retransmit_isempty(restarter)
  ------------------
  |  Branch (454:6): [True: 0, False: 0]
  |  Branch (454:32): [True: 0, False: 0]
  ------------------
  455|      0|	    && ospf_check_change_in_rxmt_list(restarter)) {
  ------------------
  |  Branch (455:9): [True: 0, False: 0]
  ------------------
  456|      0|		if (IS_DEBUG_OSPF_GR)
  ------------------
  |  |  107|      0|#define IS_DEBUG_OSPF_GR IS_DEBUG_OSPF(gr, GR)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|#define OSPF_DEBUG_GR 0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  457|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  458|      0|				"%s, Changed LSA in Rxmt list. So not Helper.",
  459|      0|				__func__);
  460|      0|		restarter->gr_helper_info.rejected_reason =
  461|      0|			OSPF_HELPER_TOPO_CHANGE_RTXMT_LIST;
  462|      0|		return OSPF_GR_NOT_HELPER;
  ------------------
  |  |   12|      0|#define OSPF_GR_NOT_HELPER 0
  ------------------
  463|      0|	}
  464|       |
  465|       |	/*LSA age must be less than the grace period */
  466|      0|	if (ntohs(lsa->data->ls_age) >= grace_interval) {
  ------------------
  |  Branch (466:6): [True: 0, False: 0]
  ------------------
  467|      0|		if (IS_DEBUG_OSPF_GR)
  ------------------
  |  |  107|      0|#define IS_DEBUG_OSPF_GR IS_DEBUG_OSPF(gr, GR)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|#define OSPF_DEBUG_GR 0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  468|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  469|      0|				"%s, Grace LSA age(%d) is more than the grace interval(%d)",
  470|      0|				__func__, lsa->data->ls_age, grace_interval);
  471|      0|		restarter->gr_helper_info.rejected_reason =
  472|      0|			OSPF_HELPER_LSA_AGE_MORE;
  473|      0|		return OSPF_GR_NOT_HELPER;
  ------------------
  |  |   12|      0|#define OSPF_GR_NOT_HELPER 0
  ------------------
  474|      0|	}
  475|       |
  476|      0|	if (ospf->gr_info.restart_in_progress) {
  ------------------
  |  Branch (476:6): [True: 0, False: 0]
  ------------------
  477|      0|		if (IS_DEBUG_OSPF_GR)
  ------------------
  |  |  107|      0|#define IS_DEBUG_OSPF_GR IS_DEBUG_OSPF(gr, GR)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|#define OSPF_DEBUG_GR 0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  478|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  479|      0|				"%s: router is in the process of graceful restart",
  480|      0|				__func__);
  481|      0|		restarter->gr_helper_info.rejected_reason =
  482|      0|			OSPF_HELPER_RESTARTING;
  483|      0|		return OSPF_GR_NOT_HELPER;
  ------------------
  |  |   12|      0|#define OSPF_GR_NOT_HELPER 0
  ------------------
  484|      0|	}
  485|       |
  486|       |	/* check supported grace period configured
  487|       |	 * if configured, use this to start the grace
  488|       |	 * timer otherwise use the interval received
  489|       |	 * in grace LSA packet.
  490|       |	 */
  491|      0|	actual_grace_interval = grace_interval;
  492|      0|	if (grace_interval > ospf->supported_grace_time) {
  ------------------
  |  Branch (492:6): [True: 0, False: 0]
  ------------------
  493|      0|		if (IS_DEBUG_OSPF_GR)
  ------------------
  |  |  107|      0|#define IS_DEBUG_OSPF_GR IS_DEBUG_OSPF(gr, GR)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|#define OSPF_DEBUG_GR 0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  494|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  495|      0|				"%s, Received grace period %d is larger than supported grace %d",
  496|      0|				__func__, grace_interval,
  497|      0|				ospf->supported_grace_time);
  498|      0|		actual_grace_interval = ospf->supported_grace_time;
  499|      0|	}
  500|       |
  501|      0|	if (OSPF_GR_IS_ACTIVE_HELPER(restarter)) {
  ------------------
  |  |  120|      0|	((N)->gr_helper_info.gr_helper_status == OSPF_GR_ACTIVE_HELPER)
  |  |  ------------------
  |  |  |  |   13|      0|#define OSPF_GR_ACTIVE_HELPER 1
  |  |  ------------------
  |  |  |  Branch (120:2): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  502|      0|		if (restarter->gr_helper_info.t_grace_timer)
  ------------------
  |  Branch (502:7): [True: 0, False: 0]
  ------------------
  503|      0|			EVENT_OFF(restarter->gr_helper_info.t_grace_timer);
  ------------------
  |  |  164|      0|	do {                                                                   \
  |  |  165|      0|		if ((thread))                                                  \
  |  |  ------------------
  |  |  |  Branch (165:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  166|      0|			event_cancel(&(thread));                               \
  |  |  167|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (167:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  504|       |
  505|      0|		if (ospf->active_restarter_cnt > 0)
  ------------------
  |  Branch (505:7): [True: 0, False: 0]
  ------------------
  506|      0|			ospf->active_restarter_cnt--;
  507|       |
  508|      0|		if (IS_DEBUG_OSPF_GR)
  ------------------
  |  |  107|      0|#define IS_DEBUG_OSPF_GR IS_DEBUG_OSPF(gr, GR)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|#define OSPF_DEBUG_GR 0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  509|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  510|      0|				"%s, Router is already acting as a HELPER for this nbr,so restart the grace timer",
  511|      0|				__func__);
  512|      0|	} else {
  513|      0|		if (IS_DEBUG_OSPF_GR)
  ------------------
  |  |  107|      0|#define IS_DEBUG_OSPF_GR IS_DEBUG_OSPF(gr, GR)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|#define OSPF_DEBUG_GR 0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  514|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  515|      0|				"%s, This Router becomes a HELPER for the neighbour %pI4",
  516|      0|				__func__, &restarter->src);
  517|      0|	}
  518|       |
  519|       |	/* Became a Helper to the RESTART neighbour.
  520|       |	 * Change the helper status.
  521|       |	 */
  522|      0|	restarter->gr_helper_info.gr_helper_status = OSPF_GR_ACTIVE_HELPER;
  ------------------
  |  |   13|      0|#define OSPF_GR_ACTIVE_HELPER 1
  ------------------
  523|      0|	restarter->gr_helper_info.recvd_grace_period = grace_interval;
  524|      0|	restarter->gr_helper_info.actual_grace_period = actual_grace_interval;
  525|      0|	restarter->gr_helper_info.gr_restart_reason = restart_reason;
  526|      0|	restarter->gr_helper_info.rejected_reason = OSPF_HELPER_REJECTED_NONE;
  527|       |
  528|       |	/* Increment the active restarter count */
  529|      0|	ospf->active_restarter_cnt++;
  530|       |
  531|      0|	if (IS_DEBUG_OSPF_GR)
  ------------------
  |  |  107|      0|#define IS_DEBUG_OSPF_GR IS_DEBUG_OSPF(gr, GR)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|#define OSPF_DEBUG_GR 0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  532|      0|		zlog_debug("%s, Grace timer started.interval:%d", __func__,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  533|      0|			   actual_grace_interval);
  534|       |
  535|       |	/* Start the grace timer */
  536|      0|	event_add_timer(master, ospf_handle_grace_timer_expiry, restarter,
  ------------------
  |  |  216|      0|#define event_add_timer(m, f, a, v, t) 0
  ------------------
  537|      0|			actual_grace_interval,
  538|      0|			&restarter->gr_helper_info.t_grace_timer);
  539|       |
  540|      0|	return OSPF_GR_ACTIVE_HELPER;
  ------------------
  |  |   13|      0|#define OSPF_GR_ACTIVE_HELPER 1
  ------------------
  541|      0|}
ospf_gr_helper.c:ospf_extract_grace_lsa_fields:
  233|  1.24k|{
  234|  1.24k|	struct lsa_header *lsah = NULL;
  235|  1.24k|	struct tlv_header *tlvh = NULL;
  236|  1.24k|	struct grace_tlv_graceperiod *grace_period;
  237|  1.24k|	struct grace_tlv_restart_reason *gr_reason;
  238|  1.24k|	struct grace_tlv_restart_addr *restart_addr;
  239|  1.24k|	uint16_t length = 0;
  240|  1.24k|	int sum = 0;
  241|       |
  242|  1.24k|	lsah = (struct lsa_header *)lsa->data;
  243|       |
  244|       |	/* Check LSA len */
  245|  1.24k|	if (lsa->size <= OSPF_LSA_HEADER_SIZE) {
  ------------------
  |  |   36|  1.24k|#define OSPF_LSA_HEADER_SIZE	     20U
  ------------------
  |  Branch (245:6): [True: 149, False: 1.09k]
  ------------------
  246|    149|		if (IS_DEBUG_OSPF_GR)
  ------------------
  |  |  107|    149|#define IS_DEBUG_OSPF_GR IS_DEBUG_OSPF(gr, GR)
  |  |  ------------------
  |  |  |  |   91|    149|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|    149|#define OSPF_DEBUG_GR 0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 149]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  247|      0|			zlog_debug("%s: Malformed packet: Invalid LSA len:%d",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  248|    149|				   __func__, length);
  249|    149|		return OSPF_GR_FAILURE;
  ------------------
  |  |  140|    149|#define OSPF_GR_FAILURE 0
  ------------------
  250|    149|	}
  251|       |
  252|  1.09k|	length = lsa->size - OSPF_LSA_HEADER_SIZE;
  ------------------
  |  |   36|  1.09k|#define OSPF_LSA_HEADER_SIZE	     20U
  ------------------
  253|       |
  254|  1.48k|	for (tlvh = TLV_HDR_TOP(lsah); sum < length && tlvh;
  ------------------
  |  |   88|  1.09k|	(struct tlv_header *)((char *)(lsah) + OSPF_LSA_HEADER_SIZE)
  |  |  ------------------
  |  |  |  |   36|  1.09k|#define OSPF_LSA_HEADER_SIZE	     20U
  |  |  ------------------
  ------------------
  |  Branch (254:33): [True: 1.44k, False: 41]
  |  Branch (254:49): [True: 1.44k, False: 0]
  ------------------
  255|  1.44k|	     tlvh = TLV_HDR_NEXT(tlvh)) {
  ------------------
  |  |   91|    393|	(struct tlv_header *)((char *)(tlvh) + TLV_SIZE(tlvh))
  |  |  ------------------
  |  |  |  |   85|    393|#define TLV_SIZE(tlvh)	(uint32_t)(TLV_HDR_SIZE + TLV_BODY_SIZE(tlvh))
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    393|#define TLV_HDR_SIZE	(sizeof(struct tlv_header))
  |  |  |  |  ------------------
  |  |  |  |               #define TLV_SIZE(tlvh)	(uint32_t)(TLV_HDR_SIZE + TLV_BODY_SIZE(tlvh))
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|    393|#define TLV_BODY_SIZE(tlvh) (ROUNDUP(ntohs((tlvh)->length), sizeof(uint32_t)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  682|    393|#  define ROUNDUP(val, gran)	roundup(val, gran)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (255:14): [True: 393, Folded]
  ------------------
  256|       |
  257|       |		/* Check TLV len against overall LSA */
  258|  1.44k|		if (sum + TLV_SIZE(tlvh) > length) {
  ------------------
  |  |   85|  1.44k|#define TLV_SIZE(tlvh)	(uint32_t)(TLV_HDR_SIZE + TLV_BODY_SIZE(tlvh))
  |  |  ------------------
  |  |  |  |   81|  1.44k|#define TLV_HDR_SIZE	(sizeof(struct tlv_header))
  |  |  ------------------
  |  |               #define TLV_SIZE(tlvh)	(uint32_t)(TLV_HDR_SIZE + TLV_BODY_SIZE(tlvh))
  |  |  ------------------
  |  |  |  |   83|  1.44k|#define TLV_BODY_SIZE(tlvh) (ROUNDUP(ntohs((tlvh)->length), sizeof(uint32_t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  682|  1.44k|#  define ROUNDUP(val, gran)	roundup(val, gran)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (258:7): [True: 300, False: 1.14k]
  |  Branch (258:13): [True: 1.44k, Folded]
  ------------------
  259|    300|			if (IS_DEBUG_OSPF_GR)
  ------------------
  |  |  107|    300|#define IS_DEBUG_OSPF_GR IS_DEBUG_OSPF(gr, GR)
  |  |  ------------------
  |  |  |  |   91|    300|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|    300|#define OSPF_DEBUG_GR 0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 300]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  260|      0|				zlog_debug("%s: Malformed packet: Invalid TLV len:%u",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  261|    300|					   __func__, TLV_SIZE(tlvh));
  262|    300|			return OSPF_GR_FAILURE;
  ------------------
  |  |  140|    300|#define OSPF_GR_FAILURE 0
  ------------------
  263|    300|		}
  264|       |
  265|  1.14k|		switch (ntohs(tlvh->type)) {
  266|    165|		case GRACE_PERIOD_TYPE:
  ------------------
  |  |   50|    165|#define GRACE_PERIOD_TYPE 1
  ------------------
  |  Branch (266:3): [True: 165, False: 978]
  ------------------
  267|    165|			if (TLV_SIZE(tlvh) <
  ------------------
  |  |   85|    165|#define TLV_SIZE(tlvh)	(uint32_t)(TLV_HDR_SIZE + TLV_BODY_SIZE(tlvh))
  |  |  ------------------
  |  |  |  |   81|    165|#define TLV_HDR_SIZE	(sizeof(struct tlv_header))
  |  |  ------------------
  |  |               #define TLV_SIZE(tlvh)	(uint32_t)(TLV_HDR_SIZE + TLV_BODY_SIZE(tlvh))
  |  |  ------------------
  |  |  |  |   83|    165|#define TLV_BODY_SIZE(tlvh) (ROUNDUP(ntohs((tlvh)->length), sizeof(uint32_t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  682|    165|#  define ROUNDUP(val, gran)	roundup(val, gran)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (267:8): [True: 165, Folded]
  |  Branch (267:8): [True: 69, False: 96]
  ------------------
  268|    165|			    sizeof(struct grace_tlv_graceperiod)) {
  269|     69|				zlog_debug("%s: Malformed packet: Invalid grace TLV len:%u",
  ------------------
  |  |  134|     69|#define zlog_debug(...) 0
  ------------------
  270|     69|					   __func__, TLV_SIZE(tlvh));
  271|     69|				return OSPF_GR_FAILURE;
  ------------------
  |  |  140|     69|#define OSPF_GR_FAILURE 0
  ------------------
  272|     69|			}
  273|       |
  274|     96|			grace_period = (struct grace_tlv_graceperiod *)tlvh;
  275|     96|			*interval = ntohl(grace_period->interval);
  276|     96|			sum += TLV_SIZE(tlvh);
  ------------------
  |  |   85|     96|#define TLV_SIZE(tlvh)	(uint32_t)(TLV_HDR_SIZE + TLV_BODY_SIZE(tlvh))
  |  |  ------------------
  |  |  |  |   81|     96|#define TLV_HDR_SIZE	(sizeof(struct tlv_header))
  |  |  ------------------
  |  |               #define TLV_SIZE(tlvh)	(uint32_t)(TLV_HDR_SIZE + TLV_BODY_SIZE(tlvh))
  |  |  ------------------
  |  |  |  |   83|     96|#define TLV_BODY_SIZE(tlvh) (ROUNDUP(ntohs((tlvh)->length), sizeof(uint32_t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  682|     96|#  define ROUNDUP(val, gran)	roundup(val, gran)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (276:11): [True: 96, Folded]
  ------------------
  277|       |
  278|       |			/* Check if grace interval is valid */
  279|     96|			if (*interval > OSPF_MAX_GRACE_INTERVAL
  ------------------
  |  |   18|    192|#define OSPF_MAX_GRACE_INTERVAL 1800
  ------------------
  |  Branch (279:8): [True: 50, False: 46]
  ------------------
  280|     46|			    || *interval < OSPF_MIN_GRACE_INTERVAL)
  ------------------
  |  |   19|     46|#define OSPF_MIN_GRACE_INTERVAL 1
  ------------------
  |  Branch (280:11): [True: 8, False: 38]
  ------------------
  281|     58|				return OSPF_GR_FAILURE;
  ------------------
  |  |  140|     58|#define OSPF_GR_FAILURE 0
  ------------------
  282|     38|			break;
  283|    624|		case RESTART_REASON_TYPE:
  ------------------
  |  |   59|    624|#define RESTART_REASON_TYPE 2
  ------------------
  |  Branch (283:3): [True: 624, False: 519]
  ------------------
  284|    624|			if (TLV_SIZE(tlvh) <
  ------------------
  |  |   85|    624|#define TLV_SIZE(tlvh)	(uint32_t)(TLV_HDR_SIZE + TLV_BODY_SIZE(tlvh))
  |  |  ------------------
  |  |  |  |   81|    624|#define TLV_HDR_SIZE	(sizeof(struct tlv_header))
  |  |  ------------------
  |  |               #define TLV_SIZE(tlvh)	(uint32_t)(TLV_HDR_SIZE + TLV_BODY_SIZE(tlvh))
  |  |  ------------------
  |  |  |  |   83|    624|#define TLV_BODY_SIZE(tlvh) (ROUNDUP(ntohs((tlvh)->length), sizeof(uint32_t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  682|    624|#  define ROUNDUP(val, gran)	roundup(val, gran)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (284:8): [True: 624, Folded]
  |  Branch (284:8): [True: 98, False: 526]
  ------------------
  285|    624|			    sizeof(struct grace_tlv_restart_reason)) {
  286|     98|				zlog_debug("%s: Malformed packet: Invalid reason TLV len:%u",
  ------------------
  |  |  134|     98|#define zlog_debug(...) 0
  ------------------
  287|     98|					   __func__, TLV_SIZE(tlvh));
  288|     98|				return OSPF_GR_FAILURE;
  ------------------
  |  |  140|     98|#define OSPF_GR_FAILURE 0
  ------------------
  289|     98|			}
  290|       |
  291|    526|			gr_reason = (struct grace_tlv_restart_reason *)tlvh;
  292|    526|			*reason = gr_reason->reason;
  293|    526|			sum += TLV_SIZE(tlvh);
  ------------------
  |  |   85|    526|#define TLV_SIZE(tlvh)	(uint32_t)(TLV_HDR_SIZE + TLV_BODY_SIZE(tlvh))
  |  |  ------------------
  |  |  |  |   81|    526|#define TLV_HDR_SIZE	(sizeof(struct tlv_header))
  |  |  ------------------
  |  |               #define TLV_SIZE(tlvh)	(uint32_t)(TLV_HDR_SIZE + TLV_BODY_SIZE(tlvh))
  |  |  ------------------
  |  |  |  |   83|    526|#define TLV_BODY_SIZE(tlvh) (ROUNDUP(ntohs((tlvh)->length), sizeof(uint32_t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  682|    526|#  define ROUNDUP(val, gran)	roundup(val, gran)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (293:11): [True: 526, Folded]
  ------------------
  294|       |
  295|    526|			if (*reason >= OSPF_GR_INVALID_REASON_CODE)
  ------------------
  |  Branch (295:8): [True: 229, False: 297]
  ------------------
  296|    229|				return OSPF_GR_FAILURE;
  ------------------
  |  |  140|    229|#define OSPF_GR_FAILURE 0
  ------------------
  297|    297|			break;
  298|    297|		case RESTARTER_IP_ADDR_TYPE:
  ------------------
  |  |   69|    108|#define RESTARTER_IP_ADDR_TYPE 3
  ------------------
  |  Branch (298:3): [True: 108, False: 1.03k]
  ------------------
  299|    108|			if (TLV_SIZE(tlvh) <
  ------------------
  |  |   85|    108|#define TLV_SIZE(tlvh)	(uint32_t)(TLV_HDR_SIZE + TLV_BODY_SIZE(tlvh))
  |  |  ------------------
  |  |  |  |   81|    108|#define TLV_HDR_SIZE	(sizeof(struct tlv_header))
  |  |  ------------------
  |  |               #define TLV_SIZE(tlvh)	(uint32_t)(TLV_HDR_SIZE + TLV_BODY_SIZE(tlvh))
  |  |  ------------------
  |  |  |  |   83|    108|#define TLV_BODY_SIZE(tlvh) (ROUNDUP(ntohs((tlvh)->length), sizeof(uint32_t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  682|    108|#  define ROUNDUP(val, gran)	roundup(val, gran)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (299:8): [True: 108, Folded]
  |  Branch (299:8): [True: 50, False: 58]
  ------------------
  300|    108|			    sizeof(struct grace_tlv_restart_addr)) {
  301|     50|				zlog_debug("%s: Malformed packet: Invalid addr TLV len:%u",
  ------------------
  |  |  134|     50|#define zlog_debug(...) 0
  ------------------
  302|     50|					   __func__, TLV_SIZE(tlvh));
  303|     50|				return OSPF_GR_FAILURE;
  ------------------
  |  |  140|     50|#define OSPF_GR_FAILURE 0
  ------------------
  304|     50|			}
  305|       |
  306|     58|			restart_addr = (struct grace_tlv_restart_addr *)tlvh;
  307|     58|			addr->s_addr = restart_addr->addr.s_addr;
  308|     58|			sum += TLV_SIZE(tlvh);
  ------------------
  |  |   85|     58|#define TLV_SIZE(tlvh)	(uint32_t)(TLV_HDR_SIZE + TLV_BODY_SIZE(tlvh))
  |  |  ------------------
  |  |  |  |   81|     58|#define TLV_HDR_SIZE	(sizeof(struct tlv_header))
  |  |  ------------------
  |  |               #define TLV_SIZE(tlvh)	(uint32_t)(TLV_HDR_SIZE + TLV_BODY_SIZE(tlvh))
  |  |  ------------------
  |  |  |  |   83|     58|#define TLV_BODY_SIZE(tlvh) (ROUNDUP(ntohs((tlvh)->length), sizeof(uint32_t)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  682|     58|#  define ROUNDUP(val, gran)	roundup(val, gran)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (308:11): [True: 58, Folded]
  ------------------
  309|     58|			break;
  310|    246|		default:
  ------------------
  |  Branch (310:3): [True: 246, False: 897]
  ------------------
  311|    246|			if (IS_DEBUG_OSPF_GR)
  ------------------
  |  |  107|    246|#define IS_DEBUG_OSPF_GR IS_DEBUG_OSPF(gr, GR)
  |  |  ------------------
  |  |  |  |   91|    246|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|    246|#define OSPF_DEBUG_GR 0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 246]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  312|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  313|    246|					"%s, Malformed packet.Invalid TLV type:%d",
  314|    246|					__func__, ntohs(tlvh->type));
  315|    246|			return OSPF_GR_FAILURE;
  ------------------
  |  |  140|    246|#define OSPF_GR_FAILURE 0
  ------------------
  316|  1.14k|		}
  317|  1.14k|	}
  318|       |
  319|     41|	return OSPF_GR_SUCCESS;
  ------------------
  |  |  139|     41|#define OSPF_GR_SUCCESS 1
  ------------------
  320|  1.09k|}

ospf_if_get_output_cost:
   71|      1|{
   72|       |	/* If all else fails, use default OSPF cost */
   73|      1|	uint32_t cost;
   74|      1|	uint32_t bw, refbw;
   75|       |
   76|       |	/* if LDP-IGP Sync is running on interface set cost so interface
   77|       |	 * is used only as last resort
   78|       |	 */
   79|      1|	if (ldp_sync_if_is_enabled(IF_DEF_PARAMS(oi->ifp)->ldp_sync_info))
  ------------------
  |  |   17|      1|#define IF_DEF_PARAMS(I) (IF_OSPF_IF_INFO (I)->def_params)
  |  |  ------------------
  |  |  |  |   16|      1|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  ------------------
  ------------------
  |  Branch (79:6): [True: 0, False: 1]
  ------------------
   80|      0|		return (LDP_OSPF_LSINFINITY);
  ------------------
  |  |   10|      0|#define LDP_OSPF_LSINFINITY 65535
  ------------------
   81|       |
   82|       |	/* ifp speed and bw can be 0 in some platforms, use ospf default bw
   83|       |	   if bw is configured under interface it would be used.
   84|       |	 */
   85|      1|	if (!oi->ifp->bandwidth && oi->ifp->speed)
  ------------------
  |  Branch (85:6): [True: 1, False: 0]
  |  Branch (85:29): [True: 0, False: 1]
  ------------------
   86|      0|		bw = oi->ifp->speed;
   87|      1|	else
   88|      1|		bw = oi->ifp->bandwidth ? oi->ifp->bandwidth
  ------------------
  |  Branch (88:8): [True: 0, False: 1]
  ------------------
   89|      1|					: OSPF_DEFAULT_BANDWIDTH;
  ------------------
  |  |   62|      1|#define OSPF_DEFAULT_BANDWIDTH		 10000	/* Mbps */
  ------------------
   90|      1|	refbw = oi->ospf->ref_bandwidth;
   91|       |
   92|       |	/* A specified ip ospf cost overrides a calculated one. */
   93|      1|	if (OSPF_IF_PARAM_CONFIGURED(IF_DEF_PARAMS(oi->ifp), output_cost_cmd)
  ------------------
  |  |   22|      2|#define OSPF_IF_PARAM_CONFIGURED(S, P) ((S) && (S)->P##__config)
  |  |  ------------------
  |  |  |  Branch (22:41): [True: 1, False: 0]
  |  |  |  Branch (22:48): [True: 0, False: 1]
  |  |  ------------------
  ------------------
   94|      1|	    || OSPF_IF_PARAM_CONFIGURED(oi->params, output_cost_cmd))
  ------------------
  |  |   22|      1|#define OSPF_IF_PARAM_CONFIGURED(S, P) ((S) && (S)->P##__config)
  |  |  ------------------
  |  |  |  Branch (22:41): [True: 0, False: 1]
  |  |  |  Branch (22:48): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   95|      0|		cost = OSPF_IF_PARAM(oi, output_cost_cmd);
  ------------------
  |  |   32|      0|	(OSPF_IF_PARAM_CONFIGURED((O)->params, P)                              \
  |  |  ------------------
  |  |  |  |   22|      0|#define OSPF_IF_PARAM_CONFIGURED(S, P) ((S) && (S)->P##__config)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (22:41): [True: 0, False: 0]
  |  |  |  |  |  Branch (22:48): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   33|      0|		 ? (O)->params->P                                              \
  |  |   34|      0|		 : IF_DEF_PARAMS((O)->ifp)->P)
  |  |  ------------------
  |  |  |  |   17|      0|#define IF_DEF_PARAMS(I) (IF_OSPF_IF_INFO (I)->def_params)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   96|       |	/* See if a cost can be calculated from the zebra processes
   97|       |	   interface bandwidth field. */
   98|      1|	else {
   99|      1|		cost = (uint32_t)((double)refbw / (double)bw + (double)0.5);
  100|      1|		if (cost < 1)
  ------------------
  |  Branch (100:7): [True: 0, False: 1]
  ------------------
  101|      0|			cost = 1;
  102|      1|		else if (cost > 65535)
  ------------------
  |  Branch (102:12): [True: 0, False: 1]
  ------------------
  103|      0|			cost = 65535;
  104|       |
  105|      1|		if (if_is_loopback(oi->ifp))
  ------------------
  |  Branch (105:7): [True: 0, False: 1]
  ------------------
  106|      0|			cost = 0;
  107|      1|	}
  108|       |
  109|      1|	return cost;
  110|      1|}
ospf_if_reset_variables:
  151|      1|{
  152|       |	/* Set default values. */
  153|       |	/* don't clear this flag.  oi->flag = OSPF_IF_DISABLE; */
  154|       |
  155|      1|	if (oi->vl_data)
  ------------------
  |  Branch (155:6): [True: 0, False: 1]
  ------------------
  156|      0|		oi->type = OSPF_IFTYPE_VIRTUALLINK;
  ------------------
  |  |   48|      0|#define OSPF_IFTYPE_VIRTUALLINK		5
  ------------------
  157|      1|	else
  158|       |		/* preserve network-type */
  159|      1|		if (oi->type != OSPF_IFTYPE_NBMA)
  ------------------
  |  |   46|      1|#define OSPF_IFTYPE_NBMA		3
  ------------------
  |  Branch (159:7): [True: 1, False: 0]
  ------------------
  160|      1|		oi->type = OSPF_IFTYPE_BROADCAST;
  ------------------
  |  |   45|      1|#define OSPF_IFTYPE_BROADCAST		2
  ------------------
  161|       |
  162|      1|	oi->state = ISM_Down;
  ------------------
  |  |   15|      1|#define ISM_Down                          1
  ------------------
  163|       |
  164|      1|	oi->crypt_seqnum = 0;
  165|       |
  166|       |	/* This must be short, (less than RxmtInterval)
  167|       |	   - RFC 2328 Section 13.5 para 3.  Set to 1 second to avoid Acks being
  168|       |	     held back for too long - MAG */
  169|      1|	oi->v_ls_ack = 1;
  170|      1|}
ospf_if_table_lookup:
  175|      1|{
  176|      1|	struct prefix p;
  177|      1|	struct route_node *rn;
  178|      1|	struct ospf_interface *rninfo = NULL;
  179|       |
  180|      1|	p = *prefix;
  181|      1|	p.prefixlen = IPV4_MAX_BITLEN;
  ------------------
  |  |  334|      1|#define IPV4_MAX_BITLEN    32
  ------------------
  182|       |
  183|       |	/* route_node_get implicitely locks */
  184|      1|	if ((rn = route_node_lookup(IF_OIFS(ifp), &p))) {
  ------------------
  |  |   18|      1|#define IF_OIFS(I)  (IF_OSPF_IF_INFO (I)->oifs)
  |  |  ------------------
  |  |  |  |   16|      1|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  ------------------
  ------------------
  |  Branch (184:6): [True: 0, False: 1]
  ------------------
  185|      0|		rninfo = (struct ospf_interface *)rn->info;
  186|      0|		route_unlock_node(rn);
  187|      0|	}
  188|       |
  189|      1|	return rninfo;
  190|      1|}
ospf_if_new:
  228|      1|{
  229|      1|	struct ospf_interface *oi;
  230|       |
  231|      1|	oi = ospf_if_table_lookup(ifp, p);
  232|      1|	if (oi)
  ------------------
  |  Branch (232:6): [True: 0, False: 1]
  ------------------
  233|      0|		return oi;
  234|       |
  235|      1|	oi = XCALLOC(MTYPE_OSPF_IF, sizeof(struct ospf_interface));
  ------------------
  |  |  165|      1|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  236|       |
  237|      1|	oi->obuf = ospf_fifo_new();
  238|       |
  239|       |	/* Set zebra interface pointer. */
  240|      1|	oi->ifp = ifp;
  241|      1|	oi->address = p;
  242|       |
  243|      1|	ospf_add_to_if(ifp, oi);
  244|      1|	listnode_add(ospf->oiflist, oi);
  245|       |
  246|       |	/* Initialize neighbor list. */
  247|      1|	oi->nbrs = route_table_init();
  248|       |
  249|       |	/* Initialize static neighbor list. */
  250|      1|	oi->nbr_nbma = list_new();
  251|       |
  252|       |	/* Initialize Link State Acknowledgment list. */
  253|      1|	oi->ls_ack = list_new();
  254|      1|	oi->ls_ack_direct.ls_ack = list_new();
  255|       |
  256|       |	/* Set default values. */
  257|      1|	ospf_if_reset_variables(oi);
  258|       |
  259|       |	/* Set pseudo neighbor to Null */
  260|      1|	oi->nbr_self = NULL;
  261|       |
  262|      1|	oi->ls_upd_queue = route_table_init();
  263|      1|	oi->t_ls_upd_event = NULL;
  264|      1|	oi->t_ls_ack_direct = NULL;
  265|       |
  266|      1|	oi->crypt_seqnum = frr_sequence32_next();
  267|       |
  268|      1|	ospf_opaque_type9_lsa_init(oi);
  269|       |
  270|      1|	oi->ospf = ospf;
  271|       |
  272|      1|	QOBJ_REG(oi, ospf_interface);
  ------------------
  |  |   88|      1|#define QOBJ_REG(n, structname) qobj_reg(&n->qobj_node, &qobj_t_##structname)
  ------------------
  273|       |
  274|      1|	if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|      1|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|      1|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|      1|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  275|      0|		zlog_debug("%s: ospf interface %s vrf %s id %u created",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  276|      1|			   __func__, ifp->name, ospf_get_name(ospf),
  277|      1|			   ospf->vrf_id);
  278|       |
  279|      1|	return oi;
  280|      1|}
ospf_if_lookup_by_local_addr:
  410|  2.96k|{
  411|  2.96k|	struct listnode *node;
  412|  2.96k|	struct ospf_interface *oi;
  413|       |
  414|  2.96k|	for (ALL_LIST_ELEMENTS_RO(ospf->oiflist, node, oi))
  ------------------
  |  |  333|  2.96k|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|  2.96k|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 2.96k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|  5.92k|	(node) != NULL && ((data) = static_cast(data, listgetdata(node)), 1);  \
  |  |  ------------------
  |  |  |  |  204|  17.7k|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 2.96k, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 2.96k]
  |  |  |  |  |  Branch (204:28): [True: 2.96k, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 2.96k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (334:2): [True: 2.96k, False: 2.95k]
  |  |  |  Branch (334:20): [True: 2.96k, False: 0]
  |  |  ------------------
  |  |  335|  2.96k|	(node) = listnextnode(node), ((data) = NULL)
  |  |  ------------------
  |  |  |  |   49|  2.95k|#define listnextnode(X) ((X) ? ((X)->next) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:26): [True: 2.95k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  415|  2.96k|		if (oi->type != OSPF_IFTYPE_VIRTUALLINK) {
  ------------------
  |  |   48|  2.96k|#define OSPF_IFTYPE_VIRTUALLINK		5
  ------------------
  |  Branch (415:7): [True: 2.96k, False: 0]
  ------------------
  416|  2.96k|			if (ifp && oi->ifp != ifp)
  ------------------
  |  Branch (416:8): [True: 0, False: 2.96k]
  |  Branch (416:15): [True: 0, False: 0]
  ------------------
  417|      0|				continue;
  418|       |
  419|  2.96k|			if (IPV4_ADDR_SAME(&address, &oi->address->u.prefix4))
  ------------------
  |  |  342|  2.96k|#define IPV4_ADDR_SAME(A,B)  ipv4_addr_same((A), (B))
  |  |  ------------------
  |  |  |  Branch (342:30): [True: 2, False: 2.95k]
  |  |  ------------------
  ------------------
  420|      2|				return oi;
  421|  2.96k|		}
  422|       |
  423|  2.95k|	return NULL;
  424|  2.96k|}
ospf_if_lookup_recv_if:
  450|  2.55k|{
  451|  2.55k|	struct route_node *rn;
  452|  2.55k|	struct prefix_ipv4 addr;
  453|  2.55k|	struct ospf_interface *oi, *match, *unnumbered_match;
  454|       |
  455|  2.55k|	addr.family = AF_INET;
  456|  2.55k|	addr.prefix = src;
  457|  2.55k|	addr.prefixlen = IPV4_MAX_BITLEN;
  ------------------
  |  |  334|  2.55k|#define IPV4_MAX_BITLEN    32
  ------------------
  458|       |
  459|  2.55k|	match = unnumbered_match = NULL;
  460|       |
  461|  5.10k|	for (rn = route_top(IF_OIFS(ifp)); rn; rn = route_next(rn)) {
  ------------------
  |  |   18|  2.55k|#define IF_OIFS(I)  (IF_OSPF_IF_INFO (I)->oifs)
  |  |  ------------------
  |  |  |  |   16|  2.55k|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  ------------------
  ------------------
  |  Branch (461:37): [True: 2.55k, False: 2.55k]
  ------------------
  462|  2.55k|		oi = rn->info;
  463|       |
  464|  2.55k|		if (!oi) /* oi can be NULL for PtP aliases */
  ------------------
  |  Branch (464:7): [True: 0, False: 2.55k]
  ------------------
  465|      0|			continue;
  466|       |
  467|  2.55k|		if (oi->type == OSPF_IFTYPE_VIRTUALLINK)
  ------------------
  |  |   48|  2.55k|#define OSPF_IFTYPE_VIRTUALLINK		5
  ------------------
  |  Branch (467:7): [True: 0, False: 2.55k]
  ------------------
  468|      0|			continue;
  469|       |
  470|  2.55k|		if (if_is_loopback(oi->ifp))
  ------------------
  |  Branch (470:7): [True: 0, False: 2.55k]
  ------------------
  471|      0|			continue;
  472|       |
  473|  2.55k|		if (CHECK_FLAG(oi->connected->flags, ZEBRA_IFA_UNNUMBERED))
  ------------------
  |  |  394|  2.55k|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 0, False: 2.55k]
  |  |  ------------------
  ------------------
  474|      0|			unnumbered_match = oi;
  475|  2.55k|		else if (prefix_match(CONNECTED_PREFIX(oi->connected),
  ------------------
  |  |  456|  2.55k|	(CONNECTED_PEER(C) ? (C)->destination : (C)->address)
  |  |  ------------------
  |  |  |  |  452|  2.55k|#define CONNECTED_PEER(C) CHECK_FLAG((C)->flags, ZEBRA_IFA_PEER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  394|  2.55k|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (394:30): [True: 0, False: 2.55k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (475:12): [True: 2.47k, False: 79]
  ------------------
  476|  2.55k|				      (struct prefix *)&addr)) {
  477|  2.47k|			if ((match == NULL) || (match->address->prefixlen
  ------------------
  |  Branch (477:8): [True: 2.47k, False: 0]
  |  Branch (477:27): [True: 0, False: 0]
  ------------------
  478|      0|						< oi->address->prefixlen))
  479|  2.47k|				match = oi;
  480|  2.47k|		}
  481|  2.55k|	}
  482|       |
  483|  2.55k|	if (match)
  ------------------
  |  Branch (483:6): [True: 2.47k, False: 79]
  ------------------
  484|  2.47k|		return match;
  485|       |
  486|     79|	return unnumbered_match;
  487|  2.55k|}
ospf_lookup_if_params:
  599|      1|{
  600|      1|	struct prefix_ipv4 p;
  601|      1|	struct route_node *rn;
  602|       |
  603|      1|	p.family = AF_INET;
  604|      1|	p.prefixlen = IPV4_MAX_BITLEN;
  ------------------
  |  |  334|      1|#define IPV4_MAX_BITLEN    32
  ------------------
  605|      1|	p.prefix = addr;
  606|       |
  607|      1|	rn = route_node_lookup(IF_OIFS_PARAMS(ifp), (struct prefix *)&p);
  ------------------
  |  |   19|      1|#define IF_OIFS_PARAMS(I) (IF_OSPF_IF_INFO (I)->params)
  |  |  ------------------
  |  |  |  |   16|      1|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  ------------------
  ------------------
  608|       |
  609|      1|	if (rn) {
  ------------------
  |  Branch (609:6): [True: 0, False: 1]
  ------------------
  610|      0|		route_unlock_node(rn);
  611|      0|		return rn->info;
  612|      0|	}
  613|       |
  614|      1|	return NULL;
  615|      1|}
ospf_if_new_hook:
  654|      1|{
  655|      1|	int rc = 0;
  656|       |
  657|      1|	ifp->info = XCALLOC(MTYPE_OSPF_IF_INFO, sizeof(struct ospf_if_info));
  ------------------
  |  |  165|      1|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  658|       |
  659|      1|	IF_OSPF_IF_INFO(ifp)->oii_fd = -1;
  ------------------
  |  |   16|      1|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  ------------------
  660|       |
  661|      1|	IF_OIFS(ifp) = route_table_init();
  ------------------
  |  |   18|      1|#define IF_OIFS(I)  (IF_OSPF_IF_INFO (I)->oifs)
  |  |  ------------------
  |  |  |  |   16|      1|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  ------------------
  ------------------
  662|      1|	IF_OIFS_PARAMS(ifp) = route_table_init();
  ------------------
  |  |   19|      1|#define IF_OIFS_PARAMS(I) (IF_OSPF_IF_INFO (I)->params)
  |  |  ------------------
  |  |  |  |   16|      1|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  ------------------
  ------------------
  663|       |
  664|      1|	IF_DEF_PARAMS(ifp) = ospf_new_if_params();
  ------------------
  |  |   17|      1|#define IF_DEF_PARAMS(I) (IF_OSPF_IF_INFO (I)->def_params)
  |  |  ------------------
  |  |  |  |   16|      1|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  ------------------
  ------------------
  665|       |
  666|      1|	SET_IF_PARAM(IF_DEF_PARAMS(ifp), transmit_delay);
  ------------------
  |  |   40|      1|#define SET_IF_PARAM(S, P) ((S)->P##__config) = 1
  ------------------
  667|      1|	IF_DEF_PARAMS(ifp)->transmit_delay = OSPF_TRANSMIT_DELAY_DEFAULT;
  ------------------
  |  |   17|      1|#define IF_DEF_PARAMS(I) (IF_OSPF_IF_INFO (I)->def_params)
  |  |  ------------------
  |  |  |  |   16|      1|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  ------------------
  ------------------
              	IF_DEF_PARAMS(ifp)->transmit_delay = OSPF_TRANSMIT_DELAY_DEFAULT;
  ------------------
  |  |   61|      1|#define OSPF_TRANSMIT_DELAY_DEFAULT         1
  ------------------
  668|       |
  669|      1|	SET_IF_PARAM(IF_DEF_PARAMS(ifp), retransmit_interval);
  ------------------
  |  |   40|      1|#define SET_IF_PARAM(S, P) ((S)->P##__config) = 1
  ------------------
  670|      1|	IF_DEF_PARAMS(ifp)->retransmit_interval =
  ------------------
  |  |   17|      1|#define IF_DEF_PARAMS(I) (IF_OSPF_IF_INFO (I)->def_params)
  |  |  ------------------
  |  |  |  |   16|      1|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  ------------------
  ------------------
  671|      1|		OSPF_RETRANSMIT_INTERVAL_DEFAULT;
  ------------------
  |  |   60|      1|#define OSPF_RETRANSMIT_INTERVAL_DEFAULT    5
  ------------------
  672|       |
  673|      1|	SET_IF_PARAM(IF_DEF_PARAMS(ifp), priority);
  ------------------
  |  |   40|      1|#define SET_IF_PARAM(S, P) ((S)->P##__config) = 1
  ------------------
  674|      1|	IF_DEF_PARAMS(ifp)->priority = OSPF_ROUTER_PRIORITY_DEFAULT;
  ------------------
  |  |   17|      1|#define IF_DEF_PARAMS(I) (IF_OSPF_IF_INFO (I)->def_params)
  |  |  ------------------
  |  |  |  |   16|      1|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  ------------------
  ------------------
              	IF_DEF_PARAMS(ifp)->priority = OSPF_ROUTER_PRIORITY_DEFAULT;
  ------------------
  |  |   59|      1|#define OSPF_ROUTER_PRIORITY_DEFAULT        1
  ------------------
  675|       |
  676|      1|	IF_DEF_PARAMS(ifp)->mtu_ignore = OSPF_MTU_IGNORE_DEFAULT;
  ------------------
  |  |   17|      1|#define IF_DEF_PARAMS(I) (IF_OSPF_IF_INFO (I)->def_params)
  |  |  ------------------
  |  |  |  |   16|      1|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  ------------------
  ------------------
              	IF_DEF_PARAMS(ifp)->mtu_ignore = OSPF_MTU_IGNORE_DEFAULT;
  ------------------
  |  |   69|      1|#define OSPF_MTU_IGNORE_DEFAULT             0
  ------------------
  677|       |
  678|      1|	SET_IF_PARAM(IF_DEF_PARAMS(ifp), v_hello);
  ------------------
  |  |   40|      1|#define SET_IF_PARAM(S, P) ((S)->P##__config) = 1
  ------------------
  679|      1|	IF_DEF_PARAMS(ifp)->v_hello = OSPF_HELLO_INTERVAL_DEFAULT;
  ------------------
  |  |   17|      1|#define IF_DEF_PARAMS(I) (IF_OSPF_IF_INFO (I)->def_params)
  |  |  ------------------
  |  |  |  |   16|      1|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  ------------------
  ------------------
              	IF_DEF_PARAMS(ifp)->v_hello = OSPF_HELLO_INTERVAL_DEFAULT;
  ------------------
  |  |   57|      1|#define OSPF_HELLO_INTERVAL_DEFAULT        10
  ------------------
  680|       |
  681|      1|	SET_IF_PARAM(IF_DEF_PARAMS(ifp), fast_hello);
  ------------------
  |  |   40|      1|#define SET_IF_PARAM(S, P) ((S)->P##__config) = 1
  ------------------
  682|      1|	IF_DEF_PARAMS(ifp)->fast_hello = OSPF_FAST_HELLO_DEFAULT;
  ------------------
  |  |   17|      1|#define IF_DEF_PARAMS(I) (IF_OSPF_IF_INFO (I)->def_params)
  |  |  ------------------
  |  |  |  |   16|      1|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  ------------------
  ------------------
              	IF_DEF_PARAMS(ifp)->fast_hello = OSPF_FAST_HELLO_DEFAULT;
  ------------------
  |  |   70|      1|#define OSPF_FAST_HELLO_DEFAULT             0
  ------------------
  683|       |
  684|      1|	SET_IF_PARAM(IF_DEF_PARAMS(ifp), v_gr_hello_delay);
  ------------------
  |  |   40|      1|#define SET_IF_PARAM(S, P) ((S)->P##__config) = 1
  ------------------
  685|      1|	IF_DEF_PARAMS(ifp)->v_gr_hello_delay = OSPF_HELLO_DELAY_DEFAULT;
  ------------------
  |  |   17|      1|#define IF_DEF_PARAMS(I) (IF_OSPF_IF_INFO (I)->def_params)
  |  |  ------------------
  |  |  |  |   16|      1|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  ------------------
  ------------------
              	IF_DEF_PARAMS(ifp)->v_gr_hello_delay = OSPF_HELLO_DELAY_DEFAULT;
  ------------------
  |  |   58|      1|#define OSPF_HELLO_DELAY_DEFAULT           10
  ------------------
  686|       |
  687|      1|	SET_IF_PARAM(IF_DEF_PARAMS(ifp), v_wait);
  ------------------
  |  |   40|      1|#define SET_IF_PARAM(S, P) ((S)->P##__config) = 1
  ------------------
  688|      1|	IF_DEF_PARAMS(ifp)->v_wait = OSPF_ROUTER_DEAD_INTERVAL_DEFAULT;
  ------------------
  |  |   17|      1|#define IF_DEF_PARAMS(I) (IF_OSPF_IF_INFO (I)->def_params)
  |  |  ------------------
  |  |  |  |   16|      1|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  ------------------
  ------------------
              	IF_DEF_PARAMS(ifp)->v_wait = OSPF_ROUTER_DEAD_INTERVAL_DEFAULT;
  ------------------
  |  |   55|      1|#define OSPF_ROUTER_DEAD_INTERVAL_DEFAULT  40
  ------------------
  689|       |
  690|      1|	SET_IF_PARAM(IF_DEF_PARAMS(ifp), auth_simple);
  ------------------
  |  |   40|      1|#define SET_IF_PARAM(S, P) ((S)->P##__config) = 1
  ------------------
  691|      1|	memset(IF_DEF_PARAMS(ifp)->auth_simple, 0, OSPF_AUTH_SIMPLE_SIZE);
  ------------------
  |  |   17|      1|#define IF_DEF_PARAMS(I) (IF_OSPF_IF_INFO (I)->def_params)
  |  |  ------------------
  |  |  |  |   16|      1|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  ------------------
  ------------------
              	memset(IF_DEF_PARAMS(ifp)->auth_simple, 0, OSPF_AUTH_SIMPLE_SIZE);
  ------------------
  |  |   11|      1|#define OSPF_AUTH_SIMPLE_SIZE     8U
  ------------------
  692|       |
  693|      1|	SET_IF_PARAM(IF_DEF_PARAMS(ifp), auth_type);
  ------------------
  |  |   40|      1|#define SET_IF_PARAM(S, P) ((S)->P##__config) = 1
  ------------------
  694|      1|	IF_DEF_PARAMS(ifp)->auth_type = OSPF_AUTH_NOTSET;
  ------------------
  |  |   17|      1|#define IF_DEF_PARAMS(I) (IF_OSPF_IF_INFO (I)->def_params)
  |  |  ------------------
  |  |  |  |   16|      1|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  ------------------
  ------------------
              	IF_DEF_PARAMS(ifp)->auth_type = OSPF_AUTH_NOTSET;
  ------------------
  |  |   45|      1|#define OSPF_AUTH_NOTSET                   -1
  ------------------
  695|       |
  696|      1|	rc = ospf_opaque_new_if(ifp);
  697|      1|	return rc;
  698|      1|}
ospf_if_is_enable:
  735|  2.74k|{
  736|  2.74k|	if (!(if_is_loopback(oi->ifp)))
  ------------------
  |  Branch (736:6): [True: 2.74k, False: 0]
  ------------------
  737|  2.74k|		if (if_is_up(oi->ifp))
  ------------------
  |  Branch (737:7): [True: 0, False: 2.74k]
  ------------------
  738|      0|			return 1;
  739|       |
  740|  2.74k|	return 0;
  741|  2.74k|}
ospf_full_virtual_nbrs:
 1246|      1|{
 1247|      1|	if (IS_DEBUG_OSPF_EVENT) {
  ------------------
  |  |   92|      1|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|      1|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|      1|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1248|      0|		zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1249|      0|			"counting fully adjacent virtual neighbors in area %pI4",
 1250|      0|			&area->area_id);
 1251|      0|		zlog_debug("there are %d of them", area->full_vls);
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1252|      0|	}
 1253|       |
 1254|      1|	return area->full_vls;
 1255|      1|}
ospf_if_init:
 1541|      1|{
 1542|      1|	if_zapi_callbacks(ospf_ifp_create, ospf_ifp_up,
 1543|      1|			  ospf_ifp_down, ospf_ifp_destroy);
 1544|       |
 1545|       |	/* Initialize Zebra interface data structure. */
 1546|      1|	hook_register_prio(if_add, 0, ospf_if_new_hook);
  ------------------
  |  |  150|      1|	_hook_reg_svar(&_hook_##hookname, _hook_typecheck_##hookname(func),    \
  |  |  ------------------
  |  |  |  |  136|      1|	do {                                                                   \
  |  |  |  |  137|      1|		static struct hookent stack_hookent = {};                      \
  |  |  |  |  138|      1|		_hook_register(hook, &stack_hookent, funcptr, arg, has_arg,    \
  |  |  |  |  139|      1|			       module, funcname, prio);                        \
  |  |  |  |  140|      1|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (140:11): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|		       NULL, false, THIS_MODULE, #func, prio)
  ------------------
 1547|      1|	hook_register_prio(if_del, 0, ospf_if_delete_hook);
  ------------------
  |  |  150|      1|	_hook_reg_svar(&_hook_##hookname, _hook_typecheck_##hookname(func),    \
  |  |  ------------------
  |  |  |  |  136|      1|	do {                                                                   \
  |  |  |  |  137|      1|		static struct hookent stack_hookent = {};                      \
  |  |  |  |  138|      1|		_hook_register(hook, &stack_hookent, funcptr, arg, has_arg,    \
  |  |  |  |  139|      1|			       module, funcname, prio);                        \
  |  |  |  |  140|      1|	} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (140:11): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|		       NULL, false, THIS_MODULE, #func, prio)
  ------------------
 1548|      1|}
ospf_interface.c:ospf_add_to_if:
  193|      1|{
  194|      1|	struct route_node *rn;
  195|      1|	struct prefix p;
  196|       |
  197|      1|	p = *oi->address;
  198|      1|	p.prefixlen = IPV4_MAX_BITLEN;
  ------------------
  |  |  334|      1|#define IPV4_MAX_BITLEN    32
  ------------------
  199|      1|	apply_mask(&p);
  200|       |
  201|      1|	rn = route_node_get(IF_OIFS(ifp), &p);
  ------------------
  |  |   18|      1|#define IF_OIFS(I)  (IF_OSPF_IF_INFO (I)->oifs)
  |  |  ------------------
  |  |  |  |   16|      1|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  ------------------
  ------------------
  202|       |	/* rn->info should either be NULL or equal to this oi
  203|       |	 * as route_node_get may return an existing node
  204|       |	 */
  205|      1|	assert(!rn->info || rn->info == oi);
  ------------------
  |  |   51|      1|	({                                                                     \
  |  |   52|      1|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|      1|			(used)) = {                                            \
  |  |   54|      1|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |   55|      1|			.expr = #expr_,                                        \
  |  |   56|      1|		};                                                             \
  |  |   57|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|      1|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 1]
  |  |  |  Branch (58:25): [True: 1, False: 0]
  |  |  |  Branch (58:25): [True: 0, False: 0]
  |  |  ------------------
  |  |   59|      1|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|      1|	})
  ------------------
  206|      1|	rn->info = oi;
  207|      1|}
ospf_interface.c:ospf_new_if_params:
  522|      1|{
  523|      1|	struct ospf_if_params *oip;
  524|       |
  525|      1|	oip = XCALLOC(MTYPE_OSPF_IF_PARAMS, sizeof(struct ospf_if_params));
  ------------------
  |  |  165|      1|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  526|       |
  527|      1|	UNSET_IF_PARAM(oip, output_cost_cmd);
  ------------------
  |  |   39|      1|#define UNSET_IF_PARAM(S, P) ((S)->P##__config) = 0
  ------------------
  528|      1|	UNSET_IF_PARAM(oip, transmit_delay);
  ------------------
  |  |   39|      1|#define UNSET_IF_PARAM(S, P) ((S)->P##__config) = 0
  ------------------
  529|      1|	UNSET_IF_PARAM(oip, retransmit_interval);
  ------------------
  |  |   39|      1|#define UNSET_IF_PARAM(S, P) ((S)->P##__config) = 0
  ------------------
  530|      1|	UNSET_IF_PARAM(oip, passive_interface);
  ------------------
  |  |   39|      1|#define UNSET_IF_PARAM(S, P) ((S)->P##__config) = 0
  ------------------
  531|      1|	UNSET_IF_PARAM(oip, v_hello);
  ------------------
  |  |   39|      1|#define UNSET_IF_PARAM(S, P) ((S)->P##__config) = 0
  ------------------
  532|      1|	UNSET_IF_PARAM(oip, fast_hello);
  ------------------
  |  |   39|      1|#define UNSET_IF_PARAM(S, P) ((S)->P##__config) = 0
  ------------------
  533|      1|	UNSET_IF_PARAM(oip, v_gr_hello_delay);
  ------------------
  |  |   39|      1|#define UNSET_IF_PARAM(S, P) ((S)->P##__config) = 0
  ------------------
  534|      1|	UNSET_IF_PARAM(oip, v_wait);
  ------------------
  |  |   39|      1|#define UNSET_IF_PARAM(S, P) ((S)->P##__config) = 0
  ------------------
  535|      1|	UNSET_IF_PARAM(oip, priority);
  ------------------
  |  |   39|      1|#define UNSET_IF_PARAM(S, P) ((S)->P##__config) = 0
  ------------------
  536|      1|	UNSET_IF_PARAM(oip, type);
  ------------------
  |  |   39|      1|#define UNSET_IF_PARAM(S, P) ((S)->P##__config) = 0
  ------------------
  537|      1|	UNSET_IF_PARAM(oip, auth_simple);
  ------------------
  |  |   39|      1|#define UNSET_IF_PARAM(S, P) ((S)->P##__config) = 0
  ------------------
  538|      1|	UNSET_IF_PARAM(oip, auth_crypt);
  ------------------
  |  |   39|      1|#define UNSET_IF_PARAM(S, P) ((S)->P##__config) = 0
  ------------------
  539|      1|	UNSET_IF_PARAM(oip, auth_type);
  ------------------
  |  |   39|      1|#define UNSET_IF_PARAM(S, P) ((S)->P##__config) = 0
  ------------------
  540|      1|	UNSET_IF_PARAM(oip, if_area);
  ------------------
  |  |   39|      1|#define UNSET_IF_PARAM(S, P) ((S)->P##__config) = 0
  ------------------
  541|       |
  542|      1|	oip->auth_crypt = list_new();
  543|       |
  544|      1|	oip->network_lsa_seqnum = htonl(OSPF_INITIAL_SEQUENCE_NUMBER);
  545|      1|	oip->is_v_wait_set = false;
  546|       |
  547|      1|	oip->ptp_dmvpn = 0;
  548|      1|	oip->p2mp_delay_reflood = OSPF_P2MP_DELAY_REFLOOD_DEFAULT;
  ------------------
  |  |   71|      1|#define OSPF_P2MP_DELAY_REFLOOD_DEFAULT	    false
  ------------------
  549|       |
  550|      1|	return oip;
  551|      1|}

ospf_ldp_sync_if_init:
  109|      1|{
  110|      1|	struct ospf_if_params *params;
  111|      1|	struct ldp_sync_info *ldp_sync_info;
  112|      1|	struct interface *ifp = oi->ifp;
  113|       |
  114|       |	/* called when OSPF is configured on an interface:
  115|       |	 *  if LDP-IGP Sync is configured globally set state
  116|       |	 *  if ptop interface inform LDP LDP-SYNC is enabled
  117|       |	 */
  118|      1|	if (if_is_loopback(ifp) || (ifp->vrf->vrf_id != VRF_DEFAULT)
  ------------------
  |  |  254|      1|#define VRF_DEFAULT 0
  ------------------
  |  Branch (118:6): [True: 0, False: 1]
  |  Branch (118:29): [True: 0, False: 1]
  ------------------
  119|      1|	    || !(CHECK_FLAG(oi->ospf->ldp_sync_cmd.flags,
  ------------------
  |  |  394|      1|#define CHECK_FLAG(V,F)      ((V) & (F))
  ------------------
  |  Branch (119:9): [True: 1, False: 0]
  ------------------
  120|      1|			    LDP_SYNC_FLAG_ENABLE)))
  121|      1|		return;
  122|       |
  123|      0|	ols_debug("%s: init if %s", __func__, ifp->name);
  ------------------
  |  |   14|      0|	do {                                                                   \
  |  |   15|      0|		if (IS_DEBUG_OSPF_LDP_SYNC)                                    \
  |  |  ------------------
  |  |  |  |  106|      0|#define IS_DEBUG_OSPF_LDP_SYNC IS_DEBUG_OSPF(ldp_sync, LDP_SYNC)
  |  |  |  |  ------------------
  |  |  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   50|      0|#define OSPF_DEBUG_LDP_SYNC 0x40
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   16|      0|			zlog_debug(__VA_ARGS__);                               \
  |  |  ------------------
  |  |  |  |  134|      0|#define zlog_debug(...) 0
  |  |  ------------------
  |  |   17|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (17:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  124|      0|	params = IF_DEF_PARAMS(ifp);
  ------------------
  |  |   17|      0|#define IF_DEF_PARAMS(I) (IF_OSPF_IF_INFO (I)->def_params)
  |  |  ------------------
  |  |  |  |   16|      0|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  ------------------
  ------------------
  125|      0|	if (params->ldp_sync_info == NULL)
  ------------------
  |  Branch (125:6): [True: 0, False: 0]
  ------------------
  126|      0|		params->ldp_sync_info = ldp_sync_info_create();
  127|       |
  128|      0|	ldp_sync_info = params->ldp_sync_info;
  129|       |
  130|       |	/* specified on interface overrides global config. */
  131|      0|	if (!CHECK_FLAG(ldp_sync_info->flags, LDP_SYNC_FLAG_HOLDDOWN))
  ------------------
  |  |  394|      0|#define CHECK_FLAG(V,F)      ((V) & (F))
  ------------------
  |  Branch (131:6): [True: 0, False: 0]
  ------------------
  132|      0|		ldp_sync_info->holddown = oi->ospf->ldp_sync_cmd.holddown;
  133|       |
  134|      0|	if (!CHECK_FLAG(ldp_sync_info->flags, LDP_SYNC_FLAG_IF_CONFIG))
  ------------------
  |  |  394|      0|#define CHECK_FLAG(V,F)      ((V) & (F))
  ------------------
  |  Branch (134:6): [True: 0, False: 0]
  ------------------
  135|      0|		ldp_sync_info->enabled = LDP_IGP_SYNC_ENABLED;
  ------------------
  |  |   21|      0|#define LDP_IGP_SYNC_ENABLED        1
  ------------------
  136|       |
  137|      0|	if ((params->type == OSPF_IFTYPE_POINTOPOINT ||
  ------------------
  |  |   44|      0|#define OSPF_IFTYPE_POINTOPOINT		1
  ------------------
  |  Branch (137:7): [True: 0, False: 0]
  ------------------
  138|      0|	     if_is_pointopoint(ifp)) &&
  ------------------
  |  Branch (138:7): [True: 0, False: 0]
  ------------------
  139|      0|	    ldp_sync_info->enabled == LDP_IGP_SYNC_ENABLED)
  ------------------
  |  |   21|      0|#define LDP_IGP_SYNC_ENABLED        1
  ------------------
  |  Branch (139:6): [True: 0, False: 0]
  ------------------
  140|      0|		ldp_sync_info->state = LDP_IGP_SYNC_STATE_REQUIRED_NOT_UP;
  ------------------
  |  |   24|      0|#define LDP_IGP_SYNC_STATE_REQUIRED_NOT_UP  1
  ------------------
  141|      0|}

get_metric:
   65|    226|{
   66|    226|	uint32_t m;
   67|    226|	m = metric[0];
   68|    226|	m = (m << 8) + metric[1];
   69|    226|	m = (m << 8) + metric[2];
   70|    226|	return m;
   71|    226|}
get_age:
  131|   145k|{
  132|   145k|	struct timeval rel;
  133|       |
  134|       |	/* As per rfc4136, the self-originated LSAs in their
  135|       |	 * own database keep aging, however rfc doesn't tell
  136|       |	 * till how long the LSA should be aged, as of now
  137|       |	 * we are capping it for OSPF_LSA_MAXAGE.
  138|       |	 */
  139|       |
  140|       |	/* If LSA is marked as donotage */
  141|   145k|	if (CHECK_FLAG(lsa->data->ls_age, DO_NOT_AGE) && !IS_LSA_SELF(lsa))
  ------------------
  |  |  394|   290k|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 49.0k, False: 96.3k]
  |  |  ------------------
  ------------------
              	if (CHECK_FLAG(lsa->data->ls_age, DO_NOT_AGE) && !IS_LSA_SELF(lsa))
  ------------------
  |  |  210|  49.0k|#define IS_LSA_SELF(L)          (CHECK_FLAG ((L)->flags, OSPF_LSA_SELF))
  |  |  ------------------
  |  |  |  |  394|  49.0k|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  ------------------
  |  Branch (141:51): [True: 48.0k, False: 948]
  ------------------
  142|  48.0k|		return ntohs(lsa->data->ls_age);
  143|       |
  144|  97.2k|	monotime_since(&lsa->tv_recv, &rel);
  145|       |	return ntohs(lsa->data->ls_age) + rel.tv_sec;
  146|   145k|}
ospf_lsa_checksum:
  154|    285|{
  155|    285|	uint8_t *buffer = &lsa->options;
  156|    285|	int options_offset = buffer - (uint8_t *)&lsa->ls_age; /* should be 2 */
  157|       |
  158|       |	/* Skip the AGE field */
  159|    285|	uint16_t len = ntohs(lsa->length) - options_offset;
  160|       |
  161|       |	/* Checksum offset starts from "options" field, not the beginning of the
  162|       |	   lsa_header struct. The offset is 14, rather than 16. */
  163|    285|	int checksum_offset = (uint8_t *)&lsa->checksum - buffer;
  164|       |
  165|    285|	return fletcher_checksum(buffer, len, checksum_offset);
  166|    285|}
ospf_lsa_checksum_valid:
  169|  49.4k|{
  170|  49.4k|	uint8_t *buffer = &lsa->options;
  171|  49.4k|	int options_offset = buffer - (uint8_t *)&lsa->ls_age; /* should be 2 */
  172|       |
  173|       |	/* Skip the AGE field */
  174|  49.4k|	uint16_t len = ntohs(lsa->length) - options_offset;
  175|       |
  176|  49.4k|	return (fletcher_checksum(buffer, len, FLETCHER_CHECKSUM_VALIDATE)
  ------------------
  |  |   66|  49.4k|#define FLETCHER_CHECKSUM_VALIDATE 0xffff
  ------------------
  177|  49.4k|		== 0);
  178|  49.4k|}
ospf_lsa_new:
  183|  28.0k|{
  184|  28.0k|	struct ospf_lsa *new;
  185|       |
  186|  28.0k|	new = XCALLOC(MTYPE_OSPF_LSA, sizeof(struct ospf_lsa));
  ------------------
  |  |  165|  28.0k|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  187|       |
  188|  28.0k|	new->flags = 0;
  189|  28.0k|	new->lock = 1;
  190|  28.0k|	new->retransmit_counter = 0;
  191|  28.0k|	monotime(&new->tv_recv);
  192|  28.0k|	new->tv_orig = new->tv_recv;
  193|  28.0k|	new->refresh_list = -1;
  194|  28.0k|	new->vrf_id = VRF_DEFAULT;
  ------------------
  |  |  254|  28.0k|#define VRF_DEFAULT 0
  ------------------
  195|  28.0k|	new->to_be_acknowledged = 0;
  196|  28.0k|	new->opaque_zero_len_delete = 0;
  197|       |
  198|  28.0k|	return new;
  199|  28.0k|}
ospf_lsa_new_and_data:
  202|  27.8k|{
  203|  27.8k|	struct ospf_lsa *new;
  204|       |
  205|  27.8k|	new = ospf_lsa_new();
  206|  27.8k|	new->data = ospf_lsa_data_new(size);
  207|  27.8k|	new->size = size;
  208|       |
  209|  27.8k|	return new;
  210|  27.8k|}
ospf_lsa_free:
  243|  19.9k|{
  244|  19.9k|	assert(lsa->lock == 0);
  ------------------
  |  |   51|  19.9k|	({                                                                     \
  |  |   52|  19.9k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  19.9k|			(used)) = {                                            \
  |  |   54|  19.9k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  19.9k|	{                                                                      \
  |  |  |  |  284|  19.9k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  19.9k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  19.9k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  19.9k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  19.9k|	}                                                                      \
  |  |  ------------------
  |  |   55|  19.9k|			.expr = #expr_,                                        \
  |  |   56|  19.9k|		};                                                             \
  |  |   57|  19.9k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  19.9k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  19.9k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  19.9k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  19.9k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 19.9k]
  |  |  |  Branch (58:24): [True: 19.9k, False: 0]
  |  |  ------------------
  |  |   59|  19.9k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  19.9k|	})
  ------------------
  245|       |
  246|  19.9k|	if (IS_DEBUG_OSPF(lsa, LSA))
  ------------------
  |  |   91|  19.9k|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   36|  19.9k|#define OSPF_DEBUG_LSA		0x0F
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 19.9k]
  |  |  ------------------
  ------------------
  247|      0|		zlog_debug("LSA: freed %p", (void *)lsa);
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  248|       |
  249|       |	/* Delete LSA data. */
  250|  19.9k|	if (lsa->data != NULL)
  ------------------
  |  Branch (250:6): [True: 19.7k, False: 150]
  ------------------
  251|  19.7k|		ospf_lsa_data_free(lsa->data);
  252|       |
  253|  19.9k|	assert(lsa->refresh_list < 0);
  ------------------
  |  |   51|  19.9k|	({                                                                     \
  |  |   52|  19.9k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  19.9k|			(used)) = {                                            \
  |  |   54|  19.9k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  19.9k|	{                                                                      \
  |  |  |  |  284|  19.9k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  19.9k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  19.9k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  19.9k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  19.9k|	}                                                                      \
  |  |  ------------------
  |  |   55|  19.9k|			.expr = #expr_,                                        \
  |  |   56|  19.9k|		};                                                             \
  |  |   57|  19.9k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  19.9k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  19.9k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  19.9k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  19.9k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 19.9k]
  |  |  |  Branch (58:24): [True: 19.9k, False: 0]
  |  |  ------------------
  |  |   59|  19.9k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  19.9k|	})
  ------------------
  254|       |
  255|  19.9k|	memset(lsa, 0, sizeof(struct ospf_lsa));
  256|       |	XFREE(MTYPE_OSPF_LSA, lsa);
  ------------------
  |  |  170|  19.9k|	do {                                                                   \
  |  |  171|  19.9k|		qfree(mtype, ptr);                                             \
  |  |  172|  19.9k|		ptr = NULL;                                                    \
  |  |  173|  19.9k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 19.9k]
  |  |  ------------------
  ------------------
  257|  19.9k|}
ospf_lsa_lock:
  261|  14.0k|{
  262|  14.0k|	lsa->lock++;
  263|  14.0k|	return lsa;
  264|  14.0k|}
ospf_lsa_unlock:
  268|  32.6k|{
  269|       |	/* This is sanity check. */
  270|  32.6k|	if (!lsa || !*lsa)
  ------------------
  |  Branch (270:6): [True: 0, False: 32.6k]
  |  Branch (270:14): [True: 75, False: 32.5k]
  ------------------
  271|     75|		return;
  272|       |
  273|  32.5k|	(*lsa)->lock--;
  274|       |
  275|  32.5k|	assert((*lsa)->lock >= 0);
  ------------------
  |  |   51|  32.5k|	({                                                                     \
  |  |   52|  32.5k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  32.5k|			(used)) = {                                            \
  |  |   54|  32.5k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  32.5k|	{                                                                      \
  |  |  |  |  284|  32.5k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  32.5k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  32.5k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  32.5k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  32.5k|	}                                                                      \
  |  |  ------------------
  |  |   55|  32.5k|			.expr = #expr_,                                        \
  |  |   56|  32.5k|		};                                                             \
  |  |   57|  32.5k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  32.5k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  32.5k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  32.5k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  32.5k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 32.5k]
  |  |  |  Branch (58:24): [True: 32.5k, False: 0]
  |  |  ------------------
  |  |   59|  32.5k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  32.5k|	})
  ------------------
  276|       |
  277|  32.5k|	if ((*lsa)->lock == 0) {
  ------------------
  |  Branch (277:6): [True: 19.9k, False: 12.6k]
  ------------------
  278|  19.9k|		assert(CHECK_FLAG((*lsa)->flags, OSPF_LSA_DISCARD));
  ------------------
  |  |   51|  19.9k|	({                                                                     \
  |  |   52|  19.9k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  19.9k|			(used)) = {                                            \
  |  |   54|  19.9k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  19.9k|	{                                                                      \
  |  |  |  |  284|  19.9k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  19.9k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  19.9k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  19.9k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  19.9k|	}                                                                      \
  |  |  ------------------
  |  |   55|  19.9k|			.expr = #expr_,                                        \
  |  |   56|  19.9k|		};                                                             \
  |  |   57|  19.9k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  19.9k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  19.9k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  19.9k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  19.9k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 19.9k]
  |  |  |  Branch (58:24): [True: 19.9k, False: 0]
  |  |  ------------------
  |  |   59|  19.9k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  19.9k|	})
  ------------------
  279|  19.9k|		ospf_lsa_free(*lsa);
  280|       |		*lsa = NULL;
  281|  19.9k|	}
  282|  32.5k|}
ospf_lsa_discard:
  286|  27.2k|{
  287|  27.2k|	if (!CHECK_FLAG(lsa->flags, OSPF_LSA_DISCARD)) {
  ------------------
  |  |  394|  27.2k|#define CHECK_FLAG(V,F)      ((V) & (F))
  ------------------
  |  Branch (287:6): [True: 27.2k, False: 0]
  ------------------
  288|  27.2k|		SET_FLAG(lsa->flags, OSPF_LSA_DISCARD);
  ------------------
  |  |  395|  27.2k|#define SET_FLAG(V,F)        (V) |= (F)
  ------------------
  289|  27.2k|		ospf_lsa_unlock(&lsa);
  290|  27.2k|	}
  291|  27.2k|}
ospf_lsa_data_new:
  295|  27.8k|{
  296|  27.8k|	return XCALLOC(MTYPE_OSPF_LSA_DATA, size);
  ------------------
  |  |  165|  27.8k|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  297|  27.8k|}
ospf_lsa_data_free:
  312|  19.7k|{
  313|  19.7k|	if (IS_DEBUG_OSPF(lsa, LSA))
  ------------------
  |  |   91|  19.7k|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   36|  19.7k|#define OSPF_DEBUG_LSA		0x0F
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 19.7k]
  |  |  ------------------
  ------------------
  314|      0|		zlog_debug("LSA[Type%d:%pI4]: data freed %p", lsah->type,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  315|  19.7k|			   &lsah->id, (void *)lsah);
  316|       |
  317|       |	XFREE(MTYPE_OSPF_LSA_DATA, lsah);
  ------------------
  |  |  170|  19.7k|	do {                                                                   \
  |  |  171|  19.7k|		qfree(mtype, ptr);                                             \
  |  |  172|  19.7k|		ptr = NULL;                                                    \
  |  |  173|  19.7k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 19.7k]
  |  |  ------------------
  ------------------
  318|  19.7k|}
lsa_header_set:
  352|      1|{
  353|      1|	struct lsa_header *lsah;
  354|       |
  355|      1|	lsah = (struct lsa_header *)STREAM_DATA(s);
  ------------------
  |  |  126|      1|#define STREAM_DATA(S)  ((S)->data)
  ------------------
  356|       |
  357|      1|	lsah->ls_age = htons(OSPF_LSA_INITIAL_AGE);
  358|      1|	lsah->options = options;
  359|      1|	lsah->type = type;
  360|      1|	lsah->id = id;
  361|      1|	lsah->adv_router = router_id;
  362|      1|	lsah->ls_seqnum = htonl(OSPF_INITIAL_SEQUENCE_NUMBER);
  363|       |
  364|      1|	stream_forward_endp(s, OSPF_LSA_HEADER_SIZE);
  ------------------
  |  |   36|      1|#define OSPF_LSA_HEADER_SIZE	     20U
  ------------------
  365|      1|}
router_lsa_flags:
  371|      1|{
  372|      1|	uint8_t flags;
  373|       |
  374|      1|	flags = area->ospf->flags;
  375|       |
  376|       |	/* Set virtual link flag. */
  377|      1|	if (ospf_full_virtual_nbrs(area))
  ------------------
  |  Branch (377:6): [True: 0, False: 1]
  ------------------
  378|      0|		SET_FLAG(flags, ROUTER_LSA_VIRTUAL);
  ------------------
  |  |  395|      0|#define SET_FLAG(V,F)        (V) |= (F)
  ------------------
  379|      1|	else
  380|       |		/* Just sanity check */
  381|      1|		UNSET_FLAG(flags, ROUTER_LSA_VIRTUAL);
  ------------------
  |  |  396|      1|#define UNSET_FLAG(V,F)      (V) &= ~(F)
  ------------------
  382|       |
  383|       |	/* Set Shortcut ABR behabiour flag. */
  384|      1|	UNSET_FLAG(flags, ROUTER_LSA_SHORTCUT);
  ------------------
  |  |  396|      1|#define UNSET_FLAG(V,F)      (V) &= ~(F)
  ------------------
  385|      1|	if (area->ospf->abr_type == OSPF_ABR_SHORTCUT)
  ------------------
  |  |  188|      1|#define OSPF_ABR_SHORTCUT       4
  ------------------
  |  Branch (385:6): [True: 0, False: 1]
  ------------------
  386|      0|		if (!OSPF_IS_AREA_BACKBONE(area))
  ------------------
  |  |  679|      0|#define OSPF_IS_AREA_BACKBONE(A) OSPF_IS_AREA_ID_BACKBONE ((A)->area_id)
  |  |  ------------------
  |  |  |  |  678|      0|#define OSPF_IS_AREA_ID_BACKBONE(I) ((I).s_addr == OSPF_AREA_BACKBONE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   73|      0|#define OSPF_AREA_BACKBONE              0x00000000      /* 0.0.0.0 */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (386:7): [True: 0, False: 0]
  ------------------
  387|      0|			if ((area->shortcut_configured == OSPF_SHORTCUT_DEFAULT
  ------------------
  |  |  527|      0|#define OSPF_SHORTCUT_DEFAULT	0
  ------------------
  |  Branch (387:9): [True: 0, False: 0]
  ------------------
  388|      0|			     && area->ospf->backbone == NULL)
  ------------------
  |  Branch (388:12): [True: 0, False: 0]
  ------------------
  389|      0|			    || area->shortcut_configured
  ------------------
  |  Branch (389:11): [True: 0, False: 0]
  ------------------
  390|      0|				       == OSPF_SHORTCUT_ENABLE)
  ------------------
  |  |  528|      0|#define OSPF_SHORTCUT_ENABLE	1
  ------------------
  391|      0|				SET_FLAG(flags, ROUTER_LSA_SHORTCUT);
  ------------------
  |  |  395|      0|#define SET_FLAG(V,F)        (V) |= (F)
  ------------------
  392|       |
  393|       |	/* ASBR can't exit in stub area. */
  394|      1|	if (area->external_routing == OSPF_AREA_STUB)
  ------------------
  |  |   77|      1|#define OSPF_AREA_STUB          1
  ------------------
  |  Branch (394:6): [True: 0, False: 1]
  ------------------
  395|      0|		UNSET_FLAG(flags, ROUTER_LSA_EXTERNAL);
  ------------------
  |  |  396|      0|#define UNSET_FLAG(V,F)      (V) &= ~(F)
  ------------------
  396|       |	/* If ASBR set External flag */
  397|      1|	else if (IS_OSPF_ASBR(area->ospf))
  ------------------
  |  |  676|      1|#define IS_OSPF_ASBR(O)		((O)->flags & OSPF_FLAG_ASBR)
  |  |  ------------------
  |  |  |  |  180|      1|#define OSPF_FLAG_ASBR          0x0002
  |  |  ------------------
  |  |  |  Branch (676:26): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  398|      0|		SET_FLAG(flags, ROUTER_LSA_EXTERNAL);
  ------------------
  |  |  395|      0|#define SET_FLAG(V,F)        (V) |= (F)
  ------------------
  399|       |
  400|       |	/* Set ABR dependent flags */
  401|      1|	if (IS_OSPF_ABR(area->ospf)) {
  ------------------
  |  |  675|      1|#define IS_OSPF_ABR(O)		((O)->flags & OSPF_FLAG_ABR)
  |  |  ------------------
  |  |  |  |  179|      1|#define OSPF_FLAG_ABR           0x0001
  |  |  ------------------
  |  |  |  Branch (675:25): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  402|      0|		SET_FLAG(flags, ROUTER_LSA_BORDER);
  ------------------
  |  |  395|      0|#define SET_FLAG(V,F)        (V) |= (F)
  ------------------
  403|       |		/* If Area is NSSA and we are both ABR and unconditional
  404|       |		 * translator,
  405|       |		 * set Nt bit to inform other routers.
  406|       |		 */
  407|      0|		if ((area->external_routing == OSPF_AREA_NSSA)
  ------------------
  |  |   78|      0|#define OSPF_AREA_NSSA          2
  ------------------
  |  Branch (407:7): [True: 0, False: 0]
  ------------------
  408|      0|		    && (area->NSSATranslatorRole == OSPF_NSSA_ROLE_ALWAYS))
  ------------------
  |  |  538|      0|#define OSPF_NSSA_ROLE_ALWAYS    2
  ------------------
  |  Branch (408:10): [True: 0, False: 0]
  ------------------
  409|      0|			SET_FLAG(flags, ROUTER_LSA_NT);
  ------------------
  |  |  395|      0|#define SET_FLAG(V,F)        (V) |= (F)
  ------------------
  410|      0|	}
  411|      1|	return flags;
  412|      1|}
ospf_router_lsa_body_set:
  723|      1|{
  724|      1|	unsigned long putp;
  725|      1|	uint16_t cnt;
  726|       |
  727|       |	/* Set flags. */
  728|      1|	stream_putc(*s, router_lsa_flags(area));
  729|       |
  730|       |	/* Set Zero fields. */
  731|      1|	stream_putc(*s, 0);
  732|       |
  733|       |	/* Keep pointer to # links. */
  734|      1|	putp = stream_get_endp(*s);
  735|       |
  736|       |	/* Forward word */
  737|      1|	stream_putw(*s, 0);
  738|       |
  739|       |	/* Set all link information. */
  740|      1|	cnt = router_lsa_link_set(s, area);
  741|       |
  742|       |	/* Set # of links here. */
  743|      1|	stream_putw_at(*s, putp, cnt);
  744|      1|}
ospf_router_lsa_update_area:
  932|      1|{
  933|      1|	if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|      1|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|      1|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|      1|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  934|      0|		zlog_debug("[router-LSA]: (router-LSA area update)");
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  935|       |
  936|       |	/* Now refresh router-LSA. */
  937|      1|	if (area->router_lsa_self)
  ------------------
  |  Branch (937:6): [True: 0, False: 1]
  ------------------
  938|      0|		ospf_lsa_refresh(area->ospf, area->router_lsa_self);
  939|       |	/* Newly originate router-LSA. */
  940|      1|	else
  941|      1|		ospf_router_lsa_originate(area);
  942|       |
  943|      1|	return 0;
  944|      1|}
ospf_lsa_install:
 2924|  1.03k|{
 2925|  1.03k|	struct ospf_lsa *new = NULL;
 2926|  1.03k|	struct ospf_lsa *old = NULL;
 2927|  1.03k|	struct ospf_lsdb *lsdb = NULL;
 2928|  1.03k|	int rt_recalc;
 2929|       |
 2930|       |	/* Set LSDB. */
 2931|  1.03k|	switch (lsa->data->type) {
 2932|       |	/* kevinm */
 2933|      0|	case OSPF_AS_NSSA_LSA:
  ------------------
  |  |   30|      0|#define OSPF_AS_NSSA_LSA	              7
  ------------------
  |  Branch (2933:2): [True: 0, False: 1.03k]
  ------------------
 2934|      0|		if (lsa->area)
  ------------------
  |  Branch (2934:7): [True: 0, False: 0]
  ------------------
 2935|      0|			lsdb = lsa->area->lsdb;
 2936|      0|		else
 2937|      0|			lsdb = ospf->lsdb;
 2938|      0|		break;
 2939|    132|	case OSPF_AS_EXTERNAL_LSA:
  ------------------
  |  |   28|    132|#define OSPF_AS_EXTERNAL_LSA          5
  ------------------
  |  Branch (2939:2): [True: 132, False: 907]
  ------------------
 2940|    195|	case OSPF_OPAQUE_AS_LSA:
  ------------------
  |  |   34|    195|#define OSPF_OPAQUE_AS_LSA	     11
  ------------------
  |  Branch (2940:2): [True: 63, False: 976]
  ------------------
 2941|    195|		lsdb = ospf->lsdb;
 2942|    195|		break;
 2943|    844|	default:
  ------------------
  |  Branch (2943:2): [True: 844, False: 195]
  ------------------
 2944|    844|		if (lsa->area)
  ------------------
  |  Branch (2944:7): [True: 844, False: 0]
  ------------------
 2945|    844|			lsdb = lsa->area->lsdb;
 2946|    844|		break;
 2947|  1.03k|	}
 2948|       |
 2949|  1.03k|	assert(lsdb);
  ------------------
  |  |   51|  1.03k|	({                                                                     \
  |  |   52|  1.03k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  1.03k|			(used)) = {                                            \
  |  |   54|  1.03k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  1.03k|	{                                                                      \
  |  |  |  |  284|  1.03k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  1.03k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  1.03k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  1.03k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  1.03k|	}                                                                      \
  |  |  ------------------
  |  |   55|  1.03k|			.expr = #expr_,                                        \
  |  |   56|  1.03k|		};                                                             \
  |  |   57|  1.03k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  1.03k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  1.03k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  1.03k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  1.03k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 1.03k]
  |  |  |  Branch (58:24): [True: 1.03k, False: 0]
  |  |  ------------------
  |  |   59|  1.03k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  1.03k|	})
  ------------------
 2950|       |
 2951|       |	/*  RFC 2328 13.2.  Installing LSAs in the database
 2952|       |
 2953|       |	      Installing a new LSA in the database, either as the result of
 2954|       |	      flooding or a newly self-originated LSA, may cause the OSPF
 2955|       |	      routing table structure to be recalculated.  The contents of the
 2956|       |	      new LSA should be compared to the old instance, if present.  If
 2957|       |	      there is no difference, there is no need to recalculate the
 2958|       |	      routing table. When comparing an LSA to its previous instance,
 2959|       |	      the following are all considered to be differences in contents:
 2960|       |
 2961|       |		  o   The LSA's Options field has changed.
 2962|       |
 2963|       |		  o   One of the LSA instances has LS age set to MaxAge, and
 2964|       |		      the other does not.
 2965|       |
 2966|       |		  o   The length field in the LSA header has changed.
 2967|       |
 2968|       |		  o   The body of the LSA (i.e., anything outside the 20-byte
 2969|       |		      LSA header) has changed. Note that this excludes changes
 2970|       |		      in LS Sequence Number and LS Checksum.
 2971|       |
 2972|       |	*/
 2973|       |	/* Look up old LSA and determine if any SPF calculation or incremental
 2974|       |	   update is needed */
 2975|  1.03k|	old = ospf_lsdb_lookup(lsdb, lsa);
 2976|       |
 2977|       |	/* Do comparison and record if recalc needed. */
 2978|  1.03k|	rt_recalc = 0;
 2979|  1.03k|	if (old == NULL || ospf_lsa_different(old, lsa, false)) {
  ------------------
  |  Branch (2979:6): [True: 1.03k, False: 0]
  |  Branch (2979:21): [True: 0, False: 0]
  ------------------
 2980|       |		/* Ref rfc3623 section 3.2.3
 2981|       |		 * Installing new lsa or change in the existing LSA
 2982|       |		 * or flushing existing LSA leads to topo change
 2983|       |		 * and trigger SPF caculation.
 2984|       |		 * So, router should be aborted from HELPER role
 2985|       |		 * if it is detected as TOPO  change.
 2986|       |		 */
 2987|  1.03k|		if (ospf->active_restarter_cnt &&
  ------------------
  |  Branch (2987:7): [True: 0, False: 1.03k]
  ------------------
 2988|      0|		    CHECK_LSA_TYPE_1_TO_5_OR_7(lsa->data->type)) {
  ------------------
  |  |  218|      0|	((type == OSPF_ROUTER_LSA) || (type == OSPF_NETWORK_LSA)               \
  |  |  ------------------
  |  |  |  |   24|      0|#define OSPF_ROUTER_LSA               1
  |  |  ------------------
  |  |               	((type == OSPF_ROUTER_LSA) || (type == OSPF_NETWORK_LSA)               \
  |  |  ------------------
  |  |  |  |   25|      0|#define OSPF_NETWORK_LSA              2
  |  |  ------------------
  |  |  |  Branch (218:3): [True: 0, False: 0]
  |  |  |  Branch (218:32): [True: 0, False: 0]
  |  |  ------------------
  |  |  219|      0|	 || (type == OSPF_SUMMARY_LSA) || (type == OSPF_ASBR_SUMMARY_LSA)      \
  |  |  ------------------
  |  |  |  |   26|      0|#define OSPF_SUMMARY_LSA              3
  |  |  ------------------
  |  |               	 || (type == OSPF_SUMMARY_LSA) || (type == OSPF_ASBR_SUMMARY_LSA)      \
  |  |  ------------------
  |  |  |  |   27|      0|#define OSPF_ASBR_SUMMARY_LSA         4
  |  |  ------------------
  |  |  |  Branch (219:6): [True: 0, False: 0]
  |  |  |  Branch (219:36): [True: 0, False: 0]
  |  |  ------------------
  |  |  220|      0|	 || (type == OSPF_AS_EXTERNAL_LSA) || (type == OSPF_AS_NSSA_LSA))
  |  |  ------------------
  |  |  |  |   28|      0|#define OSPF_AS_EXTERNAL_LSA          5
  |  |  ------------------
  |  |               	 || (type == OSPF_AS_EXTERNAL_LSA) || (type == OSPF_AS_NSSA_LSA))
  |  |  ------------------
  |  |  |  |   30|      0|#define OSPF_AS_NSSA_LSA	              7
  |  |  ------------------
  |  |  |  Branch (220:6): [True: 0, False: 0]
  |  |  |  Branch (220:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2989|      0|			if (old == NULL || ospf_lsa_different(old, lsa, true))
  ------------------
  |  Branch (2989:8): [True: 0, False: 0]
  |  Branch (2989:23): [True: 0, False: 0]
  ------------------
 2990|      0|				ospf_helper_handle_topo_chg(ospf, lsa);
 2991|      0|		}
 2992|       |
 2993|  1.03k|		rt_recalc = 1;
 2994|  1.03k|	}
 2995|       |
 2996|       |	/*
 2997|       |	   Sequence number check (Section 14.1 of rfc 2328)
 2998|       |	   "Premature aging is used when it is time for a self-originated
 2999|       |	    LSA's sequence number field to wrap.  At this point, the current
 3000|       |	    LSA instance (having LS sequence number MaxSequenceNumber) must
 3001|       |	    be prematurely aged and flushed from the routing domain before a
 3002|       |	    new instance with sequence number equal to InitialSequenceNumber
 3003|       |	    can be originated. "
 3004|       |	 */
 3005|       |
 3006|  1.03k|	if (ntohl(lsa->data->ls_seqnum) != 0
  ------------------
  |  Branch (3006:6): [True: 1.02k, False: 19]
  ------------------
 3007|  1.03k|	    && ntohl(lsa->data->ls_seqnum) - 1 == OSPF_MAX_SEQUENCE_NUMBER) {
  ------------------
  |  |   39|  1.02k|#define OSPF_MAX_SEQUENCE_NUMBER        0x7fffffffU
  ------------------
  |  Branch (3007:9): [True: 270, False: 750]
  ------------------
 3008|    270|		if (ospf_lsa_is_self_originated(ospf, lsa)) {
  ------------------
  |  Branch (3008:7): [True: 49, False: 221]
  ------------------
 3009|     49|			lsa->data->ls_seqnum = htonl(OSPF_MAX_SEQUENCE_NUMBER);
 3010|       |
 3011|     49|			if (!IS_LSA_MAXAGE(lsa))
  ------------------
  |  |  211|     49|#define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |  209|     49|#define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|     49|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |               #define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|      0|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (209:20): [True: 0, False: 49]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |   33|     49|#define OSPF_LSA_MAXAGE                       3600
  |  |  ------------------
  ------------------
  |  Branch (3011:8): [True: 48, False: 1]
  ------------------
 3012|     48|				lsa->flags |= OSPF_LSA_PREMATURE_AGE;
  ------------------
  |  |   70|     48|#define OSPF_LSA_PREMATURE_AGE	  0x40
  ------------------
 3013|     49|			lsa->data->ls_age = htons(OSPF_LSA_MAXAGE);
 3014|       |
 3015|     49|			if (IS_DEBUG_OSPF(lsa, LSA_REFRESH)) {
  ------------------
  |  |   91|     49|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   35|     49|#define OSPF_DEBUG_LSA_REFRESH  0x08
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 49]
  |  |  ------------------
  ------------------
 3016|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 3017|      0|					"%s() Premature Aging lsa %p, seqnum 0x%x",
 3018|      0|					__func__, lsa,
 3019|      0|					ntohl(lsa->data->ls_seqnum));
 3020|      0|				ospf_lsa_header_dump(lsa->data);
 3021|      0|			}
 3022|    221|		} else {
 3023|    221|			if (IS_DEBUG_OSPF(lsa, LSA_GENERATE)) {
  ------------------
  |  |   91|    221|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   32|    221|#define OSPF_DEBUG_LSA_GENERATE 0x01
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 221]
  |  |  ------------------
  ------------------
 3024|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 3025|      0|					"%s() got an lsa with seq 0x80000000 that was not self originated. Ignoring",
 3026|      0|					__func__);
 3027|      0|				ospf_lsa_header_dump(lsa->data);
 3028|      0|			}
 3029|    221|			return old;
 3030|    221|		}
 3031|    270|	}
 3032|       |
 3033|       |	/* discard old LSA from LSDB */
 3034|    818|	if (old != NULL)
  ------------------
  |  Branch (3034:6): [True: 0, False: 818]
  ------------------
 3035|      0|		ospf_discard_from_db(ospf, lsdb, lsa);
 3036|       |
 3037|       |	/* Calculate Checksum if self-originated?. */
 3038|    818|	if (IS_LSA_SELF(lsa))
  ------------------
  |  |  210|    818|#define IS_LSA_SELF(L)          (CHECK_FLAG ((L)->flags, OSPF_LSA_SELF))
  |  |  ------------------
  |  |  |  |  394|    818|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (210:33): [True: 285, False: 533]
  |  |  ------------------
  ------------------
 3039|    285|		ospf_lsa_checksum(lsa->data);
 3040|       |
 3041|       |	/* Insert LSA to LSDB. */
 3042|    818|	ospf_lsdb_add(lsdb, lsa);
 3043|    818|	lsa->lsdb = lsdb;
 3044|       |
 3045|       |	/* Do LSA specific installation process. */
 3046|    818|	switch (lsa->data->type) {
 3047|     38|	case OSPF_ROUTER_LSA:
  ------------------
  |  |   24|     38|#define OSPF_ROUTER_LSA               1
  ------------------
  |  Branch (3047:2): [True: 38, False: 780]
  ------------------
 3048|     38|		new = ospf_router_lsa_install(ospf, lsa, rt_recalc);
 3049|     38|		break;
 3050|    346|	case OSPF_NETWORK_LSA:
  ------------------
  |  |   25|    346|#define OSPF_NETWORK_LSA              2
  ------------------
  |  Branch (3050:2): [True: 346, False: 472]
  ------------------
 3051|    346|		assert(oi);
  ------------------
  |  |   51|    346|	({                                                                     \
  |  |   52|    346|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|    346|			(used)) = {                                            \
  |  |   54|    346|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|    346|	{                                                                      \
  |  |  |  |  284|    346|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|    346|		/* .type = */ (type_),                                         \
  |  |  |  |  286|    346|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|    346|		/* .func = */ func_,                                           \
  |  |  |  |  289|    346|	}                                                                      \
  |  |  ------------------
  |  |   55|    346|			.expr = #expr_,                                        \
  |  |   56|    346|		};                                                             \
  |  |   57|    346|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|    346|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|    346|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|    346|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|    346|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 346]
  |  |  |  Branch (58:24): [True: 346, False: 0]
  |  |  ------------------
  |  |   59|    346|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|    346|	})
  ------------------
 3052|    346|		new = ospf_network_lsa_install(ospf, oi, lsa, rt_recalc);
 3053|    346|		break;
 3054|     27|	case OSPF_SUMMARY_LSA:
  ------------------
  |  |   26|     27|#define OSPF_SUMMARY_LSA              3
  ------------------
  |  Branch (3054:2): [True: 27, False: 791]
  ------------------
 3055|     27|		new = ospf_summary_lsa_install(ospf, lsa, rt_recalc);
 3056|     27|		break;
 3057|    226|	case OSPF_ASBR_SUMMARY_LSA:
  ------------------
  |  |   27|    226|#define OSPF_ASBR_SUMMARY_LSA         4
  ------------------
  |  Branch (3057:2): [True: 226, False: 592]
  ------------------
 3058|    226|		new = ospf_summary_asbr_lsa_install(ospf, lsa, rt_recalc);
 3059|    226|		break;
 3060|    132|	case OSPF_AS_EXTERNAL_LSA:
  ------------------
  |  |   28|    132|#define OSPF_AS_EXTERNAL_LSA          5
  ------------------
  |  Branch (3060:2): [True: 132, False: 686]
  ------------------
 3061|    132|		new = ospf_external_lsa_install(ospf, lsa, rt_recalc);
 3062|    132|		break;
 3063|      7|	case OSPF_OPAQUE_LINK_LSA:
  ------------------
  |  |   32|      7|#define OSPF_OPAQUE_LINK_LSA	      9
  ------------------
  |  Branch (3063:2): [True: 7, False: 811]
  ------------------
 3064|      7|		if (IS_LSA_SELF(lsa))
  ------------------
  |  |  210|      7|#define IS_LSA_SELF(L)          (CHECK_FLAG ((L)->flags, OSPF_LSA_SELF))
  |  |  ------------------
  |  |  |  |  394|      7|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (210:33): [True: 1, False: 6]
  |  |  ------------------
  ------------------
 3065|      1|			lsa->oi = oi; /* Specify outgoing ospf-interface for
 3066|       |					 this LSA. */
 3067|      6|		else {
 3068|       |			/* Incoming "oi" for this LSA has set at LSUpd
 3069|       |			 * reception. */
 3070|      6|		}
 3071|       |	/* Fallthrough */
 3072|     34|	case OSPF_OPAQUE_AREA_LSA:
  ------------------
  |  |   33|     34|#define OSPF_OPAQUE_AREA_LSA	     10
  ------------------
  |  Branch (3072:2): [True: 27, False: 791]
  ------------------
 3073|     49|	case OSPF_OPAQUE_AS_LSA:
  ------------------
  |  |   34|     49|#define OSPF_OPAQUE_AS_LSA	     11
  ------------------
  |  Branch (3073:2): [True: 15, False: 803]
  ------------------
 3074|     49|		new = ospf_opaque_lsa_install(lsa, rt_recalc);
 3075|     49|		break;
 3076|      0|	case OSPF_AS_NSSA_LSA:
  ------------------
  |  |   30|      0|#define OSPF_AS_NSSA_LSA	              7
  ------------------
  |  Branch (3076:2): [True: 0, False: 818]
  ------------------
 3077|      0|		new = ospf_external_lsa_install(ospf, lsa, rt_recalc);
 3078|      0|	default: /* type-6,8,9....nothing special */
  ------------------
  |  Branch (3078:2): [True: 0, False: 818]
  ------------------
 3079|      0|		break;
 3080|    818|	}
 3081|       |
 3082|    818|	if (new == NULL)
  ------------------
  |  Branch (3082:6): [True: 12, False: 806]
  ------------------
 3083|     12|		return new; /* Installation failed, cannot proceed further --
 3084|       |			       endo. */
 3085|       |
 3086|       |	/* Debug logs. */
 3087|    806|	if (IS_DEBUG_OSPF(lsa, LSA_INSTALL)) {
  ------------------
  |  |   91|    806|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   34|    806|#define OSPF_DEBUG_LSA_INSTALL  0x04
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 806]
  |  |  ------------------
  ------------------
 3088|      0|		switch (lsa->data->type) {
 3089|      0|		case OSPF_AS_EXTERNAL_LSA:
  ------------------
  |  |   28|      0|#define OSPF_AS_EXTERNAL_LSA          5
  ------------------
  |  Branch (3089:3): [True: 0, False: 0]
  ------------------
 3090|      0|		case OSPF_OPAQUE_AS_LSA:
  ------------------
  |  |   34|      0|#define OSPF_OPAQUE_AS_LSA	     11
  ------------------
  |  Branch (3090:3): [True: 0, False: 0]
  ------------------
 3091|      0|		case OSPF_AS_NSSA_LSA:
  ------------------
  |  |   30|      0|#define OSPF_AS_NSSA_LSA	              7
  ------------------
  |  Branch (3091:3): [True: 0, False: 0]
  ------------------
 3092|      0|			zlog_debug("LSA[%s]: Install %s", dump_lsa_key(new),
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 3093|      0|				   lookup_msg(ospf_lsa_type_msg,
 3094|      0|					      new->data->type, NULL));
 3095|      0|			break;
 3096|      0|		default:
  ------------------
  |  Branch (3096:3): [True: 0, False: 0]
  ------------------
 3097|      0|			zlog_debug("LSA[%s]: Install %s to Area %pI4",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 3098|      0|				   dump_lsa_key(new),
 3099|      0|				   lookup_msg(ospf_lsa_type_msg,
 3100|      0|					      new->data->type, NULL),
 3101|      0|				   &new->area->area_id);
 3102|      0|			break;
 3103|      0|		}
 3104|      0|	}
 3105|       |
 3106|       |	/*
 3107|       |	   If received LSA' ls_age is MaxAge, or lsa is being prematurely aged
 3108|       |	   (it's getting flushed out of the area), set LSA on MaxAge LSA list.
 3109|       |	 */
 3110|    806|	if (IS_LSA_MAXAGE(new)) {
  ------------------
  |  |  211|    806|#define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |  209|    806|#define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    806|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |               #define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|      0|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (209:20): [True: 0, False: 806]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |   33|    806|#define OSPF_LSA_MAXAGE                       3600
  |  |  ------------------
  |  |  |  Branch (211:33): [True: 48, False: 758]
  |  |  ------------------
  ------------------
 3111|     48|		if (IS_DEBUG_OSPF(lsa, LSA_INSTALL))
  ------------------
  |  |   91|     48|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   34|     48|#define OSPF_DEBUG_LSA_INSTALL  0x04
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 48]
  |  |  ------------------
  ------------------
 3112|      0|			zlog_debug("LSA[%s]: Install LSA %p, MaxAge",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 3113|     48|				   dump_lsa_key(new), lsa);
 3114|     48|		ospf_lsa_maxage(ospf, lsa);
 3115|     48|	}
 3116|       |
 3117|    806|	return new;
 3118|    806|}
ospf_check_nbr_status:
 3122|    663|{
 3123|    663|	struct listnode *node, *nnode;
 3124|    663|	struct ospf_interface *oi;
 3125|       |
 3126|    663|	for (ALL_LIST_ELEMENTS(ospf->oiflist, node, nnode, oi)) {
  ------------------
  |  |  320|    663|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|    663|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 663, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  321|  1.32k|	(node) != NULL                                                         \
  |  |  ------------------
  |  |  |  Branch (321:2): [True: 663, False: 663]
  |  |  ------------------
  |  |  322|  1.32k|		&& ((data) = static_cast(data, listgetdata(node)),             \
  |  |  ------------------
  |  |  |  |  204|  3.97k|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 663, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 663]
  |  |  |  |  |  Branch (204:28): [True: 663, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 663]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:6): [True: 663, False: 0]
  |  |  ------------------
  |  |  323|  1.32k|		    (nextnode) = node->next, 1);                               \
  |  |  324|    663|	(node) = (nextnode), ((data) = NULL)
  ------------------
 3127|    663|		struct route_node *rn;
 3128|    663|		struct ospf_neighbor *nbr;
 3129|       |
 3130|    663|		if (ospf_if_is_enable(oi))
  ------------------
  |  Branch (3130:7): [True: 0, False: 663]
  ------------------
 3131|      0|			for (rn = route_top(oi->nbrs); rn; rn = route_next(rn))
  ------------------
  |  Branch (3131:35): [True: 0, False: 0]
  ------------------
 3132|      0|				if ((nbr = rn->info) != NULL)
  ------------------
  |  Branch (3132:9): [True: 0, False: 0]
  ------------------
 3133|      0|					if (nbr->state == NSM_Exchange
  ------------------
  |  |   21|      0|#define NSM_Exchange		7
  ------------------
  |  Branch (3133:10): [True: 0, False: 0]
  ------------------
 3134|      0|					    || nbr->state == NSM_Loading) {
  ------------------
  |  |   22|      0|#define NSM_Loading		8
  ------------------
  |  Branch (3134:13): [True: 0, False: 0]
  ------------------
 3135|      0|						route_unlock_node(rn);
 3136|      0|						return 0;
 3137|      0|					}
 3138|    663|	}
 3139|       |
 3140|    663|	return 1;
 3141|    663|}
ospf_lsa_maxage:
 3297|    147|{
 3298|    147|	struct prefix lsa_prefix;
 3299|    147|	struct route_node *rn;
 3300|       |
 3301|       |	/* When we saw a MaxAge LSA flooded to us, we put it on the list
 3302|       |	   and schedule the MaxAge LSA remover. */
 3303|    147|	if (CHECK_FLAG(lsa->flags, OSPF_LSA_IN_MAXAGE)) {
  ------------------
  |  |  394|    147|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 2, False: 145]
  |  |  ------------------
  ------------------
 3304|      2|		if (IS_DEBUG_OSPF(lsa, LSA_FLOODING))
  ------------------
  |  |   91|      2|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   33|      2|#define OSPF_DEBUG_LSA_FLOODING	0x02
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 3305|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 3306|      2|				"LSA[%s]: %p already exists on MaxAge LSA list",
 3307|      2|				dump_lsa_key(lsa), lsa);
 3308|      2|		return;
 3309|      2|	}
 3310|       |
 3311|    145|	memset(&lsa_prefix, 0, sizeof(lsa_prefix));
 3312|    145|	lsa_prefix.family = AF_UNSPEC;
 3313|    145|	lsa_prefix.prefixlen = sizeof(lsa_prefix.u.ptr) * CHAR_BIT;
 3314|    145|	lsa_prefix.u.ptr = (uintptr_t)lsa;
 3315|       |
 3316|    145|	rn = route_node_get(ospf->maxage_lsa, &lsa_prefix);
 3317|    145|	if (rn->info != NULL) {
  ------------------
  |  Branch (3317:6): [True: 0, False: 145]
  ------------------
 3318|      0|		if (IS_DEBUG_OSPF(lsa, LSA_FLOODING))
  ------------------
  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   33|      0|#define OSPF_DEBUG_LSA_FLOODING	0x02
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3319|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 3320|      0|				   "LSA[%s]: found LSA (%p) in table for LSA %p %d",
 3321|      0|				   dump_lsa_key(lsa), rn->info,
 3322|      0|				   (void *)lsa, lsa_prefix.prefixlen);
 3323|      0|		route_unlock_node(rn);
 3324|    145|	} else {
 3325|    145|		rn->info = ospf_lsa_lock(lsa);
 3326|    145|		SET_FLAG(lsa->flags, OSPF_LSA_IN_MAXAGE);
  ------------------
  |  |  395|    145|#define SET_FLAG(V,F)        (V) |= (F)
  ------------------
 3327|    145|	}
 3328|       |
 3329|    145|	if (IS_DEBUG_OSPF(lsa, LSA_FLOODING))
  ------------------
  |  |   91|    145|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   33|    145|#define OSPF_DEBUG_LSA_FLOODING	0x02
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 145]
  |  |  ------------------
  ------------------
 3330|      0|		zlog_debug("LSA[%s]: MaxAge LSA remover scheduled.",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 3331|    145|			   dump_lsa_key(lsa));
 3332|       |
 3333|    145|	OSPF_TIMER_ON(ospf->t_maxage, ospf_maxage_lsa_remover,
  ------------------
  |  |  692|    145|#define OSPF_TIMER_ON(T, F, V) event_add_timer(master, (F), ospf, (V), &(T))
  |  |  ------------------
  |  |  |  |  216|    145|#define event_add_timer(m, f, a, v, t) 0
  |  |  ------------------
  ------------------
 3334|    145|		      ospf->maxage_delay);
 3335|    145|}
ospf_lsa_lookup:
 3463|  41.1k|{
 3464|  41.1k|	if (!ospf)
  ------------------
  |  Branch (3464:6): [True: 0, False: 41.1k]
  ------------------
 3465|      0|		return NULL;
 3466|       |
 3467|  41.1k|	switch (type) {
 3468|  5.10k|	case OSPF_ROUTER_LSA:
  ------------------
  |  |   24|  5.10k|#define OSPF_ROUTER_LSA               1
  ------------------
  |  Branch (3468:2): [True: 5.10k, False: 36.0k]
  ------------------
 3469|  19.3k|	case OSPF_NETWORK_LSA:
  ------------------
  |  |   25|  19.3k|#define OSPF_NETWORK_LSA              2
  ------------------
  |  Branch (3469:2): [True: 14.2k, False: 26.9k]
  ------------------
 3470|  25.2k|	case OSPF_SUMMARY_LSA:
  ------------------
  |  |   26|  25.2k|#define OSPF_SUMMARY_LSA              3
  ------------------
  |  Branch (3470:2): [True: 5.85k, False: 35.3k]
  ------------------
 3471|  29.6k|	case OSPF_ASBR_SUMMARY_LSA:
  ------------------
  |  |   27|  29.6k|#define OSPF_ASBR_SUMMARY_LSA         4
  ------------------
  |  Branch (3471:2): [True: 4.47k, False: 36.7k]
  ------------------
 3472|  31.2k|	case OSPF_AS_NSSA_LSA:
  ------------------
  |  |   30|  31.2k|#define OSPF_AS_NSSA_LSA	              7
  ------------------
  |  Branch (3472:2): [True: 1.59k, False: 39.5k]
  ------------------
 3473|  33.3k|	case OSPF_OPAQUE_LINK_LSA:
  ------------------
  |  |   32|  33.3k|#define OSPF_OPAQUE_LINK_LSA	      9
  ------------------
  |  Branch (3473:2): [True: 2.11k, False: 39.0k]
  ------------------
 3474|  37.0k|	case OSPF_OPAQUE_AREA_LSA:
  ------------------
  |  |   33|  37.0k|#define OSPF_OPAQUE_AREA_LSA	     10
  ------------------
  |  Branch (3474:2): [True: 3.70k, False: 37.4k]
  ------------------
 3475|  37.0k|		return ospf_lsdb_lookup_by_id(area->lsdb, type, id, adv_router);
 3476|  1.83k|	case OSPF_AS_EXTERNAL_LSA:
  ------------------
  |  |   28|  1.83k|#define OSPF_AS_EXTERNAL_LSA          5
  ------------------
  |  Branch (3476:2): [True: 1.83k, False: 39.3k]
  ------------------
 3477|  3.18k|	case OSPF_OPAQUE_AS_LSA:
  ------------------
  |  |   34|  3.18k|#define OSPF_OPAQUE_AS_LSA	     11
  ------------------
  |  Branch (3477:2): [True: 1.35k, False: 39.8k]
  ------------------
 3478|  3.18k|		return ospf_lsdb_lookup_by_id(ospf->lsdb, type, id, adv_router);
 3479|    912|	default:
  ------------------
  |  Branch (3479:2): [True: 912, False: 40.2k]
  ------------------
 3480|    912|		break;
 3481|  41.1k|	}
 3482|       |
 3483|    912|	return NULL;
 3484|  41.1k|}
ospf_lsa_lookup_by_header:
 3525|  27.0k|{
 3526|  27.0k|	struct ospf_lsa *match;
 3527|       |
 3528|       |	/*
 3529|       |	 * Strictly speaking, the LSA-ID field for Opaque-LSAs (type-9/10/11)
 3530|       |	 * is redefined to have two subfields; opaque-type and opaque-id.
 3531|       |	 * However, it is harmless to treat the two sub fields together, as if
 3532|       |	 * they two were forming a unique LSA-ID.
 3533|       |	 */
 3534|       |
 3535|  27.0k|	match = ospf_lsa_lookup(area->ospf, area, lsah->type, lsah->id,
 3536|  27.0k|				lsah->adv_router);
 3537|       |
 3538|  27.0k|	if (match == NULL)
  ------------------
  |  Branch (3538:6): [True: 11.4k, False: 15.5k]
  ------------------
 3539|  11.4k|		if (IS_DEBUG_OSPF(lsa, LSA) == OSPF_DEBUG_LSA)
  ------------------
  |  |   91|  11.4k|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   36|  11.4k|#define OSPF_DEBUG_LSA		0x0F
  |  |  ------------------
  ------------------
              		if (IS_DEBUG_OSPF(lsa, LSA) == OSPF_DEBUG_LSA)
  ------------------
  |  |   36|  11.4k|#define OSPF_DEBUG_LSA		0x0F
  ------------------
  |  Branch (3539:7): [True: 0, False: 11.4k]
  ------------------
 3540|      0|			zlog_debug("LSA[Type%d:%pI4]: Lookup by header, NO MATCH",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 3541|  27.0k|				   lsah->type, &lsah->id);
 3542|       |
 3543|  27.0k|	return match;
 3544|  27.0k|}
ospf_lsa_more_recent:
 3550|  23.3k|{
 3551|  23.3k|	int r;
 3552|  23.3k|	int x, y;
 3553|       |
 3554|  23.3k|	if (l1 == NULL && l2 == NULL)
  ------------------
  |  Branch (3554:6): [True: 8.49k, False: 14.8k]
  |  Branch (3554:20): [True: 0, False: 8.49k]
  ------------------
 3555|      0|		return 0;
 3556|  23.3k|	if (l1 == NULL)
  ------------------
  |  Branch (3556:6): [True: 8.49k, False: 14.8k]
  ------------------
 3557|  8.49k|		return -1;
 3558|  14.8k|	if (l2 == NULL)
  ------------------
  |  Branch (3558:6): [True: 0, False: 14.8k]
  ------------------
 3559|      0|		return 1;
 3560|       |
 3561|       |	/* compare LS sequence number. */
 3562|  14.8k|	x = (int)ntohl(l1->data->ls_seqnum);
 3563|  14.8k|	y = (int)ntohl(l2->data->ls_seqnum);
 3564|  14.8k|	if (x > y)
  ------------------
  |  Branch (3564:6): [True: 1.53k, False: 13.3k]
  ------------------
 3565|  1.53k|		return 1;
 3566|  13.3k|	if (x < y)
  ------------------
  |  Branch (3566:6): [True: 2.03k, False: 11.3k]
  ------------------
 3567|  2.03k|		return -1;
 3568|       |
 3569|       |	/* compare LS checksum. */
 3570|  11.3k|	r = ntohs(l1->data->checksum) - ntohs(l2->data->checksum);
 3571|  11.3k|	if (r)
  ------------------
  |  Branch (3571:6): [True: 943, False: 10.3k]
  ------------------
 3572|    943|		return r;
 3573|       |
 3574|       |	/* compare LS age. */
 3575|  10.3k|	if (IS_LSA_MAXAGE(l1) && !IS_LSA_MAXAGE(l2))
  ------------------
  |  |  211|  20.7k|#define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |  209|  10.3k|#define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|  10.3k|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |               #define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|      0|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (209:20): [True: 0, False: 10.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |   33|  10.3k|#define OSPF_LSA_MAXAGE                       3600
  |  |  ------------------
  |  |  |  Branch (211:33): [True: 309, False: 10.0k]
  |  |  ------------------
  ------------------
              	if (IS_LSA_MAXAGE(l1) && !IS_LSA_MAXAGE(l2))
  ------------------
  |  |  211|    309|#define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |  209|    309|#define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    309|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |               #define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|      0|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (209:20): [True: 0, False: 309]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |   33|    309|#define OSPF_LSA_MAXAGE                       3600
  |  |  ------------------
  ------------------
  |  Branch (3575:27): [True: 294, False: 15]
  ------------------
 3576|    294|		return 1;
 3577|  10.0k|	else if (!IS_LSA_MAXAGE(l1) && IS_LSA_MAXAGE(l2))
  ------------------
  |  |  211|  20.1k|#define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |  209|  10.0k|#define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|  10.0k|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |               #define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|      0|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (209:20): [True: 0, False: 10.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |   33|  10.0k|#define OSPF_LSA_MAXAGE                       3600
  |  |  ------------------
  ------------------
              	else if (!IS_LSA_MAXAGE(l1) && IS_LSA_MAXAGE(l2))
  ------------------
  |  |  211|  10.0k|#define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |  209|  10.0k|#define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|  10.0k|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |               #define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    250|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (209:20): [True: 250, False: 9.81k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |   33|  10.0k|#define OSPF_LSA_MAXAGE                       3600
  |  |  ------------------
  |  |  |  Branch (211:33): [True: 6.10k, False: 3.95k]
  |  |  ------------------
  ------------------
  |  Branch (3577:11): [True: 10.0k, False: 15]
  ------------------
 3578|  6.10k|		return -1;
 3579|       |
 3580|       |	/* compare LS age with MaxAgeDiff. */
 3581|  3.96k|	if (LS_AGE(l1) - LS_AGE(l2) > OSPF_LSA_MAXAGE_DIFF)
  ------------------
  |  |  209|  3.96k|#define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  ------------------
  |  |  |  |   33|  3.96k|#define OSPF_LSA_MAXAGE                       3600
  |  |  ------------------
  |  |               #define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  ------------------
  |  |  |  |   33|      0|#define OSPF_LSA_MAXAGE                       3600
  |  |  ------------------
  |  |  |  Branch (209:20): [True: 0, False: 3.96k]
  |  |  ------------------
  ------------------
              	if (LS_AGE(l1) - LS_AGE(l2) > OSPF_LSA_MAXAGE_DIFF)
  ------------------
  |  |  209|  3.96k|#define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  ------------------
  |  |  |  |   33|  3.96k|#define OSPF_LSA_MAXAGE                       3600
  |  |  ------------------
  |  |               #define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  ------------------
  |  |  |  |   33|      0|#define OSPF_LSA_MAXAGE                       3600
  |  |  ------------------
  |  |  |  Branch (209:20): [True: 0, False: 3.96k]
  |  |  ------------------
  ------------------
              	if (LS_AGE(l1) - LS_AGE(l2) > OSPF_LSA_MAXAGE_DIFF)
  ------------------
  |  |   35|  3.96k|#define OSPF_LSA_MAXAGE_DIFF                   900
  ------------------
  |  Branch (3581:6): [True: 828, False: 3.14k]
  ------------------
 3582|    828|		return -1;
 3583|  3.14k|	else if (LS_AGE(l2) - LS_AGE(l1) > OSPF_LSA_MAXAGE_DIFF)
  ------------------
  |  |  209|  3.14k|#define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  ------------------
  |  |  |  |   33|  3.14k|#define OSPF_LSA_MAXAGE                       3600
  |  |  ------------------
  |  |               #define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  ------------------
  |  |  |  |   33|      0|#define OSPF_LSA_MAXAGE                       3600
  |  |  ------------------
  |  |  |  Branch (209:20): [True: 0, False: 3.14k]
  |  |  ------------------
  ------------------
              	else if (LS_AGE(l2) - LS_AGE(l1) > OSPF_LSA_MAXAGE_DIFF)
  ------------------
  |  |  209|  3.14k|#define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  ------------------
  |  |  |  |   33|  3.14k|#define OSPF_LSA_MAXAGE                       3600
  |  |  ------------------
  |  |               #define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  ------------------
  |  |  |  |   33|      0|#define OSPF_LSA_MAXAGE                       3600
  |  |  ------------------
  |  |  |  Branch (209:20): [True: 0, False: 3.14k]
  |  |  ------------------
  ------------------
              	else if (LS_AGE(l2) - LS_AGE(l1) > OSPF_LSA_MAXAGE_DIFF)
  ------------------
  |  |   35|  3.14k|#define OSPF_LSA_MAXAGE_DIFF                   900
  ------------------
  |  Branch (3583:11): [True: 819, False: 2.32k]
  ------------------
 3584|    819|		return 1;
 3585|       |
 3586|       |	/* LSAs are identical. */
 3587|  2.32k|	return 0;
 3588|  3.96k|}
ospf_lsa_is_self_originated:
 3807|  3.43k|{
 3808|  3.43k|	struct listnode *node;
 3809|  3.43k|	struct ospf_interface *oi;
 3810|       |
 3811|       |	/* This LSA is already checked. */
 3812|  3.43k|	if (CHECK_FLAG(lsa->flags, OSPF_LSA_SELF_CHECKED))
  ------------------
  |  |  394|  3.43k|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 1.16k, False: 2.26k]
  |  |  ------------------
  ------------------
 3813|  1.16k|		return IS_LSA_SELF(lsa);
  ------------------
  |  |  210|  1.16k|#define IS_LSA_SELF(L)          (CHECK_FLAG ((L)->flags, OSPF_LSA_SELF))
  |  |  ------------------
  |  |  |  |  394|  1.16k|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  ------------------
 3814|       |
 3815|       |	/* Make sure LSA is self-checked. */
 3816|  2.26k|	SET_FLAG(lsa->flags, OSPF_LSA_SELF_CHECKED);
  ------------------
  |  |  395|  2.26k|#define SET_FLAG(V,F)        (V) |= (F)
  ------------------
 3817|       |
 3818|       |	/* AdvRouter and Router ID is the same. */
 3819|  2.26k|	if (IPV4_ADDR_SAME(&lsa->data->adv_router, &ospf->router_id))
  ------------------
  |  |  342|  2.26k|#define IPV4_ADDR_SAME(A,B)  ipv4_addr_same((A), (B))
  |  |  ------------------
  |  |  |  Branch (342:30): [True: 167, False: 2.10k]
  |  |  ------------------
  ------------------
 3820|    167|		SET_FLAG(lsa->flags, OSPF_LSA_SELF);
  ------------------
  |  |  395|    167|#define SET_FLAG(V,F)        (V) |= (F)
  ------------------
 3821|       |
 3822|       |	/* LSA is router-LSA. */
 3823|  2.10k|	else if (lsa->data->type == OSPF_ROUTER_LSA
  ------------------
  |  |   24|  4.20k|#define OSPF_ROUTER_LSA               1
  ------------------
  |  Branch (3823:11): [True: 151, False: 1.95k]
  ------------------
 3824|    151|		 && IPV4_ADDR_SAME(&lsa->data->id, &ospf->router_id))
  ------------------
  |  |  342|    151|#define IPV4_ADDR_SAME(A,B)  ipv4_addr_same((A), (B))
  |  |  ------------------
  |  |  |  Branch (342:30): [True: 0, False: 151]
  |  |  ------------------
  ------------------
 3825|      0|		SET_FLAG(lsa->flags, OSPF_LSA_SELF);
  ------------------
  |  |  395|      0|#define SET_FLAG(V,F)        (V) |= (F)
  ------------------
 3826|       |
 3827|       |	/* LSA is network-LSA.  Compare Link ID with all interfaces. */
 3828|  2.10k|	else if (lsa->data->type == OSPF_NETWORK_LSA)
  ------------------
  |  |   25|  2.10k|#define OSPF_NETWORK_LSA              2
  ------------------
  |  Branch (3828:11): [True: 355, False: 1.74k]
  ------------------
 3829|    355|		for (ALL_LIST_ELEMENTS_RO(ospf->oiflist, node, oi)) {
  ------------------
  |  |  333|    355|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|    355|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 355, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|    710|	(node) != NULL && ((data) = static_cast(data, listgetdata(node)), 1);  \
  |  |  ------------------
  |  |  |  |  204|  2.13k|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 355, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 355]
  |  |  |  |  |  Branch (204:28): [True: 355, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 355]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (334:2): [True: 355, False: 248]
  |  |  |  Branch (334:20): [True: 355, False: 0]
  |  |  ------------------
  |  |  335|    355|	(node) = listnextnode(node), ((data) = NULL)
  |  |  ------------------
  |  |  |  |   49|    248|#define listnextnode(X) ((X) ? ((X)->next) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:26): [True: 248, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3830|       |			/* Ignore virtual link. */
 3831|    355|			if (oi->type != OSPF_IFTYPE_VIRTUALLINK)
  ------------------
  |  |   48|    355|#define OSPF_IFTYPE_VIRTUALLINK		5
  ------------------
  |  Branch (3831:8): [True: 355, False: 0]
  ------------------
 3832|    355|				if (oi->address->family == AF_INET)
  ------------------
  |  Branch (3832:9): [True: 355, False: 0]
  ------------------
 3833|    355|					if (IPV4_ADDR_SAME(
  ------------------
  |  |  342|    355|#define IPV4_ADDR_SAME(A,B)  ipv4_addr_same((A), (B))
  |  |  ------------------
  |  |  |  Branch (342:30): [True: 107, False: 248]
  |  |  ------------------
  ------------------
 3834|    355|						    &lsa->data->id,
 3835|    355|						    &oi->address->u.prefix4)) {
 3836|       |						/* to make it easier later */
 3837|    107|						SET_FLAG(lsa->flags,
  ------------------
  |  |  395|    107|#define SET_FLAG(V,F)        (V) |= (F)
  ------------------
 3838|    107|							 OSPF_LSA_SELF);
 3839|    107|						return IS_LSA_SELF(lsa);
  ------------------
  |  |  210|    107|#define IS_LSA_SELF(L)          (CHECK_FLAG ((L)->flags, OSPF_LSA_SELF))
  |  |  ------------------
  |  |  |  |  394|    107|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  ------------------
 3840|    107|					}
 3841|    355|		}
 3842|       |
 3843|  2.16k|	return IS_LSA_SELF(lsa);
  ------------------
  |  |  210|  2.16k|#define IS_LSA_SELF(L)          (CHECK_FLAG ((L)->flags, OSPF_LSA_SELF))
  |  |  ------------------
  |  |  |  |  394|  2.16k|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  ------------------
 3844|  2.26k|}
ospf_schedule_lsa_flush_area:
 3979|    108|{
 3980|    108|	struct lsa_action *data;
 3981|       |
 3982|    108|	data = XCALLOC(MTYPE_OSPF_MESSAGE, sizeof(struct lsa_action));
  ------------------
  |  |  165|    108|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
 3983|    108|	data->action = LSA_ACTION_FLUSH_AREA;
  ------------------
  |  | 3932|    108|#define LSA_ACTION_FLUSH_AREA 2
  ------------------
 3984|    108|	data->area = area;
 3985|    108|	data->lsa = ospf_lsa_lock(lsa); /* Message / Flush area */
 3986|       |
 3987|    108|	event_add_event(master, ospf_lsa_action, data, 0, NULL);
  ------------------
  |  |  219|    108|#define event_add_event(m, f, a, v, t) 0
  ------------------
 3988|    108|#ifdef FUZZING
 3989|       |	XFREE(MTYPE_OSPF_MESSAGE, data);
  ------------------
  |  |  170|    108|	do {                                                                   \
  |  |  171|    108|		qfree(mtype, ptr);                                             \
  |  |  172|    108|		ptr = NULL;                                                    \
  |  |  173|    108|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 108]
  |  |  ------------------
  ------------------
 3990|    108|#endif
 3991|    108|}
ospf_refresher_register_lsa:
 4070|    135|{
 4071|    135|	uint16_t index, current_index;
 4072|       |
 4073|    135|	assert(lsa->lock > 0);
  ------------------
  |  |   51|    135|	({                                                                     \
  |  |   52|    135|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|    135|			(used)) = {                                            \
  |  |   54|    135|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|    135|	{                                                                      \
  |  |  |  |  284|    135|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|    135|		/* .type = */ (type_),                                         \
  |  |  |  |  286|    135|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|    135|		/* .func = */ func_,                                           \
  |  |  |  |  289|    135|	}                                                                      \
  |  |  ------------------
  |  |   55|    135|			.expr = #expr_,                                        \
  |  |   56|    135|		};                                                             \
  |  |   57|    135|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|    135|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|    135|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|    135|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|    135|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 135]
  |  |  |  Branch (58:24): [True: 135, False: 0]
  |  |  ------------------
  |  |   59|    135|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|    135|	})
  ------------------
 4074|    135|	assert(IS_LSA_SELF(lsa));
  ------------------
  |  |   51|    135|	({                                                                     \
  |  |   52|    135|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|    135|			(used)) = {                                            \
  |  |   54|    135|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|    135|	{                                                                      \
  |  |  |  |  284|    135|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|    135|		/* .type = */ (type_),                                         \
  |  |  |  |  286|    135|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|    135|		/* .func = */ func_,                                           \
  |  |  |  |  289|    135|	}                                                                      \
  |  |  ------------------
  |  |   55|    135|			.expr = #expr_,                                        \
  |  |   56|    135|		};                                                             \
  |  |   57|    135|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|    135|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|    135|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|    135|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|    135|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 135]
  |  |  |  Branch (58:24): [True: 135, False: 0]
  |  |  ------------------
  |  |   59|    135|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|    135|	})
  ------------------
 4075|       |
 4076|    135|	if (lsa->refresh_list < 0) {
  ------------------
  |  Branch (4076:6): [True: 135, False: 0]
  ------------------
 4077|    135|		int delay;
 4078|    135|		int min_delay =
 4079|    135|			ospf->lsa_refresh_timer - (2 * OSPF_LS_REFRESH_JITTER);
  ------------------
  |  |   68|    135|#define OSPF_LS_REFRESH_JITTER      60
  ------------------
 4080|    135|		int max_delay =
 4081|    135|			ospf->lsa_refresh_timer - OSPF_LS_REFRESH_JITTER;
  ------------------
  |  |   68|    135|#define OSPF_LS_REFRESH_JITTER      60
  ------------------
 4082|       |
 4083|       |		/* We want to refresh the LSA within OSPF_LS_REFRESH_TIME which
 4084|       |		 * is
 4085|       |		 * 1800s. Use jitter so that we send the LSA sometime between
 4086|       |		 * 1680s
 4087|       |		 * and 1740s.
 4088|       |		 */
 4089|    135|		delay = (frr_weak_random() % (max_delay - min_delay))
 4090|    135|			+ min_delay;
 4091|       |
 4092|    135|		current_index = ospf->lsa_refresh_queue.index
 4093|    135|				+ (monotime(NULL) - ospf->lsa_refresher_started)
 4094|    135|					  / OSPF_LSA_REFRESHER_GRANULARITY;
  ------------------
  |  |  326|    135|#define OSPF_LSA_REFRESHER_GRANULARITY 10
  ------------------
 4095|       |
 4096|    135|		index = (current_index + delay / OSPF_LSA_REFRESHER_GRANULARITY)
  ------------------
  |  |  326|    135|#define OSPF_LSA_REFRESHER_GRANULARITY 10
  ------------------
 4097|    135|			% (OSPF_LSA_REFRESHER_SLOTS);
  ------------------
  |  |  328|    135|	((OSPF_LS_REFRESH_TIME + OSPF_LS_REFRESH_SHIFT)                        \
  |  |  ------------------
  |  |  |  |   28|    135|#define OSPF_LS_REFRESH_TIME                  1800
  |  |  ------------------
  |  |               	((OSPF_LS_REFRESH_TIME + OSPF_LS_REFRESH_SHIFT)                        \
  |  |  ------------------
  |  |  |  |   67|    135|#define OSPF_LS_REFRESH_SHIFT       (60 * 15)
  |  |  ------------------
  |  |  329|    135|		 / OSPF_LSA_REFRESHER_GRANULARITY                              \
  |  |  ------------------
  |  |  |  |  326|    135|#define OSPF_LSA_REFRESHER_GRANULARITY 10
  |  |  ------------------
  |  |  330|    135|	 + 1)
  ------------------
 4098|       |
 4099|    135|		if (IS_DEBUG_OSPF(lsa, LSA_REFRESH))
  ------------------
  |  |   91|    135|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   35|    135|#define OSPF_DEBUG_LSA_REFRESH  0x08
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 135]
  |  |  ------------------
  ------------------
 4100|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 4101|    135|				"LSA[Refresh:Type%d:%pI4]: age %d, added to index %d",
 4102|    135|				lsa->data->type, &lsa->data->id,
 4103|    135|				LS_AGE(lsa), index);
 4104|       |
 4105|    135|		if (!ospf->lsa_refresh_queue.qs[index])
  ------------------
  |  Branch (4105:7): [True: 6, False: 129]
  ------------------
 4106|      6|			ospf->lsa_refresh_queue.qs[index] = list_new();
 4107|       |
 4108|    135|		listnode_add(ospf->lsa_refresh_queue.qs[index],
 4109|    135|			     ospf_lsa_lock(lsa)); /* lsa_refresh_queue */
 4110|    135|		lsa->refresh_list = index;
 4111|       |
 4112|    135|		if (IS_DEBUG_OSPF(lsa, LSA_REFRESH))
  ------------------
  |  |   91|    135|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   35|    135|#define OSPF_DEBUG_LSA_REFRESH  0x08
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 135]
  |  |  ------------------
  ------------------
 4113|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 4114|    135|				"LSA[Refresh:Type%d:%pI4]: %s: setting refresh_list on lsa %p (slot %d)",
 4115|    135|				lsa->data->type, &lsa->data->id, __func__,
 4116|    135|				(void *)lsa, index);
 4117|    135|	}
 4118|    135|}
ospf_lsa.c:router_lsa_link_set:
  680|      1|{
  681|      1|	struct listnode *node;
  682|      1|	struct ospf_interface *oi;
  683|      1|	int links = 0;
  684|       |
  685|      1|	for (ALL_LIST_ELEMENTS_RO(area->oiflist, node, oi)) {
  ------------------
  |  |  333|      1|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|      1|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|      2|	(node) != NULL && ((data) = static_cast(data, listgetdata(node)), 1);  \
  |  |  ------------------
  |  |  |  |  204|      6|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 1, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 1]
  |  |  |  |  |  Branch (204:28): [True: 1, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (334:2): [True: 1, False: 1]
  |  |  |  Branch (334:20): [True: 1, False: 0]
  |  |  ------------------
  |  |  335|      1|	(node) = listnextnode(node), ((data) = NULL)
  |  |  ------------------
  |  |  |  |   49|      1|#define listnextnode(X) ((X) ? ((X)->next) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:26): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  686|      1|		struct interface *ifp = oi->ifp;
  687|       |
  688|       |		/* Check interface is up, OSPF is enable. */
  689|      1|		if (if_is_operative(ifp)) {
  ------------------
  |  Branch (689:7): [True: 0, False: 1]
  ------------------
  690|      0|			if (oi->state != ISM_Down) {
  ------------------
  |  |   15|      0|#define ISM_Down                          1
  ------------------
  |  Branch (690:8): [True: 0, False: 0]
  ------------------
  691|      0|				oi->lsa_pos_beg = links;
  692|       |				/* Describe each link. */
  693|      0|				switch (oi->type) {
  ------------------
  |  Branch (693:13): [True: 0, False: 0]
  ------------------
  694|      0|				case OSPF_IFTYPE_POINTOPOINT:
  ------------------
  |  |   44|      0|#define OSPF_IFTYPE_POINTOPOINT		1
  ------------------
  |  Branch (694:5): [True: 0, False: 0]
  ------------------
  695|      0|					links += lsa_link_ptop_set(s, oi);
  696|      0|					break;
  697|      0|				case OSPF_IFTYPE_BROADCAST:
  ------------------
  |  |   45|      0|#define OSPF_IFTYPE_BROADCAST		2
  ------------------
  |  Branch (697:5): [True: 0, False: 0]
  ------------------
  698|      0|					links += lsa_link_broadcast_set(s, oi);
  699|      0|					break;
  700|      0|				case OSPF_IFTYPE_NBMA:
  ------------------
  |  |   46|      0|#define OSPF_IFTYPE_NBMA		3
  ------------------
  |  Branch (700:5): [True: 0, False: 0]
  ------------------
  701|      0|					links += lsa_link_nbma_set(s, oi);
  ------------------
  |  |  634|      0|#define lsa_link_nbma_set(S,O)  lsa_link_broadcast_set (S, O)
  ------------------
  702|      0|					break;
  703|      0|				case OSPF_IFTYPE_POINTOMULTIPOINT:
  ------------------
  |  |   47|      0|#define OSPF_IFTYPE_POINTOMULTIPOINT	4
  ------------------
  |  Branch (703:5): [True: 0, False: 0]
  ------------------
  704|      0|					links += lsa_link_ptomp_set(s, oi);
  705|      0|					break;
  706|      0|				case OSPF_IFTYPE_VIRTUALLINK:
  ------------------
  |  |   48|      0|#define OSPF_IFTYPE_VIRTUALLINK		5
  ------------------
  |  Branch (706:5): [True: 0, False: 0]
  ------------------
  707|      0|					links +=
  708|      0|						lsa_link_virtuallink_set(s, oi);
  709|      0|					break;
  710|      0|				case OSPF_IFTYPE_LOOPBACK:
  ------------------
  |  |   49|      0|#define OSPF_IFTYPE_LOOPBACK            6
  ------------------
  |  Branch (710:5): [True: 0, False: 0]
  ------------------
  711|      0|					links += lsa_link_loopback_set(s, oi);
  712|      0|				}
  713|      0|				oi->lsa_pos_end = links;
  714|      0|			}
  715|      0|		}
  716|      1|	}
  717|       |
  718|      1|	return links;
  719|      1|}
ospf_lsa.c:ospf_router_lsa_originate:
  849|      1|{
  850|      1|	struct ospf_lsa *new;
  851|       |
  852|      1|	if (area->ospf->gr_info.restart_in_progress) {
  ------------------
  |  Branch (852:6): [True: 0, False: 1]
  ------------------
  853|      0|		if (IS_DEBUG_OSPF(lsa, LSA_GENERATE))
  ------------------
  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   32|      0|#define OSPF_DEBUG_LSA_GENERATE 0x01
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  854|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  855|      0|				"LSA[Type%d]: Graceful Restart in progress, don't originate",
  856|      0|				OSPF_ROUTER_LSA);
  857|      0|		return NULL;
  858|      0|	}
  859|       |
  860|       |	/* Create new router-LSA instance. */
  861|      1|	if ((new = ospf_router_lsa_new(area)) == NULL) {
  ------------------
  |  Branch (861:6): [True: 0, False: 1]
  ------------------
  862|      0|		zlog_err("%s: ospf_router_lsa_new returned NULL", __func__);
  ------------------
  |  |  130|      0|#define zlog_err(...) 0
  ------------------
  863|      0|		return NULL;
  864|      0|	}
  865|       |
  866|       |	/* Sanity check. */
  867|      1|	if (new->data->adv_router.s_addr == INADDR_ANY) {
  ------------------
  |  Branch (867:6): [True: 1, False: 0]
  ------------------
  868|      1|		if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|      1|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|      1|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|      1|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  869|      0|			zlog_debug("LSA[Type1]: AdvRouter is 0, discard");
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  870|      1|		ospf_lsa_discard(new);
  871|      1|		return NULL;
  872|      1|	}
  873|       |
  874|       |	/* Install LSA to LSDB. */
  875|      0|	new = ospf_lsa_install(area->ospf, NULL, new);
  876|       |
  877|       |	/* Update LSA origination count. */
  878|      0|	area->ospf->lsa_originate_count++;
  879|       |
  880|       |	/* Flooding new LSA through area. */
  881|      0|	ospf_flood_through_area(area, NULL, new);
  882|       |
  883|      0|	if (IS_DEBUG_OSPF(lsa, LSA_GENERATE)) {
  ------------------
  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   32|      0|#define OSPF_DEBUG_LSA_GENERATE 0x01
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  884|      0|		zlog_debug("LSA[Type%d:%pI4]: Originate router-LSA %p",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  885|      0|			   new->data->type, &new->data->id,
  886|      0|			   (void *)new);
  887|      0|		ospf_lsa_header_dump(new->data);
  888|      0|	}
  889|       |
  890|      0|	return new;
  891|      1|}
ospf_lsa.c:ospf_router_lsa_new:
  804|      1|{
  805|      1|	struct ospf *ospf = area->ospf;
  806|      1|	struct stream *s;
  807|      1|	struct lsa_header *lsah;
  808|      1|	struct ospf_lsa *new;
  809|      1|	int length;
  810|       |
  811|      1|	if (IS_DEBUG_OSPF(lsa, LSA_GENERATE))
  ------------------
  |  |   91|      1|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   32|      1|#define OSPF_DEBUG_LSA_GENERATE 0x01
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  812|      0|		zlog_debug("LSA[Type1]: Create router-LSA instance");
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  813|       |
  814|       |	/* check whether stub-router is desired, and if this is the first
  815|       |	 * router LSA.
  816|       |	 */
  817|      1|	ospf_stub_router_check(area);
  818|       |
  819|       |	/* Create a stream for LSA. */
  820|      1|	s = stream_new(OSPF_MAX_LSA_SIZE);
  ------------------
  |  |   39|      1|#define OSPF_MAX_LSA_SIZE	   1500U
  ------------------
  821|       |	/* Set LSA common header fields. */
  822|      1|	lsa_header_set(s, LSA_OPTIONS_GET(area) | LSA_OPTIONS_NSSA_GET(area),
  ------------------
  |  |  688|      1|	(((area)->external_routing == OSPF_AREA_DEFAULT) ? OSPF_OPTION_E : 0)
  |  |  ------------------
  |  |  |  |   76|      1|#define OSPF_AREA_DEFAULT       0
  |  |  ------------------
  |  |               	(((area)->external_routing == OSPF_AREA_DEFAULT) ? OSPF_OPTION_E : 0)
  |  |  ------------------
  |  |  |  |   53|      1|#define OSPF_OPTION_E                    0x02
  |  |  ------------------
  |  |  |  Branch (688:3): [True: 1, False: 0]
  |  |  ------------------
  ------------------
              	lsa_header_set(s, LSA_OPTIONS_GET(area) | LSA_OPTIONS_NSSA_GET(area),
  ------------------
  |  |  690|      1|	(((area)->external_routing == OSPF_AREA_NSSA) ? OSPF_OPTION_NP : 0)
  |  |  ------------------
  |  |  |  |   78|      1|#define OSPF_AREA_NSSA          2
  |  |  ------------------
  |  |               	(((area)->external_routing == OSPF_AREA_NSSA) ? OSPF_OPTION_NP : 0)
  |  |  ------------------
  |  |  |  |   55|      0|#define OSPF_OPTION_NP                   0x08
  |  |  ------------------
  |  |  |  Branch (690:3): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  823|      1|		       OSPF_ROUTER_LSA, ospf->router_id, ospf->router_id);
  ------------------
  |  |   24|      1|#define OSPF_ROUTER_LSA               1
  ------------------
  824|       |
  825|       |	/* Set router-LSA body fields. */
  826|      1|	ospf_router_lsa_body_set(&s, area);
  827|       |
  828|       |	/* Set length. */
  829|      1|	length = stream_get_endp(s);
  830|      1|	lsah = (struct lsa_header *)STREAM_DATA(s);
  ------------------
  |  |  126|      1|#define STREAM_DATA(S)  ((S)->data)
  ------------------
  831|      1|	lsah->length = htons(length);
  832|       |
  833|       |	/* Now, create OSPF LSA instance. */
  834|      1|	new = ospf_lsa_new_and_data(length);
  835|       |
  836|      1|	new->area = area;
  837|      1|	SET_FLAG(new->flags, OSPF_LSA_SELF | OSPF_LSA_SELF_CHECKED);
  ------------------
  |  |  395|      1|#define SET_FLAG(V,F)        (V) |= (F)
  ------------------
  838|      1|	new->vrf_id = area->ospf->vrf_id;
  839|       |
  840|       |	/* Copy LSA data to store, discard stream. */
  841|      1|	memcpy(new->data, lsah, length);
  842|      1|	stream_free(s);
  843|       |
  844|      1|	return new;
  845|      1|}
ospf_lsa.c:ospf_stub_router_check:
  766|      1|{
  767|       |	/* area must either be administratively configured to be stub
  768|       |	 * or startup-time stub-router must be configured and we must in a
  769|       |	 * pre-stub
  770|       |	 * state.
  771|       |	 */
  772|      1|	if (CHECK_FLAG(area->stub_router_state, OSPF_AREA_ADMIN_STUB_ROUTED)) {
  ------------------
  |  |  394|      1|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  773|      0|		SET_FLAG(area->stub_router_state, OSPF_AREA_IS_STUB_ROUTED);
  ------------------
  |  |  395|      0|#define SET_FLAG(V,F)        (V) |= (F)
  ------------------
  774|      0|		return;
  775|      0|	}
  776|       |
  777|       |	/* not admin-stubbed, check whether startup stubbing is configured and
  778|       |	 * whether it's not been done yet
  779|       |	 */
  780|      1|	if (CHECK_FLAG(area->stub_router_state,
  ------------------
  |  |  394|      1|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  781|      1|		       OSPF_AREA_WAS_START_STUB_ROUTED))
  782|      0|		return;
  783|       |
  784|      1|	if (area->ospf->stub_router_startup_time
  ------------------
  |  Branch (784:6): [True: 1, False: 0]
  ------------------
  785|      1|	    == OSPF_STUB_ROUTER_UNCONFIGURED) {
  ------------------
  |  |  204|      1|#define OSPF_STUB_ROUTER_UNCONFIGURED	  0
  ------------------
  786|       |		/* stub-router is hence done forever for this area, even if
  787|       |		 * someone
  788|       |		 * tries configure it (take effect next restart).
  789|       |		 */
  790|      1|		SET_FLAG(area->stub_router_state,
  ------------------
  |  |  395|      1|#define SET_FLAG(V,F)        (V) |= (F)
  ------------------
  791|      1|			 OSPF_AREA_WAS_START_STUB_ROUTED);
  792|      1|		return;
  793|      1|	}
  794|       |
  795|       |	/* startup stub-router configured and not yet done */
  796|      0|	SET_FLAG(area->stub_router_state, OSPF_AREA_IS_STUB_ROUTED);
  ------------------
  |  |  395|      0|#define SET_FLAG(V,F)        (V) |= (F)
  ------------------
  797|       |
  798|      0|	OSPF_AREA_TIMER_ON(area->t_stub_router, ospf_stub_router_timer,
  ------------------
  |  |  694|      0|	event_add_timer(master, (F), area, (V), &(T))
  |  |  ------------------
  |  |  |  |  216|      0|#define event_add_timer(m, f, a, v, t) 0
  |  |  ------------------
  ------------------
  799|      0|			   area->ospf->stub_router_startup_time);
  800|      0|}
ospf_lsa.c:ospf_router_lsa_install:
 2738|     38|{
 2739|     38|	struct ospf_area *area = new->area;
 2740|       |
 2741|       |	/* RFC 2328 Section 13.2 Router-LSAs and network-LSAs
 2742|       |	   The entire routing table must be recalculated, starting with
 2743|       |	   the shortest path calculations for each area (not just the
 2744|       |	   area whose link-state database has changed).
 2745|       |	*/
 2746|       |
 2747|     38|	if (IS_LSA_SELF(new)) {
  ------------------
  |  |  210|     38|#define IS_LSA_SELF(L)          (CHECK_FLAG ((L)->flags, OSPF_LSA_SELF))
  |  |  ------------------
  |  |  |  |  394|     38|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (210:33): [True: 1, False: 37]
  |  |  ------------------
  ------------------
 2748|       |
 2749|       |		/* Only install LSA if it is originated/refreshed by us.
 2750|       |		 * If LSA was received by flooding, the RECEIVED flag is set so
 2751|       |		 * do
 2752|       |		 * not link the LSA */
 2753|      1|		if (CHECK_FLAG(new->flags, OSPF_LSA_RECEIVED))
  ------------------
  |  |  394|      1|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 1, False: 0]
  |  |  ------------------
  ------------------
 2754|      1|			return new; /* ignore stale LSA */
 2755|       |
 2756|       |		/* Set self-originated router-LSA. */
 2757|      0|		ospf_lsa_unlock(&area->router_lsa_self);
 2758|      0|		area->router_lsa_self = ospf_lsa_lock(new);
 2759|       |
 2760|      0|		ospf_refresher_register_lsa(ospf, new);
 2761|      0|	}
 2762|     37|	if (rt_recalc)
  ------------------
  |  Branch (2762:6): [True: 37, False: 0]
  ------------------
 2763|     37|		ospf_spf_calculate_schedule(ospf, SPF_FLAG_ROUTER_LSA_INSTALL);
 2764|     37|	return new;
 2765|     38|}
ospf_lsa.c:ospf_network_lsa_install:
 2772|    346|{
 2773|       |
 2774|       |	/* RFC 2328 Section 13.2 Router-LSAs and network-LSAs
 2775|       |	   The entire routing table must be recalculated, starting with
 2776|       |	   the shortest path calculations for each area (not just the
 2777|       |	   area whose link-state database has changed).
 2778|       |	*/
 2779|    346|	if (IS_LSA_SELF(new)) {
  ------------------
  |  |  210|    346|#define IS_LSA_SELF(L)          (CHECK_FLAG ((L)->flags, OSPF_LSA_SELF))
  |  |  ------------------
  |  |  |  |  394|    346|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (210:33): [True: 137, False: 209]
  |  |  ------------------
  ------------------
 2780|       |		/* We supposed that when LSA is originated by us, we pass the
 2781|       |		   int
 2782|       |		   for which it was originated. If LSA was received by flooding,
 2783|       |		   the RECEIVED flag is set, so we do not link the LSA to the
 2784|       |		   int. */
 2785|    137|		if (CHECK_FLAG(new->flags, OSPF_LSA_RECEIVED))
  ------------------
  |  |  394|    137|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 137, False: 0]
  |  |  ------------------
  ------------------
 2786|    137|			return new; /* ignore stale LSA */
 2787|       |
 2788|      0|		ospf_lsa_unlock(&oi->network_lsa_self);
 2789|      0|		oi->network_lsa_self = ospf_lsa_lock(new);
 2790|      0|		ospf_refresher_register_lsa(ospf, new);
 2791|      0|	}
 2792|    209|	if (rt_recalc)
  ------------------
  |  Branch (2792:6): [True: 209, False: 0]
  ------------------
 2793|    209|		ospf_spf_calculate_schedule(ospf, SPF_FLAG_NETWORK_LSA_INSTALL);
 2794|       |
 2795|    209|	return new;
 2796|    346|}
ospf_lsa.c:ospf_summary_lsa_install:
 2801|     27|{
 2802|     27|	if (rt_recalc && !IS_LSA_SELF(new)) {
  ------------------
  |  |  210|     27|#define IS_LSA_SELF(L)          (CHECK_FLAG ((L)->flags, OSPF_LSA_SELF))
  |  |  ------------------
  |  |  |  |  394|     27|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  ------------------
  |  Branch (2802:6): [True: 27, False: 0]
  |  Branch (2802:19): [True: 17, False: 10]
  ------------------
 2803|       |/* RFC 2328 Section 13.2 Summary-LSAs
 2804|       |   The best route to the destination described by the summary-
 2805|       |   LSA must be recalculated (see Section 16.5).  If this
 2806|       |   destination is an AS boundary router, it may also be
 2807|       |   necessary to re-examine all the AS-external-LSAs.
 2808|       |*/
 2809|       |
 2810|     17|		ospf_spf_calculate_schedule(ospf, SPF_FLAG_SUMMARY_LSA_INSTALL);
 2811|     17|	}
 2812|       |
 2813|     27|	if (IS_LSA_SELF(new))
  ------------------
  |  |  210|     27|#define IS_LSA_SELF(L)          (CHECK_FLAG ((L)->flags, OSPF_LSA_SELF))
  |  |  ------------------
  |  |  |  |  394|     27|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (210:33): [True: 10, False: 17]
  |  |  ------------------
  ------------------
 2814|     10|		ospf_refresher_register_lsa(ospf, new);
 2815|       |
 2816|     27|	return new;
 2817|     27|}
ospf_lsa.c:ospf_summary_asbr_lsa_install:
 2823|    226|{
 2824|    226|	if (rt_recalc && !IS_LSA_SELF(new)) {
  ------------------
  |  |  210|    226|#define IS_LSA_SELF(L)          (CHECK_FLAG ((L)->flags, OSPF_LSA_SELF))
  |  |  ------------------
  |  |  |  |  394|    226|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  ------------------
  |  Branch (2824:6): [True: 226, False: 0]
  |  Branch (2824:19): [True: 188, False: 38]
  ------------------
 2825|       |/* RFC 2328 Section 13.2 Summary-LSAs
 2826|       |   The best route to the destination described by the summary-
 2827|       |   LSA must be recalculated (see Section 16.5).  If this
 2828|       |   destination is an AS boundary router, it may also be
 2829|       |   necessary to re-examine all the AS-external-LSAs.
 2830|       |*/
 2831|    188|		ospf_spf_calculate_schedule(ospf,
 2832|    188|					    SPF_FLAG_ASBR_SUMMARY_LSA_INSTALL);
 2833|    188|	}
 2834|       |
 2835|       |	/* register LSA to refresh-list. */
 2836|    226|	if (IS_LSA_SELF(new))
  ------------------
  |  |  210|    226|#define IS_LSA_SELF(L)          (CHECK_FLAG ((L)->flags, OSPF_LSA_SELF))
  |  |  ------------------
  |  |  |  |  394|    226|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (210:33): [True: 38, False: 188]
  |  |  ------------------
  ------------------
 2837|     38|		ospf_refresher_register_lsa(ospf, new);
 2838|       |
 2839|    226|	return new;
 2840|    226|}
ospf_lsa.c:ospf_external_lsa_install:
 2846|    132|{
 2847|    132|	ospf_ase_register_external_lsa(new, ospf);
 2848|       |	/* If LSA is not self-originated, calculate an external route. */
 2849|    132|	if (rt_recalc) {
  ------------------
  |  Branch (2849:6): [True: 132, False: 0]
  ------------------
 2850|       |		/* RFC 2328 Section 13.2 AS-external-LSAs
 2851|       |		      The best route to the destination described by the AS-
 2852|       |		      external-LSA must be recalculated (see Section 16.6).
 2853|       |		*/
 2854|       |
 2855|    132|		if (!IS_LSA_SELF(new))
  ------------------
  |  |  210|    132|#define IS_LSA_SELF(L)          (CHECK_FLAG ((L)->flags, OSPF_LSA_SELF))
  |  |  ------------------
  |  |  |  |  394|    132|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  ------------------
  |  Branch (2855:7): [True: 45, False: 87]
  ------------------
 2856|     45|			ospf_ase_incremental_update(ospf, new);
 2857|    132|	}
 2858|       |
 2859|    132|	if (new->data->type == OSPF_AS_NSSA_LSA) {
  ------------------
  |  |   30|    132|#define OSPF_AS_NSSA_LSA	              7
  ------------------
  |  Branch (2859:6): [True: 0, False: 132]
  ------------------
 2860|       |		/* There is no point to register selforiginate Type-7 LSA for
 2861|       |		 * refreshing. We rely on refreshing Type-5 LSA's
 2862|       |		 */
 2863|      0|		if (IS_LSA_SELF(new))
  ------------------
  |  |  210|      0|#define IS_LSA_SELF(L)          (CHECK_FLAG ((L)->flags, OSPF_LSA_SELF))
  |  |  ------------------
  |  |  |  |  394|      0|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (210:33): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2864|      0|			return new;
 2865|      0|		else {
 2866|       |			/* Try refresh type-5 translated LSA for this LSA, if
 2867|       |			 * one exists.
 2868|       |			 * New translations will be taken care of by the
 2869|       |			 * abr_task.
 2870|       |			 */
 2871|      0|			ospf_translated_nssa_refresh(ospf, new, NULL);
 2872|      0|			ospf_schedule_abr_task(ospf);
 2873|      0|		}
 2874|      0|	}
 2875|       |
 2876|       |	/* Register self-originated LSA to refresh queue.
 2877|       |	 * Leave Translated LSAs alone if NSSA is enabled
 2878|       |	 */
 2879|    132|	if (IS_LSA_SELF(new) && !CHECK_FLAG(new->flags, OSPF_LSA_LOCAL_XLT))
  ------------------
  |  |  210|    264|#define IS_LSA_SELF(L)          (CHECK_FLAG ((L)->flags, OSPF_LSA_SELF))
  |  |  ------------------
  |  |  |  |  394|    132|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (210:33): [True: 87, False: 45]
  |  |  ------------------
  ------------------
              	if (IS_LSA_SELF(new) && !CHECK_FLAG(new->flags, OSPF_LSA_LOCAL_XLT))
  ------------------
  |  |  394|     87|#define CHECK_FLAG(V,F)      ((V) & (F))
  ------------------
  |  Branch (2879:26): [True: 87, False: 0]
  ------------------
 2880|     87|		ospf_refresher_register_lsa(ospf, new);
 2881|       |
 2882|    132|	return new;
 2883|    132|}

ospf_flood.c:ospf_check_indication_lsa:
  363|    806|{
  364|    806|	struct summary_lsa *sl = NULL;
  365|       |
  366|    806|	if (lsa->data->type == OSPF_ASBR_SUMMARY_LSA) {
  ------------------
  |  |   27|    806|#define OSPF_ASBR_SUMMARY_LSA         4
  ------------------
  |  Branch (366:6): [True: 226, False: 580]
  ------------------
  367|    226|		sl = (struct summary_lsa *)lsa->data;
  368|    226|		if ((GET_METRIC(sl->metric) == OSPF_LS_INFINITY) &&
  ------------------
  |  |  205|    226|#define GET_METRIC(x) get_metric(x)
  ------------------
              		if ((GET_METRIC(sl->metric) == OSPF_LS_INFINITY) &&
  ------------------
  |  |   36|    226|#define OSPF_LS_INFINITY                  0xffffff
  ------------------
  |  Branch (368:7): [True: 130, False: 96]
  ------------------
  369|    130|		    !CHECK_FLAG(lsa->data->options, OSPF_OPTION_DC))
  ------------------
  |  |  394|    130|#define CHECK_FLAG(V,F)      ((V) & (F))
  ------------------
  |  Branch (369:7): [True: 118, False: 12]
  ------------------
  370|    118|			return true;
  371|    226|	}
  372|       |
  373|    688|	return false;
  374|    806|}

ospf_lsdb_new:
   20|      2|{
   21|      2|	struct ospf_lsdb *new;
   22|       |
   23|      2|	new = XCALLOC(MTYPE_OSPF_LSDB, sizeof(struct ospf_lsdb));
  ------------------
  |  |  165|      2|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
   24|      2|	ospf_lsdb_init(new);
   25|       |
   26|      2|	return new;
   27|      2|}
ospf_lsdb_init:
   30|    740|{
   31|    740|	int i;
   32|       |
   33|  8.88k|	for (i = OSPF_MIN_LSA; i < OSPF_MAX_LSA; i++)
  ------------------
  |  |   19|    740|#define OSPF_MIN_LSA		1  /* begin range here */
  ------------------
              	for (i = OSPF_MIN_LSA; i < OSPF_MAX_LSA; i++)
  ------------------
  |  |   20|  8.88k|#define OSPF_MAX_LSA           12
  ------------------
  |  Branch (33:25): [True: 8.14k, False: 740]
  ------------------
   34|  8.14k|		lsdb->type[i].db = route_table_init();
   35|    740|}
ls_prefix_set:
   56|  18.7k|{
   57|  18.7k|	if (lp && lsa && lsa->data) {
  ------------------
  |  Branch (57:6): [True: 18.7k, False: 0]
  |  Branch (57:12): [True: 18.7k, False: 0]
  |  Branch (57:19): [True: 18.7k, False: 0]
  ------------------
   58|       |		lp->family = AF_UNSPEC;
   59|  18.7k|		lp->prefixlen = 64;
   60|  18.7k|		lp->id = lsa->data->id;
   61|  18.7k|		lp->adv_router = lsa->data->adv_router;
   62|  18.7k|	}
   63|  18.7k|}
ospf_lsdb_add:
  107|  9.68k|{
  108|  9.68k|	struct route_table *table;
  109|  9.68k|	struct prefix_ls lp;
  110|  9.68k|	struct route_node *rn;
  111|       |
  112|  9.68k|	table = lsdb->type[lsa->data->type].db;
  113|  9.68k|	ls_prefix_set(&lp, lsa);
  114|  9.68k|	rn = route_node_get(table, (struct prefix *)&lp);
  115|       |
  116|       |	/* nothing to do? */
  117|  9.68k|	if (rn->info && rn->info == lsa) {
  ------------------
  |  Branch (117:6): [True: 5.24k, False: 4.43k]
  |  Branch (117:18): [True: 0, False: 5.24k]
  ------------------
  118|      0|		route_unlock_node(rn);
  119|      0|		return;
  120|      0|	}
  121|       |
  122|       |	/* purge old entry? */
  123|  9.68k|	if (rn->info)
  ------------------
  |  Branch (123:6): [True: 5.24k, False: 4.43k]
  ------------------
  124|  5.24k|		ospf_lsdb_delete_entry(lsdb, rn);
  125|       |
  126|  9.68k|	if (IS_LSA_SELF(lsa))
  ------------------
  |  |  210|  9.68k|#define IS_LSA_SELF(L)          (CHECK_FLAG ((L)->flags, OSPF_LSA_SELF))
  |  |  ------------------
  |  |  |  |  394|  9.68k|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (210:33): [True: 285, False: 9.39k]
  |  |  ------------------
  ------------------
  127|    285|		lsdb->type[lsa->data->type].count_self++;
  128|  9.68k|	lsdb->type[lsa->data->type].count++;
  129|  9.68k|	lsdb->total++;
  130|       |
  131|       |	/* Increment number of router LSAs received with DC bit set */
  132|  9.68k|	if (lsa->area && (lsa->area->lsdb == lsdb) && !IS_LSA_SELF(lsa) &&
  ------------------
  |  |  210|  10.3k|#define IS_LSA_SELF(L)          (CHECK_FLAG ((L)->flags, OSPF_LSA_SELF))
  |  |  ------------------
  |  |  |  |  394|    671|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  ------------------
  |  Branch (132:6): [True: 671, False: 9.01k]
  |  Branch (132:19): [True: 671, False: 0]
  |  Branch (132:48): [True: 476, False: 195]
  ------------------
  133|    476|	    (lsa->data->type == OSPF_ROUTER_LSA) &&
  ------------------
  |  |   24|    476|#define OSPF_ROUTER_LSA               1
  ------------------
  |  Branch (133:6): [True: 37, False: 439]
  ------------------
  134|     37|	    CHECK_FLAG(lsa->data->options, OSPF_OPTION_DC))
  ------------------
  |  |  394|     37|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 15, False: 22]
  |  |  ------------------
  ------------------
  135|     15|		lsa->area->fr_info.router_lsas_recv_dc_bit++;
  136|       |
  137|  9.68k|#ifdef MONITOR_LSDB_CHANGE
  138|  9.68k|	if (lsdb->new_lsa_hook != NULL)
  ------------------
  |  Branch (138:6): [True: 818, False: 8.86k]
  ------------------
  139|    818|		(*lsdb->new_lsa_hook)(lsa);
  140|  9.68k|#endif /* MONITOR_LSDB_CHANGE */
  141|       |	lsdb->type[lsa->data->type].checksum += ntohs(lsa->data->checksum);
  142|  9.68k|	rn->info = ospf_lsa_lock(lsa); /* lsdb */
  143|  9.68k|}
ospf_lsdb_delete:
  146|    373|{
  147|    373|	struct route_table *table;
  148|    373|	struct prefix_ls lp;
  149|    373|	struct route_node *rn;
  150|       |
  151|    373|	if (!lsdb || !lsa)
  ------------------
  |  Branch (151:6): [True: 0, False: 373]
  |  Branch (151:15): [True: 0, False: 373]
  ------------------
  152|      0|		return;
  153|       |
  154|    373|	assert(lsa->data->type < OSPF_MAX_LSA);
  ------------------
  |  |   51|    373|	({                                                                     \
  |  |   52|    373|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|    373|			(used)) = {                                            \
  |  |   54|    373|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|    373|	{                                                                      \
  |  |  |  |  284|    373|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|    373|		/* .type = */ (type_),                                         \
  |  |  |  |  286|    373|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|    373|		/* .func = */ func_,                                           \
  |  |  |  |  289|    373|	}                                                                      \
  |  |  ------------------
  |  |   55|    373|			.expr = #expr_,                                        \
  |  |   56|    373|		};                                                             \
  |  |   57|    373|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|    373|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|    373|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|    373|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|    373|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 373]
  |  |  |  Branch (58:24): [True: 373, False: 0]
  |  |  ------------------
  |  |   59|    373|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|    373|	})
  ------------------
  155|    373|	table = lsdb->type[lsa->data->type].db;
  156|    373|	ls_prefix_set(&lp, lsa);
  157|    373|	if ((rn = route_node_lookup(table, (struct prefix *)&lp))) {
  ------------------
  |  Branch (157:6): [True: 0, False: 373]
  ------------------
  158|      0|		if (rn->info == lsa)
  ------------------
  |  Branch (158:7): [True: 0, False: 0]
  ------------------
  159|      0|			ospf_lsdb_delete_entry(lsdb, rn);
  160|      0|		route_unlock_node(rn); /* route_node_lookup */
  161|      0|	}
  162|    373|}
ospf_lsdb_lookup:
  179|  8.71k|{
  180|  8.71k|	struct route_table *table;
  181|  8.71k|	struct prefix_ls lp;
  182|  8.71k|	struct route_node *rn;
  183|  8.71k|	struct ospf_lsa *find;
  184|       |
  185|  8.71k|	table = lsdb->type[lsa->data->type].db;
  186|  8.71k|	ls_prefix_set(&lp, lsa);
  187|  8.71k|	rn = route_node_lookup(table, (struct prefix *)&lp);
  188|  8.71k|	if (rn) {
  ------------------
  |  Branch (188:6): [True: 10, False: 8.70k]
  ------------------
  189|     10|		find = rn->info;
  190|     10|		route_unlock_node(rn);
  191|     10|		return find;
  192|     10|	}
  193|  8.70k|	return NULL;
  194|  8.71k|}
ospf_lsdb_lookup_by_id:
  199|  40.2k|{
  200|  40.2k|	struct route_table *table;
  201|  40.2k|	struct prefix_ls lp;
  202|  40.2k|	struct route_node *rn;
  203|  40.2k|	struct ospf_lsa *find;
  204|       |
  205|  40.2k|	table = lsdb->type[type].db;
  206|       |
  207|  40.2k|	memset(&lp, 0, sizeof(lp));
  208|  40.2k|	lp.family = AF_UNSPEC;
  209|  40.2k|	lp.prefixlen = 64;
  210|  40.2k|	lp.id = id;
  211|  40.2k|	lp.adv_router = adv_router;
  212|       |
  213|  40.2k|	rn = route_node_lookup(table, (struct prefix *)&lp);
  214|  40.2k|	if (rn) {
  ------------------
  |  Branch (214:6): [True: 15.6k, False: 24.6k]
  ------------------
  215|  15.6k|		find = rn->info;
  216|  15.6k|		route_unlock_node(rn);
  217|  15.6k|		return find;
  218|  15.6k|	}
  219|  24.6k|	return NULL;
  220|  40.2k|}
ospf_lsdb_isempty:
  282|     90|{
  283|     90|	return (lsdb->total == 0);
  284|     90|}
ospf_lsdb.c:ospf_lsdb_delete_entry:
   67|  5.24k|{
   68|  5.24k|	struct ospf_lsa *lsa = rn->info;
   69|       |
   70|  5.24k|	if (!lsa)
  ------------------
  |  Branch (70:6): [True: 0, False: 5.24k]
  ------------------
   71|      0|		return;
   72|       |
   73|  5.24k|	assert(rn->table == lsdb->type[lsa->data->type].db);
  ------------------
  |  |   51|  5.24k|	({                                                                     \
  |  |   52|  5.24k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  5.24k|			(used)) = {                                            \
  |  |   54|  5.24k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  5.24k|	{                                                                      \
  |  |  |  |  284|  5.24k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  5.24k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  5.24k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  5.24k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  5.24k|	}                                                                      \
  |  |  ------------------
  |  |   55|  5.24k|			.expr = #expr_,                                        \
  |  |   56|  5.24k|		};                                                             \
  |  |   57|  5.24k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  5.24k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  5.24k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  5.24k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  5.24k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 5.24k]
  |  |  |  Branch (58:24): [True: 5.24k, False: 0]
  |  |  ------------------
  |  |   59|  5.24k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  5.24k|	})
  ------------------
   74|       |
   75|  5.24k|	if (IS_LSA_SELF(lsa))
  ------------------
  |  |  210|  5.24k|#define IS_LSA_SELF(L)          (CHECK_FLAG ((L)->flags, OSPF_LSA_SELF))
  |  |  ------------------
  |  |  |  |  394|  5.24k|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (210:33): [True: 0, False: 5.24k]
  |  |  ------------------
  ------------------
   76|      0|		lsdb->type[lsa->data->type].count_self--;
   77|  5.24k|	lsdb->type[lsa->data->type].count--;
   78|  5.24k|	lsdb->type[lsa->data->type].checksum -= ntohs(lsa->data->checksum);
   79|  5.24k|	lsdb->total--;
   80|       |
   81|       |	/* Decrement number of router LSAs received with DC bit set */
   82|  5.24k|	if (lsa->area && (lsa->area->lsdb == lsdb) && !IS_LSA_SELF(lsa) &&
  ------------------
  |  |  210|  5.24k|#define IS_LSA_SELF(L)          (CHECK_FLAG ((L)->flags, OSPF_LSA_SELF))
  |  |  ------------------
  |  |  |  |  394|      0|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  ------------------
  |  Branch (82:6): [True: 0, False: 5.24k]
  |  Branch (82:19): [True: 0, False: 0]
  |  Branch (82:48): [True: 0, False: 0]
  ------------------
   83|      0|	    (lsa->data->type == OSPF_ROUTER_LSA) &&
  ------------------
  |  |   24|      0|#define OSPF_ROUTER_LSA               1
  ------------------
  |  Branch (83:6): [True: 0, False: 0]
  ------------------
   84|      0|	    CHECK_FLAG(lsa->data->options, OSPF_OPTION_DC))
  ------------------
  |  |  394|      0|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   85|      0|		lsa->area->fr_info.router_lsas_recv_dc_bit--;
   86|       |
   87|       |	/*
   88|       |	 * If the LSA being deleted is indication LSA, then set the
   89|       |	 * pointer to NULL.
   90|       |	 */
   91|  5.24k|	if (lsa->area && lsa->area->fr_info.indication_lsa_self &&
  ------------------
  |  Branch (91:6): [True: 0, False: 5.24k]
  |  Branch (91:19): [True: 0, False: 0]
  ------------------
   92|      0|	    (lsa->area->fr_info.indication_lsa_self == lsa))
  ------------------
  |  Branch (92:6): [True: 0, False: 0]
  ------------------
   93|      0|		lsa->area->fr_info.indication_lsa_self = NULL;
   94|       |
   95|  5.24k|	rn->info = NULL;
   96|  5.24k|	route_unlock_node(rn);
   97|  5.24k|#ifdef MONITOR_LSDB_CHANGE
   98|  5.24k|	if (lsdb->del_lsa_hook != NULL)
  ------------------
  |  Branch (98:6): [True: 0, False: 5.24k]
  ------------------
   99|      0|		(*lsdb->del_lsa_hook)(lsa);
  100|  5.24k|#endif			       /* MONITOR_LSDB_CHANGE */
  101|  5.24k|	ospf_lsa_unlock(&lsa); /* lsdb */
  102|  5.24k|	return;
  103|  5.24k|}

LLVMFuzzerTestOneInput:
  203|  3.05k|{
  204|  3.05k|	if (!FuzzingInitialized) {
  ------------------
  |  Branch (204:6): [True: 1, False: 3.05k]
  ------------------
  205|      1|		FuzzingInit();
  206|      1|		FuzzingInitialized = true;
  207|      1|		FuzzingOspf = FuzzingCreateOspf();
  208|      1|	}
  209|       |
  210|  3.05k|	struct ospf *o;
  211|       |
  212|  3.05k|#ifdef FUZZING_LIBFUZZER
  213|  3.05k|	o = FuzzingOspf;
  214|       |#else
  215|       |	o = FuzzingOspf;
  216|       |#endif
  217|       |
  218|       |	/* Simulate the read process done by ospf_recv_packet */
  219|  3.05k|	stream_free(o->ibuf);
  220|  3.05k|	o->ibuf = stream_new(MAX(1, size));
  ------------------
  |  Branch (220:23): [True: 0, False: 3.05k]
  ------------------
  221|       |
  222|  3.05k|	stream_put(o->ibuf, data, size);
  223|  3.05k|	{
  224|  3.05k|		struct ip *iph;
  225|  3.05k|		unsigned short ip_len = 0;
  226|       |
  227|  3.05k|		if (size < sizeof(struct ip))
  ------------------
  |  Branch (227:7): [True: 10, False: 3.04k]
  ------------------
  228|     10|			goto done;
  229|       |
  230|  3.04k|		iph = (struct ip *)STREAM_DATA(o->ibuf);
  ------------------
  |  |  126|  3.04k|#define STREAM_DATA(S)  ((S)->data)
  ------------------
  231|  3.04k|		sockopt_iphdrincl_swab_systoh(iph);
  232|  3.04k|		ip_len = iph->ip_len;
  233|       |
  234|       |		// skipping platform #ifdefs as I test on linux right now
  235|       |		// skipping ifindex lookup as it will fail anyway
  236|       |
  237|  3.04k|		if (size != ip_len)
  ------------------
  |  Branch (237:7): [True: 86, False: 2.95k]
  ------------------
  238|     86|			goto done;
  239|  3.04k|	}
  240|       |
  241|  2.95k|	ospf_read_helper(o);
  242|       |
  243|  3.05k|done:
  244|  3.05k|	return 0;
  245|  2.95k|}
ospf_main.c:FuzzingInit:
  147|      1|{
  148|      1|	unsigned short instance = 0;
  149|      1|	bool created = false;
  150|       |
  151|      1|	const char *name[] = { "ospfd" };
  152|       |
  153|      1|	frr_preinit(&ospfd_di, 1, (char **) &name);
  154|       |
  155|       |
  156|       |	/* INIT */
  157|      1|	ospf_master_init(frr_init_fast());
  158|      1|	ospf_debug_init();
  159|      1|	ospf_vrf_init();
  160|      1|	access_list_init();
  161|      1|	prefix_list_init();
  162|      1|	ospf_if_init();
  163|      1|	ospf_zebra_init(master, instance);
  164|      1|	ospf_bfd_init(master);
  165|      1|	ospf_route_map_init();
  166|      1|	ospf_opaque_init();
  167|      1|	ospf_error_init();
  168|       |
  169|       |	return true;
  170|      1|}
ospf_main.c:FuzzingCreateOspf:
  173|      1|{
  174|      1|	struct prefix p;
  175|      1|	struct interface *ifp = if_get_by_name("fuzziface", 0, "default");
  176|      1|	struct vrf *vrf = vrf_get(VRF_DEFAULT, VRF_DEFAULT_NAME);
  ------------------
  |  |  254|      1|#define VRF_DEFAULT 0
  ------------------
              	struct vrf *vrf = vrf_get(VRF_DEFAULT, VRF_DEFAULT_NAME);
  ------------------
  |  |  260|      1|#define VRF_DEFAULT_NAME    vrf_get_default_name()
  ------------------
  177|      1|	ifp->mtu = 68;
  178|      1|	str2prefix("11.0.2.0/24", &p);
  179|       |
  180|      1|	bool created;
  181|      1|	struct ospf *o = ospf_get(0, VRF_DEFAULT_NAME, &created);
  ------------------
  |  |  260|      1|#define VRF_DEFAULT_NAME    vrf_get_default_name()
  ------------------
  182|      1|	o->fd = 69;
  183|       |
  184|      1|	struct in_addr in;
  185|      1|	inet_pton(AF_INET, "0.0.0.0", &in);
  186|      1|	struct ospf_area *a = ospf_area_new(o, in);
  187|       |
  188|      1|	struct connected *c = connected_add_by_prefix(ifp, &p, NULL);
  189|      1|	add_ospf_interface(c, a);
  190|       |
  191|      1|	struct ospf_interface *oi = listhead(a->oiflist)->data;
  ------------------
  |  |   51|      1|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  ------------------
  |  |  |  Branch (51:22): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  192|      1|	oi->state = 7; // ISM_DR
  193|       |
  194|      1|	o->fuzzing_packet_ifp = ifp;
  195|       |
  196|      1|	return o;
  197|      1|}

ospf_nbr_new:
   55|    246|{
   56|    246|	struct ospf_neighbor *nbr;
   57|       |
   58|       |	/* Allcate new neighbor. */
   59|    246|	nbr = XCALLOC(MTYPE_OSPF_NEIGHBOR, sizeof(struct ospf_neighbor));
  ------------------
  |  |  165|    246|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
   60|       |
   61|       |	/* Relate neighbor to the interface. */
   62|    246|	nbr->oi = oi;
   63|       |
   64|       |	/* Set default values. */
   65|    246|	nbr->state = NSM_Down;
  ------------------
  |  |   16|    246|#define NSM_Down		2
  ------------------
   66|       |
   67|       |	/* Set inheritance values. */
   68|    246|	nbr->v_inactivity = OSPF_IF_PARAM(oi, v_wait);
  ------------------
  |  |   32|    246|	(OSPF_IF_PARAM_CONFIGURED((O)->params, P)                              \
  |  |  ------------------
  |  |  |  |   22|    246|#define OSPF_IF_PARAM_CONFIGURED(S, P) ((S) && (S)->P##__config)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (22:41): [True: 0, False: 246]
  |  |  |  |  |  Branch (22:48): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   33|    246|		 ? (O)->params->P                                              \
  |  |   34|    246|		 : IF_DEF_PARAMS((O)->ifp)->P)
  |  |  ------------------
  |  |  |  |   17|    246|#define IF_DEF_PARAMS(I) (IF_OSPF_IF_INFO (I)->def_params)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    246|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   69|    246|	nbr->v_db_desc = OSPF_IF_PARAM(oi, retransmit_interval);
  ------------------
  |  |   32|    246|	(OSPF_IF_PARAM_CONFIGURED((O)->params, P)                              \
  |  |  ------------------
  |  |  |  |   22|    246|#define OSPF_IF_PARAM_CONFIGURED(S, P) ((S) && (S)->P##__config)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (22:41): [True: 0, False: 246]
  |  |  |  |  |  Branch (22:48): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   33|    246|		 ? (O)->params->P                                              \
  |  |   34|    246|		 : IF_DEF_PARAMS((O)->ifp)->P)
  |  |  ------------------
  |  |  |  |   17|    246|#define IF_DEF_PARAMS(I) (IF_OSPF_IF_INFO (I)->def_params)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    246|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   70|    246|	nbr->v_ls_req = OSPF_IF_PARAM(oi, retransmit_interval);
  ------------------
  |  |   32|    246|	(OSPF_IF_PARAM_CONFIGURED((O)->params, P)                              \
  |  |  ------------------
  |  |  |  |   22|    246|#define OSPF_IF_PARAM_CONFIGURED(S, P) ((S) && (S)->P##__config)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (22:41): [True: 0, False: 246]
  |  |  |  |  |  Branch (22:48): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   33|    246|		 ? (O)->params->P                                              \
  |  |   34|    246|		 : IF_DEF_PARAMS((O)->ifp)->P)
  |  |  ------------------
  |  |  |  |   17|    246|#define IF_DEF_PARAMS(I) (IF_OSPF_IF_INFO (I)->def_params)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    246|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   71|    246|	nbr->v_ls_upd = OSPF_IF_PARAM(oi, retransmit_interval);
  ------------------
  |  |   32|    246|	(OSPF_IF_PARAM_CONFIGURED((O)->params, P)                              \
  |  |  ------------------
  |  |  |  |   22|    246|#define OSPF_IF_PARAM_CONFIGURED(S, P) ((S) && (S)->P##__config)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (22:41): [True: 0, False: 246]
  |  |  |  |  |  Branch (22:48): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   33|    246|		 ? (O)->params->P                                              \
  |  |   34|    246|		 : IF_DEF_PARAMS((O)->ifp)->P)
  |  |  ------------------
  |  |  |  |   17|    246|#define IF_DEF_PARAMS(I) (IF_OSPF_IF_INFO (I)->def_params)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    246|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   72|    246|	nbr->priority = -1;
   73|       |
   74|       |	/* DD flags. */
   75|    246|	nbr->dd_flags = OSPF_DD_FLAG_MS | OSPF_DD_FLAG_M | OSPF_DD_FLAG_I;
  ------------------
  |  |   62|    246|#define OSPF_DD_FLAG_MS                  0x01
  ------------------
              	nbr->dd_flags = OSPF_DD_FLAG_MS | OSPF_DD_FLAG_M | OSPF_DD_FLAG_I;
  ------------------
  |  |   63|    246|#define OSPF_DD_FLAG_M                   0x02
  ------------------
              	nbr->dd_flags = OSPF_DD_FLAG_MS | OSPF_DD_FLAG_M | OSPF_DD_FLAG_I;
  ------------------
  |  |   64|    246|#define OSPF_DD_FLAG_I                   0x04
  ------------------
   76|       |
   77|       |	/* Last received and sent DD. */
   78|    246|	nbr->last_send = NULL;
   79|       |
   80|    246|	nbr->nbr_nbma = NULL;
   81|       |
   82|    246|	ospf_lsdb_init(&nbr->db_sum);
   83|    246|	ospf_lsdb_init(&nbr->ls_rxmt);
   84|    246|	ospf_lsdb_init(&nbr->ls_req);
   85|       |
   86|    246|	nbr->crypt_seqnum = 0;
   87|       |
   88|       |	/* Initialize GR Helper info*/
   89|    246|	nbr->gr_helper_info.recvd_grace_period = 0;
   90|    246|	nbr->gr_helper_info.actual_grace_period = 0;
   91|    246|	nbr->gr_helper_info.gr_helper_status = OSPF_GR_NOT_HELPER;
  ------------------
  |  |   12|    246|#define OSPF_GR_NOT_HELPER 0
  ------------------
   92|    246|	nbr->gr_helper_info.helper_exit_reason = OSPF_GR_HELPER_EXIT_NONE;
   93|    246|	nbr->gr_helper_info.gr_restart_reason = OSPF_GR_UNKNOWN_RESTART;
   94|       |
   95|    246|	return nbr;
   96|    246|}
ospf_nbr_bidirectional:
  211|     68|{
  212|     68|	int i;
  213|     68|	int max;
  214|       |
  215|     68|	max = size / sizeof(struct in_addr);
  216|       |
  217|  1.15k|	for (i = 0; i < max; i++)
  ------------------
  |  Branch (217:14): [True: 1.09k, False: 63]
  ------------------
  218|  1.09k|		if (IPV4_ADDR_SAME(router_id, &neighbors[i]))
  ------------------
  |  |  342|  1.09k|#define IPV4_ADDR_SAME(A,B)  ipv4_addr_same((A), (B))
  |  |  ------------------
  |  |  |  Branch (342:30): [True: 5, False: 1.08k]
  |  |  ------------------
  ------------------
  219|      5|			return 1;
  220|       |
  221|     63|	return 0;
  222|     68|}
ospf_nbr_self_reset:
  226|      1|{
  227|      1|	if (oi->nbr_self)
  ------------------
  |  Branch (227:6): [True: 0, False: 1]
  ------------------
  228|      0|		ospf_nbr_delete(oi->nbr_self);
  229|       |
  230|      1|	oi->nbr_self = ospf_nbr_new(oi);
  231|      1|	ospf_nbr_add_self(oi, router_id);
  232|      1|}
ospf_nbr_add_self:
  236|      1|{
  237|      1|	struct prefix p;
  238|      1|	struct route_node *rn;
  239|       |
  240|      1|	if (!oi->nbr_self)
  ------------------
  |  Branch (240:6): [True: 0, False: 1]
  ------------------
  241|      0|		oi->nbr_self = ospf_nbr_new(oi);
  242|       |
  243|       |	/* Initial state */
  244|      1|	oi->nbr_self->address = *oi->address;
  245|      1|	oi->nbr_self->priority = OSPF_IF_PARAM(oi, priority);
  ------------------
  |  |   32|      1|	(OSPF_IF_PARAM_CONFIGURED((O)->params, P)                              \
  |  |  ------------------
  |  |  |  |   22|      1|#define OSPF_IF_PARAM_CONFIGURED(S, P) ((S) && (S)->P##__config)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (22:41): [True: 0, False: 1]
  |  |  |  |  |  Branch (22:48): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   33|      1|		 ? (O)->params->P                                              \
  |  |   34|      1|		 : IF_DEF_PARAMS((O)->ifp)->P)
  |  |  ------------------
  |  |  |  |   17|      1|#define IF_DEF_PARAMS(I) (IF_OSPF_IF_INFO (I)->def_params)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      1|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  246|      1|	oi->nbr_self->router_id = router_id;
  247|      1|	oi->nbr_self->src = oi->address->u.prefix4;
  248|      1|	oi->nbr_self->state = NSM_TwoWay;
  ------------------
  |  |   19|      1|#define NSM_TwoWay		5
  ------------------
  249|       |
  250|      1|	switch (oi->area->external_routing) {
  ------------------
  |  Branch (250:10): [True: 1, False: 0]
  ------------------
  251|      1|	case OSPF_AREA_DEFAULT:
  ------------------
  |  |   76|      1|#define OSPF_AREA_DEFAULT       0
  ------------------
  |  Branch (251:2): [True: 1, False: 0]
  ------------------
  252|      1|		SET_FLAG(oi->nbr_self->options, OSPF_OPTION_E);
  ------------------
  |  |  395|      1|#define SET_FLAG(V,F)        (V) |= (F)
  ------------------
  253|      1|		break;
  254|      0|	case OSPF_AREA_STUB:
  ------------------
  |  |   77|      0|#define OSPF_AREA_STUB          1
  ------------------
  |  Branch (254:2): [True: 0, False: 1]
  ------------------
  255|      0|		UNSET_FLAG(oi->nbr_self->options, OSPF_OPTION_E);
  ------------------
  |  |  396|      0|#define UNSET_FLAG(V,F)      (V) &= ~(F)
  ------------------
  256|      0|		break;
  257|      0|	case OSPF_AREA_NSSA:
  ------------------
  |  |   78|      0|#define OSPF_AREA_NSSA          2
  ------------------
  |  Branch (257:2): [True: 0, False: 1]
  ------------------
  258|      0|		UNSET_FLAG(oi->nbr_self->options, OSPF_OPTION_E);
  ------------------
  |  |  396|      0|#define UNSET_FLAG(V,F)      (V) &= ~(F)
  ------------------
  259|      0|		SET_FLAG(oi->nbr_self->options, OSPF_OPTION_NP);
  ------------------
  |  |  395|      0|#define SET_FLAG(V,F)        (V) |= (F)
  ------------------
  260|      0|		break;
  261|      1|	}
  262|       |
  263|       |	/* Add nbr_self to nbrs table */
  264|      1|	ospf_nbr_key(oi, oi->nbr_self, &p);
  265|       |
  266|      1|	rn = route_node_get(oi->nbrs, &p);
  267|      1|	if (rn->info) {
  ------------------
  |  Branch (267:6): [True: 0, False: 1]
  ------------------
  268|       |		/* There is already pseudo neighbor. */
  269|      0|		if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|      0|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|      0|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  270|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  271|      0|				"router_id %pI4 already present in neighbor table. node refcount %u",
  272|      0|				&router_id, route_node_get_lock_count(rn));
  273|      0|		route_unlock_node(rn);
  274|      0|	} else
  275|      1|		rn->info = oi->nbr_self;
  276|      1|}
ospf_nbr_lookup_by_addr:
  320|  2.14k|{
  321|  2.14k|	struct prefix p;
  322|  2.14k|	struct route_node *rn;
  323|  2.14k|	struct ospf_neighbor *nbr;
  324|       |
  325|  2.14k|	p.family = AF_INET;
  326|  2.14k|	p.prefixlen = IPV4_MAX_BITLEN;
  ------------------
  |  |  334|  2.14k|#define IPV4_MAX_BITLEN    32
  ------------------
  327|  2.14k|	p.u.prefix4 = *addr;
  328|       |
  329|  2.14k|	rn = route_node_lookup(nbrs, &p);
  330|  2.14k|	if (!rn)
  ------------------
  |  Branch (330:6): [True: 41, False: 2.10k]
  ------------------
  331|     41|		return NULL;
  332|       |
  333|       |	/* See comment in ospf_nbr_delete */
  334|  2.14k|	assert(rn->info);
  ------------------
  |  |   51|  2.14k|	({                                                                     \
  |  |   52|  2.10k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  2.10k|			(used)) = {                                            \
  |  |   54|  2.10k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  2.10k|	{                                                                      \
  |  |  |  |  284|  2.10k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  2.10k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  2.10k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  2.10k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  2.10k|	}                                                                      \
  |  |  ------------------
  |  |   55|  2.10k|			.expr = #expr_,                                        \
  |  |   56|  2.10k|		};                                                             \
  |  |   57|  2.10k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  2.10k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  2.10k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  2.10k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  2.10k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 2.10k]
  |  |  |  Branch (58:24): [True: 2.10k, False: 0]
  |  |  ------------------
  |  |   59|  2.10k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  2.10k|	})
  ------------------
  335|       |
  336|  2.10k|	if (rn->info == NULL) {
  ------------------
  |  Branch (336:6): [True: 0, False: 2.10k]
  ------------------
  337|      0|		route_unlock_node(rn);
  338|      0|		return NULL;
  339|      0|	}
  340|       |
  341|  2.10k|	nbr = (struct ospf_neighbor *)rn->info;
  342|  2.10k|	route_unlock_node(rn);
  343|       |
  344|  2.10k|	return nbr;
  345|  2.10k|}
ospf_nbr_lookup:
  411|  2.10k|{
  412|  2.10k|	struct in_addr srcaddr = iph->ip_src;
  413|       |
  414|  2.10k|	if (oi->type == OSPF_IFTYPE_VIRTUALLINK
  ------------------
  |  |   48|  4.21k|#define OSPF_IFTYPE_VIRTUALLINK		5
  ------------------
  |  Branch (414:6): [True: 0, False: 2.10k]
  ------------------
  415|  2.10k|	    || oi->type == OSPF_IFTYPE_POINTOPOINT)
  ------------------
  |  |   44|  2.10k|#define OSPF_IFTYPE_POINTOPOINT		1
  ------------------
  |  Branch (415:9): [True: 0, False: 2.10k]
  ------------------
  416|      0|		return (ospf_nbr_lookup_by_routerid(oi->nbrs,
  417|      0|						    &ospfh->router_id));
  418|  2.10k|	else
  419|  2.10k|		return (ospf_nbr_lookup_by_addr(oi->nbrs, &srcaddr));
  420|  2.10k|}
ospf_nbr_get:
  469|  2.42k|{
  470|  2.42k|	struct route_node *rn;
  471|  2.42k|	struct prefix key;
  472|  2.42k|	struct ospf_neighbor *nbr;
  473|       |
  474|  2.42k|	key.family = AF_INET;
  475|  2.42k|	key.prefixlen = IPV4_MAX_BITLEN;
  ------------------
  |  |  334|  2.42k|#define IPV4_MAX_BITLEN    32
  ------------------
  476|       |
  477|  2.42k|	if (oi->type == OSPF_IFTYPE_VIRTUALLINK
  ------------------
  |  |   48|  4.84k|#define OSPF_IFTYPE_VIRTUALLINK		5
  ------------------
  |  Branch (477:6): [True: 0, False: 2.42k]
  ------------------
  478|  2.42k|	    || oi->type == OSPF_IFTYPE_POINTOPOINT)
  ------------------
  |  |   44|  2.42k|#define OSPF_IFTYPE_POINTOPOINT		1
  ------------------
  |  Branch (478:9): [True: 0, False: 2.42k]
  ------------------
  479|      0|		key.u.prefix4 = ospfh->router_id; /* index vlink and ptp nbrs by
  480|       |						     router-id */
  481|  2.42k|	else
  482|  2.42k|		key.u.prefix4 = iph->ip_src;
  483|       |
  484|  2.42k|	rn = route_node_get(oi->nbrs, &key);
  485|  2.42k|	if (rn->info) {
  ------------------
  |  Branch (485:6): [True: 2.17k, False: 245]
  ------------------
  486|  2.17k|		route_unlock_node(rn);
  487|  2.17k|		nbr = rn->info;
  488|       |
  489|  2.17k|		if (oi->type == OSPF_IFTYPE_NBMA && nbr->state == NSM_Attempt) {
  ------------------
  |  |   46|  4.35k|#define OSPF_IFTYPE_NBMA		3
  ------------------
              		if (oi->type == OSPF_IFTYPE_NBMA && nbr->state == NSM_Attempt) {
  ------------------
  |  |   17|      0|#define NSM_Attempt		3
  ------------------
  |  Branch (489:7): [True: 0, False: 2.17k]
  |  Branch (489:39): [True: 0, False: 0]
  ------------------
  490|      0|			nbr->src = iph->ip_src;
  491|      0|			memcpy(&nbr->address, p, sizeof(struct prefix));
  492|      0|		}
  493|  2.17k|	} else {
  494|    245|		rn->info = nbr = ospf_nbr_add(oi, ospfh, p);
  495|    245|	}
  496|       |
  497|  2.42k|	nbr->router_id = ospfh->router_id;
  498|       |
  499|  2.42k|	return nbr;
  500|  2.42k|}
ospf_neighbor.c:ospf_nbr_key:
   41|      1|{
   42|      1|	key->family = AF_INET;
   43|      1|	key->prefixlen = IPV4_MAX_BITLEN;
  ------------------
  |  |  334|      1|#define IPV4_MAX_BITLEN    32
  ------------------
   44|       |
   45|       |	/* vlinks are indexed by router-id */
   46|      1|	if (oi->type == OSPF_IFTYPE_VIRTUALLINK
  ------------------
  |  |   48|      2|#define OSPF_IFTYPE_VIRTUALLINK		5
  ------------------
  |  Branch (46:6): [True: 0, False: 1]
  ------------------
   47|      1|	    || oi->type == OSPF_IFTYPE_POINTOPOINT)
  ------------------
  |  |   44|      1|#define OSPF_IFTYPE_POINTOPOINT		1
  ------------------
  |  Branch (47:9): [True: 0, False: 1]
  ------------------
   48|      0|		key->u.prefix4 = nbr->router_id;
   49|      1|	else
   50|      1|		key->u.prefix4 = nbr->src;
   51|      1|	return;
   52|      1|}
ospf_neighbor.c:ospf_nbr_add:
  425|    245|{
  426|    245|	struct ospf_neighbor *nbr;
  427|       |
  428|    245|	nbr = ospf_nbr_new(oi);
  429|    245|	nbr->state = NSM_Down;
  ------------------
  |  |   16|    245|#define NSM_Down		2
  ------------------
  430|    245|	nbr->src = p->u.prefix4;
  431|    245|	memcpy(&nbr->address, p, sizeof(struct prefix));
  432|       |
  433|    245|	nbr->nbr_nbma = NULL;
  434|    245|	if (oi->type == OSPF_IFTYPE_NBMA) {
  ------------------
  |  |   46|    245|#define OSPF_IFTYPE_NBMA		3
  ------------------
  |  Branch (434:6): [True: 0, False: 245]
  ------------------
  435|      0|		struct ospf_nbr_nbma *nbr_nbma;
  436|      0|		struct listnode *node;
  437|       |
  438|      0|		for (ALL_LIST_ELEMENTS_RO(oi->nbr_nbma, node, nbr_nbma)) {
  ------------------
  |  |  333|      0|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|      0|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|      0|	(node) != NULL && ((data) = static_cast(data, listgetdata(node)), 1);  \
  |  |  ------------------
  |  |  |  |  204|      0|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (334:2): [True: 0, False: 0]
  |  |  |  Branch (334:20): [True: 0, False: 0]
  |  |  ------------------
  |  |  335|      0|	(node) = listnextnode(node), ((data) = NULL)
  |  |  ------------------
  |  |  |  |   49|      0|#define listnextnode(X) ((X) ? ((X)->next) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  439|      0|			if (IPV4_ADDR_SAME(&nbr_nbma->addr, &nbr->src)) {
  ------------------
  |  |  342|      0|#define IPV4_ADDR_SAME(A,B)  ipv4_addr_same((A), (B))
  |  |  ------------------
  |  |  |  Branch (342:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  440|      0|				nbr_nbma->nbr = nbr;
  441|      0|				nbr->nbr_nbma = nbr_nbma;
  442|       |#ifndef FUZZING
  443|       |				if (nbr_nbma->t_poll)
  444|       |					EVENT_OFF(nbr_nbma->t_poll);
  445|       |#endif
  446|      0|				nbr->state_change = nbr_nbma->state_change + 1;
  447|      0|			}
  448|      0|		}
  449|      0|	}
  450|       |
  451|       |	/* New nbr, save the crypto sequence number if necessary */
  452|       |#ifndef FUZZING
  453|       |	if (ntohs(ospfh->auth_type) == OSPF_AUTH_CRYPTOGRAPHIC)
  454|       |		nbr->crypt_seqnum = ospfh->u.crypt.crypt_seqnum;
  455|       |#endif
  456|       |	/* Configure BFD if interface has it. */
  457|    245|	ospf_neighbor_bfd_apply(nbr);
  458|       |
  459|    245|	if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|    245|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|    245|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|    245|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 245]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  460|      0|		zlog_debug("NSM[%s:%pI4]: start", IF_NAME(oi),
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  461|    245|			   &nbr->router_id);
  462|       |
  463|    245|	return nbr;
  464|    245|}

ospf_sock_init:
  240|      1|{
  241|      1|#ifdef FUZZING
  242|      1|	return 0;
  243|      0|#endif
  244|      0|	int ret;
  245|       |
  246|       |	/* silently ignore. already done */
  247|      0|	if (ospf->fd > 0)
  ------------------
  |  Branch (247:6): [True: 0, False: 0]
  ------------------
  248|      0|		return -1;
  249|       |
  250|      0|	ret = sock_init_common(ospf->vrf_id, ospf->name, &(ospf->fd));
  251|       |
  252|      0|	if (ret >= 0) /* Update socket buffer sizes */
  ------------------
  |  Branch (252:6): [True: 0, False: 0]
  ------------------
  253|      0|		ospf_sock_bufsize_update(ospf, ospf->fd, OSPF_SOCK_BOTH);
  254|       |
  255|      0|	return ret;
  256|      0|}

ospf_db_summary_isempty:
  212|     90|{
  213|     90|	return ospf_lsdb_isempty(&nbr->db_sum);
  214|     90|}

ospf_opaque_init:
   69|      1|{
   70|      1|	ospf_opaque_register_vty();
   71|      1|	ospf_opaque_funclist_init();
   72|       |
   73|      1|	if (ospf_mpls_te_init() != 0)
  ------------------
  |  Branch (73:6): [True: 0, False: 1]
  ------------------
   74|      0|		exit(1);
   75|       |
   76|       |	/* Segment Routing init */
   77|      1|	if (ospf_sr_init() != 0)
  ------------------
  |  Branch (77:6): [True: 0, False: 1]
  ------------------
   78|      0|		exit(1);
   79|       |
   80|      1|	if (ospf_router_info_init() != 0)
  ------------------
  |  Branch (80:6): [True: 0, False: 1]
  ------------------
   81|      0|		exit(1);
   82|       |
   83|      1|	if (ospf_ext_init() != 0)
  ------------------
  |  Branch (83:6): [True: 0, False: 1]
  ------------------
   84|      0|		exit(1);
   85|       |
   86|      1|#ifdef SUPPORT_OSPF_API
   87|      1|	if ((ospf_apiserver_enable) && (ospf_apiserver_init() != 0))
  ------------------
  |  Branch (87:6): [True: 0, False: 1]
  |  Branch (87:33): [True: 0, False: 0]
  ------------------
   88|      0|		exit(1);
   89|      1|#endif /* SUPPORT_OSPF_API */
   90|       |
   91|      1|	return;
   92|      1|}
ospf_opaque_type9_lsa_init:
  128|      1|{
  129|      1|	if (oi->opaque_lsa_self != NULL)
  ------------------
  |  Branch (129:6): [True: 0, False: 1]
  ------------------
  130|      0|		list_delete(&oi->opaque_lsa_self);
  131|       |
  132|      1|	oi->opaque_lsa_self = list_new();
  133|      1|	oi->opaque_lsa_self->del = free_opaque_info_per_type_del;
  134|       |	oi->t_opaque_lsa_self = NULL;
  135|      1|	return 0;
  136|      1|}
ospf_opaque_type10_lsa_init:
  148|      1|{
  149|      1|	if (area->opaque_lsa_self != NULL)
  ------------------
  |  Branch (149:6): [True: 0, False: 1]
  ------------------
  150|      0|		list_delete(&area->opaque_lsa_self);
  151|       |
  152|      1|	area->opaque_lsa_self = list_new();
  153|      1|	area->opaque_lsa_self->del = free_opaque_info_per_type_del;
  154|      1|	area->t_opaque_lsa_self = NULL;
  155|       |
  156|      1|#ifdef MONITOR_LSDB_CHANGE
  157|      1|	area->lsdb->new_lsa_hook = ospf_opaque_lsa_install_hook;
  158|      1|	area->lsdb->del_lsa_hook = ospf_opaque_lsa_delete_hook;
  159|      1|#endif /* MONITOR_LSDB_CHANGE */
  160|      1|	return 0;
  161|      1|}
ospf_opaque_type11_lsa_init:
  176|      1|{
  177|      1|	if (top->opaque_lsa_self != NULL)
  ------------------
  |  Branch (177:6): [True: 0, False: 1]
  ------------------
  178|      0|		list_delete(&top->opaque_lsa_self);
  179|       |
  180|      1|	top->opaque_lsa_self = list_new();
  181|      1|	top->opaque_lsa_self->del = free_opaque_info_per_type_del;
  182|      1|	top->t_opaque_lsa_self = NULL;
  183|       |
  184|      1|#ifdef MONITOR_LSDB_CHANGE
  185|      1|	top->lsdb->new_lsa_hook = ospf_opaque_lsa_install_hook;
  186|      1|	top->lsdb->del_lsa_hook = ospf_opaque_lsa_delete_hook;
  187|      1|#endif /* MONITOR_LSDB_CHANGE */
  188|      1|	return 0;
  189|      1|}
ospf_register_opaque_functab:
  374|      5|{
  375|      5|	struct list *funclist;
  376|      5|	struct ospf_opaque_functab *new;
  377|       |
  378|      5|	if ((funclist = ospf_get_opaque_funclist(lsa_type)) == NULL)
  ------------------
  |  Branch (378:6): [True: 0, False: 5]
  ------------------
  379|      0|		return -1;
  380|       |
  381|      5|	struct listnode *node, *nnode;
  382|      5|	struct ospf_opaque_functab *functab;
  383|       |
  384|      5|	for (ALL_LIST_ELEMENTS(funclist, node, nnode, functab))
  ------------------
  |  |  320|      5|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|      5|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 5, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  321|     11|	(node) != NULL                                                         \
  |  |  ------------------
  |  |  |  Branch (321:2): [True: 6, False: 5]
  |  |  ------------------
  |  |  322|     12|		&& ((data) = static_cast(data, listgetdata(node)),             \
  |  |  ------------------
  |  |  |  |  204|     36|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 6, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 6]
  |  |  |  |  |  Branch (204:28): [True: 6, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:6): [True: 6, False: 0]
  |  |  ------------------
  |  |  323|     12|		    (nextnode) = node->next, 1);                               \
  |  |  324|      6|	(node) = (nextnode), ((data) = NULL)
  ------------------
  385|      6|		if (functab->opaque_type == opaque_type) {
  ------------------
  |  Branch (385:7): [True: 0, False: 6]
  ------------------
  386|      0|			flog_warn(
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
  387|      0|				EC_OSPF_LSA,
  388|      0|				"%s: Duplicated entry?: lsa_type(%u), opaque_type(%u)",
  389|      0|				__func__, lsa_type, opaque_type);
  390|      0|			return -1;
  391|      0|		}
  392|       |
  393|      5|	new = XCALLOC(MTYPE_OSPF_OPAQUE_FUNCTAB,
  ------------------
  |  |  165|      5|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  394|      5|		      sizeof(struct ospf_opaque_functab));
  395|       |
  396|      5|	new->opaque_type = opaque_type;
  397|      5|	new->oipt = NULL;
  398|      5|	new->new_if_hook = new_if_hook;
  399|      5|	new->del_if_hook = del_if_hook;
  400|      5|	new->ism_change_hook = ism_change_hook;
  401|      5|	new->nsm_change_hook = nsm_change_hook;
  402|      5|	new->config_write_router = config_write_router;
  403|      5|	new->config_write_if = config_write_if;
  404|      5|	new->config_write_debug = config_write_debug;
  405|      5|	new->show_opaque_info = show_opaque_info;
  406|      5|	new->lsa_originator = lsa_originator;
  407|      5|	new->lsa_refresher = lsa_refresher;
  408|      5|	new->new_lsa_hook = new_lsa_hook;
  409|      5|	new->del_lsa_hook = del_lsa_hook;
  410|       |
  411|      5|	listnode_add(funclist, new);
  412|       |
  413|      5|	return 0;
  414|      5|}
ospf_opaque_new_if:
  980|      1|{
  981|      1|	struct list *funclist;
  982|      1|	int rc = -1;
  983|       |
  984|      1|	funclist = ospf_opaque_wildcard_funclist;
  985|      1|	if (opaque_lsa_new_if_callback(funclist, ifp) != 0)
  ------------------
  |  Branch (985:6): [True: 0, False: 1]
  ------------------
  986|      0|		goto out;
  987|       |
  988|      1|	funclist = ospf_opaque_type9_funclist;
  989|      1|	if (opaque_lsa_new_if_callback(funclist, ifp) != 0)
  ------------------
  |  Branch (989:6): [True: 0, False: 1]
  ------------------
  990|      0|		goto out;
  991|       |
  992|      1|	funclist = ospf_opaque_type10_funclist;
  993|      1|	if (opaque_lsa_new_if_callback(funclist, ifp) != 0)
  ------------------
  |  Branch (993:6): [True: 0, False: 1]
  ------------------
  994|      0|		goto out;
  995|       |
  996|      1|	funclist = ospf_opaque_type11_funclist;
  997|      1|	if (opaque_lsa_new_if_callback(funclist, ifp) != 0)
  ------------------
  |  Branch (997:6): [True: 0, False: 1]
  ------------------
  998|      0|		goto out;
  999|       |
 1000|      1|	rc = 0;
 1001|      1|out:
 1002|      1|	return rc;
 1003|      1|}
ospf_opaque_lsa_install:
 1544|     49|{
 1545|     49|	struct ospf_lsa *new = NULL;
 1546|     49|	struct opaque_info_per_type *oipt;
 1547|     49|	struct opaque_info_per_id *oipi;
 1548|     49|	struct ospf *top;
 1549|       |
 1550|       |	/* Don't take "rt_recalc" into consideration for now. */ /* XXX */
 1551|       |
 1552|     49|	if (!IS_LSA_SELF(lsa)) {
  ------------------
  |  |  210|     49|#define IS_LSA_SELF(L)          (CHECK_FLAG ((L)->flags, OSPF_LSA_SELF))
  |  |  ------------------
  |  |  |  |  394|     49|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  ------------------
  |  Branch (1552:6): [True: 37, False: 12]
  ------------------
 1553|     37|		new = lsa; /* Don't touch this LSA. */
 1554|     37|		goto out;
 1555|     37|	}
 1556|       |
 1557|     12|	if (IS_DEBUG_OSPF(lsa, LSA_INSTALL))
  ------------------
  |  |   91|     12|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   34|     12|#define OSPF_DEBUG_LSA_INSTALL  0x04
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 12]
  |  |  ------------------
  ------------------
 1558|      0|		zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1559|     12|			"Install Type-%u Opaque-LSA: [opaque-type=%u, opaque-id=%x]",
 1560|     12|			lsa->data->type,
 1561|     12|			GET_OPAQUE_TYPE(ntohl(lsa->data->id.s_addr)),
 1562|     12|			GET_OPAQUE_ID(ntohl(lsa->data->id.s_addr)));
 1563|       |
 1564|       |	/* Replace the existing lsa with the new one. */
 1565|     12|	if ((oipt = lookup_opaque_info_by_type(lsa)) != NULL
  ------------------
  |  Branch (1565:6): [True: 0, False: 12]
  ------------------
 1566|      0|	    && (oipi = lookup_opaque_info_by_id(oipt, lsa)) != NULL) {
  ------------------
  |  Branch (1566:9): [True: 0, False: 0]
  ------------------
 1567|      0|		ospf_lsa_unlock(&oipi->lsa);
 1568|      0|		oipi->lsa = ospf_lsa_lock(lsa);
 1569|      0|	}
 1570|       |	/* Register the new lsa entry */
 1571|     12|	else if (register_opaque_lsa(lsa) == NULL) {
  ------------------
  |  Branch (1571:11): [True: 12, False: 0]
  ------------------
 1572|     12|		flog_warn(EC_OSPF_LSA, "%s: register_opaque_lsa() ?", __func__);
  ------------------
  |  |  137|     12|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 1573|     12|		goto out;
 1574|     12|	}
 1575|       |
 1576|       |	/*
 1577|       |	 * Make use of a common mechanism (ospf_lsa_refresh_walker)
 1578|       |	 * for periodic refresh of self-originated Opaque-LSAs.
 1579|       |	 */
 1580|      0|	switch (lsa->data->type) {
 1581|      0|	case OSPF_OPAQUE_LINK_LSA:
  ------------------
  |  |   32|      0|#define OSPF_OPAQUE_LINK_LSA	      9
  ------------------
  |  Branch (1581:2): [True: 0, False: 0]
  ------------------
 1582|      0|		if ((top = oi_to_top(lsa->oi)) == NULL) {
  ------------------
  |  Branch (1582:7): [True: 0, False: 0]
  ------------------
 1583|       |			/* Above conditions must have passed. */
 1584|      0|			flog_warn(EC_OSPF_LSA, "%s: Something wrong?",
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 1585|      0|				  __func__);
 1586|      0|			goto out;
 1587|      0|		}
 1588|      0|		break;
 1589|      0|	case OSPF_OPAQUE_AREA_LSA:
  ------------------
  |  |   33|      0|#define OSPF_OPAQUE_AREA_LSA	     10
  ------------------
  |  Branch (1589:2): [True: 0, False: 0]
  ------------------
 1590|      0|		if (lsa->area == NULL || (top = lsa->area->ospf) == NULL) {
  ------------------
  |  Branch (1590:7): [True: 0, False: 0]
  |  Branch (1590:28): [True: 0, False: 0]
  ------------------
 1591|       |			/* Above conditions must have passed. */
 1592|      0|			flog_warn(EC_OSPF_LSA, "%s: Something wrong?",
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 1593|      0|				  __func__);
 1594|      0|			goto out;
 1595|      0|		}
 1596|      0|		break;
 1597|      0|	case OSPF_OPAQUE_AS_LSA:
  ------------------
  |  |   34|      0|#define OSPF_OPAQUE_AS_LSA	     11
  ------------------
  |  Branch (1597:2): [True: 0, False: 0]
  ------------------
 1598|      0|		top = ospf_lookup_by_vrf_id(VRF_DEFAULT);
  ------------------
  |  |  254|      0|#define VRF_DEFAULT 0
  ------------------
 1599|      0|		if (lsa->area != NULL && (top = lsa->area->ospf) == NULL) {
  ------------------
  |  Branch (1599:7): [True: 0, False: 0]
  |  Branch (1599:28): [True: 0, False: 0]
  ------------------
 1600|       |			/* Above conditions must have passed. */
 1601|      0|			flog_warn(EC_OSPF_LSA, "%s: Something wrong?",
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 1602|      0|				  __func__);
 1603|      0|			goto out;
 1604|      0|		}
 1605|      0|		break;
 1606|      0|	default:
  ------------------
  |  Branch (1606:2): [True: 0, False: 0]
  ------------------
 1607|      0|		flog_warn(EC_OSPF_LSA_UNEXPECTED, "%s: Unexpected LSA-type(%u)",
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 1608|      0|			  __func__, lsa->data->type);
 1609|      0|		goto out;
 1610|      0|	}
 1611|       |
 1612|      0|	ospf_refresher_register_lsa(top, lsa);
 1613|      0|	new = lsa;
 1614|       |
 1615|     49|out:
 1616|     49|	return new;
 1617|      0|}
ospf_opaque_self_originated_lsa_received:
 2111|     12|{
 2112|     12|	struct ospf *top;
 2113|       |
 2114|     12|	if ((top = oi_to_top(nbr->oi)) == NULL)
  ------------------
  |  Branch (2114:6): [True: 0, False: 12]
  ------------------
 2115|      0|		return;
 2116|       |
 2117|     12|	if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|     12|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|     12|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|     12|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 12]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2118|      0|		zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 2119|     12|			"LSA[Type%d:%pI4]: processing self-originated Opaque-LSA",
 2120|     12|			lsa->data->type, &lsa->data->id);
 2121|       |
 2122|       |	/*
 2123|       |	 * Install the stale LSA into the Link State Database, add it to the
 2124|       |	 * MaxAge list, and flush it from the OSPF routing domain. For other
 2125|       |	 * LSA types, the installation is done in the refresh function. It is
 2126|       |	 * done inline here since the opaque refresh function is dynamically
 2127|       |	 * registered when opaque LSAs are originated (which is not the case
 2128|       |	 * for stale LSAs).
 2129|       |	 */
 2130|     12|	lsa->data->ls_age = htons(OSPF_LSA_MAXAGE);
 2131|     12|	ospf_lsa_install(
 2132|     12|		top, (lsa->data->type == OSPF_OPAQUE_LINK_LSA) ? nbr->oi : NULL,
  ------------------
  |  |   32|     12|#define OSPF_OPAQUE_LINK_LSA	      9
  ------------------
  |  Branch (2132:8): [True: 1, False: 11]
  ------------------
 2133|     12|		lsa);
 2134|     12|	ospf_lsa_maxage(top, lsa);
 2135|       |
 2136|     12|	switch (lsa->data->type) {
 2137|      1|	case OSPF_OPAQUE_LINK_LSA:
  ------------------
  |  |   32|      1|#define OSPF_OPAQUE_LINK_LSA	      9
  ------------------
  |  Branch (2137:2): [True: 1, False: 11]
  ------------------
 2138|      9|	case OSPF_OPAQUE_AREA_LSA:
  ------------------
  |  |   33|      9|#define OSPF_OPAQUE_AREA_LSA	     10
  ------------------
  |  Branch (2138:2): [True: 8, False: 4]
  ------------------
 2139|      9|		ospf_flood_through_area(nbr->oi->area, NULL /*inbr*/, lsa);
 2140|      9|		break;
 2141|      3|	case OSPF_OPAQUE_AS_LSA:
  ------------------
  |  |   34|      3|#define OSPF_OPAQUE_AS_LSA	     11
  ------------------
  |  Branch (2141:2): [True: 3, False: 9]
  ------------------
 2142|      3|		ospf_flood_through_as(top, NULL /*inbr*/, lsa);
 2143|      3|		break;
 2144|      0|	default:
  ------------------
  |  Branch (2144:2): [True: 0, False: 12]
  ------------------
 2145|      0|		flog_warn(EC_OSPF_LSA_UNEXPECTED, "%s: Unexpected LSA-type(%u)",
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 2146|      0|			  __func__, lsa->data->type);
 2147|      0|		return;
 2148|     12|	}
 2149|     12|}
oi_to_top:
 2156|     12|{
 2157|     12|	struct ospf *top = NULL;
 2158|     12|	struct ospf_area *area;
 2159|       |
 2160|     12|	if (oi == NULL || (area = oi->area) == NULL
  ------------------
  |  Branch (2160:6): [True: 0, False: 12]
  |  Branch (2160:20): [True: 0, False: 12]
  ------------------
 2161|     12|	    || (top = area->ospf) == NULL)
  ------------------
  |  Branch (2161:9): [True: 0, False: 12]
  ------------------
 2162|      0|		flog_warn(EC_OSPF_LSA,
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 2163|     12|			  "Broken relationship for \"OI -> AREA -> OSPF\"?");
 2164|       |
 2165|     12|	return top;
 2166|     12|}
ospf_opaque.c:ospf_opaque_funclist_init:
  290|      1|{
  291|      1|	struct list *funclist;
  292|       |
  293|      1|	funclist = ospf_opaque_wildcard_funclist = list_new();
  294|      1|	funclist->del = ospf_opaque_del_functab;
  295|       |
  296|      1|	funclist = ospf_opaque_type9_funclist = list_new();
  297|      1|	funclist->del = ospf_opaque_del_functab;
  298|       |
  299|      1|	funclist = ospf_opaque_type10_funclist = list_new();
  300|      1|	funclist->del = ospf_opaque_del_functab;
  301|       |
  302|      1|	funclist = ospf_opaque_type11_funclist = list_new();
  303|      1|	funclist->del = ospf_opaque_del_functab;
  304|      1|	return;
  305|      1|}
ospf_opaque.c:ospf_get_opaque_funclist:
  326|     17|{
  327|     17|	struct list *funclist = NULL;
  328|       |
  329|     17|	switch (lsa_type) {
  330|      0|	case OPAQUE_TYPE_WILDCARD:
  ------------------
  |  |   58|      0|#define OPAQUE_TYPE_WILDCARD				0
  ------------------
  |  Branch (330:2): [True: 0, False: 17]
  ------------------
  331|       |		/* XXX
  332|       |		 * This is an ugly trick to handle type-9/10/11 LSA altogether.
  333|       |		 * Yes, "OPAQUE_TYPE_WILDCARD (value 0)" is not an LSA-type, nor
  334|       |		 * an officially assigned opaque-type.
  335|       |		 * Though it is possible that the value might be officially used
  336|       |		 * in the future, we use it internally as a special label, for
  337|       |		 * now.
  338|       |		 */
  339|      0|		funclist = ospf_opaque_wildcard_funclist;
  340|      0|		break;
  341|      1|	case OSPF_OPAQUE_LINK_LSA:
  ------------------
  |  |   32|      1|#define OSPF_OPAQUE_LINK_LSA	      9
  ------------------
  |  Branch (341:2): [True: 1, False: 16]
  ------------------
  342|      1|		funclist = ospf_opaque_type9_funclist;
  343|      1|		break;
  344|     12|	case OSPF_OPAQUE_AREA_LSA:
  ------------------
  |  |   33|     12|#define OSPF_OPAQUE_AREA_LSA	     10
  ------------------
  |  Branch (344:2): [True: 12, False: 5]
  ------------------
  345|     12|		funclist = ospf_opaque_type10_funclist;
  346|     12|		break;
  347|      4|	case OSPF_OPAQUE_AS_LSA:
  ------------------
  |  |   34|      4|#define OSPF_OPAQUE_AS_LSA	     11
  ------------------
  |  Branch (347:2): [True: 4, False: 13]
  ------------------
  348|      4|		funclist = ospf_opaque_type11_funclist;
  349|      4|		break;
  350|      0|	default:
  ------------------
  |  Branch (350:2): [True: 0, False: 17]
  ------------------
  351|      0|		flog_warn(EC_OSPF_LSA_UNEXPECTED, "%s: Unexpected LSA-type(%u)",
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
  352|      0|			  __func__, lsa_type);
  353|      0|		break;
  354|     17|	}
  355|     17|	return funclist;
  356|     17|}
ospf_opaque.c:lookup_opaque_info_by_type:
  628|     12|{
  629|     12|	struct ospf *top;
  630|     12|	struct ospf_area *area;
  631|     12|	struct ospf_interface *oi;
  632|     12|	struct list *listtop = NULL;
  633|     12|	struct listnode *node, *nnode;
  634|     12|	struct opaque_info_per_type *oipt = NULL;
  635|     12|	uint8_t key = GET_OPAQUE_TYPE(ntohl(lsa->data->id.s_addr));
  ------------------
  |  |   30|     12|#define GET_OPAQUE_TYPE(lsid) (((uint32_t)(lsid)&LSID_OPAQUE_TYPE_MASK) >> 24)
  |  |  ------------------
  |  |  |  |   27|     12|#define LSID_OPAQUE_TYPE_MASK	0xff000000	/*  8 bits */
  |  |  ------------------
  ------------------
  636|       |
  637|     12|	switch (lsa->data->type) {
  638|      1|	case OSPF_OPAQUE_LINK_LSA:
  ------------------
  |  |   32|      1|#define OSPF_OPAQUE_LINK_LSA	      9
  ------------------
  |  Branch (638:2): [True: 1, False: 11]
  ------------------
  639|      1|		if ((oi = lsa->oi) != NULL)
  ------------------
  |  Branch (639:7): [True: 1, False: 0]
  ------------------
  640|      1|			listtop = oi->opaque_lsa_self;
  641|      0|		else
  642|      0|			flog_warn(
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
  643|      1|				EC_OSPF_LSA,
  644|      1|				"Type-9 Opaque-LSA: Reference to OI is missing?");
  645|      1|		break;
  646|      8|	case OSPF_OPAQUE_AREA_LSA:
  ------------------
  |  |   33|      8|#define OSPF_OPAQUE_AREA_LSA	     10
  ------------------
  |  Branch (646:2): [True: 8, False: 4]
  ------------------
  647|      8|		if ((area = lsa->area) != NULL)
  ------------------
  |  Branch (647:7): [True: 8, False: 0]
  ------------------
  648|      8|			listtop = area->opaque_lsa_self;
  649|      0|		else
  650|      0|			flog_warn(
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
  651|      8|				EC_OSPF_LSA,
  652|      8|				"Type-10 Opaque-LSA: Reference to AREA is missing?");
  653|      8|		break;
  654|      3|	case OSPF_OPAQUE_AS_LSA:
  ------------------
  |  |   34|      3|#define OSPF_OPAQUE_AS_LSA	     11
  ------------------
  |  Branch (654:2): [True: 3, False: 9]
  ------------------
  655|      3|		top = ospf_lookup_by_vrf_id(VRF_DEFAULT);
  ------------------
  |  |  254|      3|#define VRF_DEFAULT 0
  ------------------
  656|      3|		if ((area = lsa->area) != NULL && (top = area->ospf) == NULL) {
  ------------------
  |  Branch (656:7): [True: 0, False: 3]
  |  Branch (656:37): [True: 0, False: 0]
  ------------------
  657|      0|			flog_warn(
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
  658|      0|				EC_OSPF_LSA,
  659|      0|				"Type-11 Opaque-LSA: Reference to OSPF is missing?");
  660|      0|			break; /* Unlikely to happen. */
  661|      0|		}
  662|      3|		listtop = top->opaque_lsa_self;
  663|      3|		break;
  664|      0|	default:
  ------------------
  |  Branch (664:2): [True: 0, False: 12]
  ------------------
  665|      0|		flog_warn(EC_OSPF_LSA_UNEXPECTED, "%s: Unexpected LSA-type(%u)",
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
  666|      0|			  __func__, lsa->data->type);
  667|      0|		break;
  668|     12|	}
  669|       |
  670|     12|	if (listtop != NULL)
  ------------------
  |  Branch (670:6): [True: 12, False: 0]
  ------------------
  671|     12|		for (ALL_LIST_ELEMENTS(listtop, node, nnode, oipt))
  ------------------
  |  |  320|     12|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|     12|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 12, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  321|     12|	(node) != NULL                                                         \
  |  |  ------------------
  |  |  |  Branch (321:2): [True: 0, False: 12]
  |  |  ------------------
  |  |  322|     12|		&& ((data) = static_cast(data, listgetdata(node)),             \
  |  |  ------------------
  |  |  |  |  204|      0|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  323|      0|		    (nextnode) = node->next, 1);                               \
  |  |  324|     12|	(node) = (nextnode), ((data) = NULL)
  ------------------
  672|      0|			if (oipt->opaque_type == key)
  ------------------
  |  Branch (672:8): [True: 0, False: 0]
  ------------------
  673|      0|				return oipt;
  674|       |
  675|     12|	return NULL;
  676|     12|}
ospf_opaque.c:ospf_opaque_register_vty:
  819|      1|{
  820|      1|	install_element(OSPF_NODE, &capability_opaque_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  821|      1|	install_element(OSPF_NODE, &no_capability_opaque_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  822|      1|	install_element(OSPF_NODE, &ospf_opaque_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  823|      1|	install_element(OSPF_NODE, &no_ospf_opaque_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  824|      1|	return;
  825|      1|}
ospf_opaque.c:opaque_lsa_new_if_callback:
  833|      4|{
  834|      4|	struct listnode *node, *nnode;
  835|      4|	struct ospf_opaque_functab *functab;
  836|      4|	int rc = -1;
  837|       |
  838|      4|	for (ALL_LIST_ELEMENTS(funclist, node, nnode, functab))
  ------------------
  |  |  320|      4|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|      4|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 4, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  321|      9|	(node) != NULL                                                         \
  |  |  ------------------
  |  |  |  Branch (321:2): [True: 5, False: 4]
  |  |  ------------------
  |  |  322|     10|		&& ((data) = static_cast(data, listgetdata(node)),             \
  |  |  ------------------
  |  |  |  |  204|     30|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 5, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 5]
  |  |  |  |  |  Branch (204:28): [True: 5, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 5]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:6): [True: 5, False: 0]
  |  |  ------------------
  |  |  323|     10|		    (nextnode) = node->next, 1);                               \
  |  |  324|      5|	(node) = (nextnode), ((data) = NULL)
  ------------------
  839|      5|		if (functab->new_if_hook != NULL)
  ------------------
  |  Branch (839:7): [True: 2, False: 3]
  ------------------
  840|      2|			if ((*functab->new_if_hook)(ifp) != 0)
  ------------------
  |  Branch (840:8): [True: 0, False: 2]
  ------------------
  841|      0|				goto out;
  842|      4|	rc = 0;
  843|      4|out:
  844|      4|	return rc;
  845|      4|}
ospf_opaque.c:ospf_opaque_functab_lookup:
  443|     12|{
  444|     12|	struct list *funclist;
  445|     12|	struct listnode *node;
  446|     12|	struct ospf_opaque_functab *functab;
  447|     12|	uint8_t key = GET_OPAQUE_TYPE(ntohl(lsa->data->id.s_addr));
  ------------------
  |  |   30|     12|#define GET_OPAQUE_TYPE(lsid) (((uint32_t)(lsid)&LSID_OPAQUE_TYPE_MASK) >> 24)
  |  |  ------------------
  |  |  |  |   27|     12|#define LSID_OPAQUE_TYPE_MASK	0xff000000	/*  8 bits */
  |  |  ------------------
  ------------------
  448|       |
  449|     12|	if ((funclist = ospf_get_opaque_funclist(lsa->data->type)) != NULL)
  ------------------
  |  Branch (449:6): [True: 12, False: 0]
  ------------------
  450|     12|		for (ALL_LIST_ELEMENTS_RO(funclist, node, functab))
  ------------------
  |  |  333|     12|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|     12|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 12, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|     70|	(node) != NULL && ((data) = static_cast(data, listgetdata(node)), 1);  \
  |  |  ------------------
  |  |  |  |  204|    210|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 35, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 35]
  |  |  |  |  |  Branch (204:28): [True: 35, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 35]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (334:2): [True: 35, False: 12]
  |  |  |  Branch (334:20): [True: 35, False: 0]
  |  |  ------------------
  |  |  335|     35|	(node) = listnextnode(node), ((data) = NULL)
  |  |  ------------------
  |  |  |  |   49|     35|#define listnextnode(X) ((X) ? ((X)->next) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:26): [True: 35, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  451|     35|			if (functab->opaque_type == key)
  ------------------
  |  Branch (451:8): [True: 0, False: 35]
  ------------------
  452|      0|				return functab;
  453|       |
  454|     12|	return NULL;
  455|     12|}
ospf_opaque.c:ospf_opaque_lsa_install_hook:
 1231|    818|{
 1232|    818|	struct list *funclist;
 1233|    818|	int rc = -1;
 1234|       |
 1235|       |	/*
 1236|       |	 * Some Opaque-LSA user may want to monitor every LSA installation
 1237|       |	 * into the LSDB, regardless with target LSA type.
 1238|       |	 */
 1239|    818|	funclist = ospf_opaque_wildcard_funclist;
 1240|    818|	if (new_lsa_callback(funclist, lsa) != 0)
  ------------------
  |  Branch (1240:6): [True: 0, False: 818]
  ------------------
 1241|      0|		goto out;
 1242|       |
 1243|    818|	funclist = ospf_opaque_type9_funclist;
 1244|    818|	if (new_lsa_callback(funclist, lsa) != 0)
  ------------------
  |  Branch (1244:6): [True: 0, False: 818]
  ------------------
 1245|      0|		goto out;
 1246|       |
 1247|    818|	funclist = ospf_opaque_type10_funclist;
 1248|    818|	if (new_lsa_callback(funclist, lsa) != 0)
  ------------------
  |  Branch (1248:6): [True: 0, False: 818]
  ------------------
 1249|      0|		goto out;
 1250|       |
 1251|    818|	funclist = ospf_opaque_type11_funclist;
 1252|    818|	if (new_lsa_callback(funclist, lsa) != 0)
  ------------------
  |  Branch (1252:6): [True: 0, False: 818]
  ------------------
 1253|      0|		goto out;
 1254|       |
 1255|    818|	rc = 0;
 1256|    818|out:
 1257|    818|	return rc;
 1258|    818|}
ospf_opaque.c:new_lsa_callback:
  944|  3.27k|{
  945|  3.27k|	struct listnode *node, *nnode;
  946|  3.27k|	struct ospf_opaque_functab *functab;
  947|  3.27k|	int rc = -1;
  948|       |
  949|       |	/* This function handles ALL types of LSAs, not only opaque ones. */
  950|  3.27k|	for (ALL_LIST_ELEMENTS(funclist, node, nnode, functab))
  ------------------
  |  |  320|  3.27k|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|  3.27k|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 3.27k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  321|  7.36k|	(node) != NULL                                                         \
  |  |  ------------------
  |  |  |  Branch (321:2): [True: 4.09k, False: 3.27k]
  |  |  ------------------
  |  |  322|  8.18k|		&& ((data) = static_cast(data, listgetdata(node)),             \
  |  |  ------------------
  |  |  |  |  204|  24.5k|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 4.09k, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 4.09k]
  |  |  |  |  |  Branch (204:28): [True: 4.09k, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 4.09k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:6): [True: 4.09k, False: 0]
  |  |  ------------------
  |  |  323|  8.18k|		    (nextnode) = node->next, 1);                               \
  |  |  324|  4.09k|	(node) = (nextnode), ((data) = NULL)
  ------------------
  951|  4.09k|		if (functab->new_lsa_hook != NULL)
  ------------------
  |  Branch (951:7): [True: 2.45k, False: 1.63k]
  ------------------
  952|  2.45k|			if ((*functab->new_lsa_hook)(lsa) != 0)
  ------------------
  |  Branch (952:8): [True: 0, False: 2.45k]
  ------------------
  953|      0|				goto out;
  954|  3.27k|	rc = 0;
  955|  3.27k|out:
  956|  3.27k|	return rc;
  957|  3.27k|}
ospf_opaque.c:register_opaque_lsa:
  723|     12|{
  724|     12|	struct ospf_opaque_functab *functab;
  725|     12|	struct opaque_info_per_type *oipt;
  726|     12|	struct opaque_info_per_id *oipi = NULL;
  727|       |
  728|     12|	if ((functab = ospf_opaque_functab_lookup(new)) == NULL)
  ------------------
  |  Branch (728:6): [True: 12, False: 0]
  ------------------
  729|     12|		goto out;
  730|       |
  731|      0|	if ((oipt = lookup_opaque_info_by_type(new)) == NULL
  ------------------
  |  Branch (731:6): [True: 0, False: 0]
  ------------------
  732|      0|	    && (oipt = register_opaque_info_per_type(functab, new)) == NULL)
  ------------------
  |  Branch (732:9): [True: 0, False: 0]
  ------------------
  733|      0|		goto out;
  734|       |
  735|      0|	if ((oipi = register_opaque_info_per_id(oipt, new)) == NULL)
  ------------------
  |  Branch (735:6): [True: 0, False: 0]
  ------------------
  736|      0|		goto out;
  737|       |
  738|     12|out:
  739|     12|	return oipi;
  740|      0|}

ospf_packet_free:
  134|     16|{
  135|     16|	if (op->s)
  ------------------
  |  Branch (135:6): [True: 16, False: 0]
  ------------------
  136|     16|		stream_free(op->s);
  137|       |
  138|       |	XFREE(MTYPE_OSPF_PACKET, op);
  ------------------
  |  |  170|     16|	do {                                                                   \
  |  |  171|     16|		qfree(mtype, ptr);                                             \
  |  |  172|     16|		ptr = NULL;                                                    \
  |  |  173|     16|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 16]
  |  |  ------------------
  ------------------
  139|     16|}
ospf_fifo_new:
  142|      1|{
  143|      1|	struct ospf_fifo *new;
  144|       |
  145|      1|	new = XCALLOC(MTYPE_OSPF_FIFO, sizeof(struct ospf_fifo));
  ------------------
  |  |  165|      1|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  146|      1|	return new;
  147|      1|}
ospf_fifo_push:
  151|    172|{
  152|    172|	if (fifo->tail)
  ------------------
  |  Branch (152:6): [True: 171, False: 1]
  ------------------
  153|    171|		fifo->tail->next = op;
  154|      1|	else
  155|      1|		fifo->head = op;
  156|       |
  157|    172|	fifo->tail = op;
  158|       |
  159|    172|	fifo->count++;
  160|    172|}
ospf_read_helper:
 2972|  2.95k|{
 2973|  2.95k|	int ret;
 2974|  2.95k|	struct stream *ibuf;
 2975|  2.95k|	struct ospf_interface *oi;
 2976|  2.95k|	struct ip *iph;
 2977|  2.95k|	struct ospf_header *ospfh;
 2978|  2.95k|	uint16_t length;
 2979|  2.95k|	struct connected *c;
 2980|  2.95k|	struct interface *ifp = NULL;
 2981|       |
 2982|       |#ifndef FUZZING
 2983|       |	stream_reset(ospf->ibuf);
 2984|       |	ibuf = ospf_recv_packet(ospf, ospf->fd, &ifp, ospf->ibuf);
 2985|       |#else
 2986|  2.95k|	ibuf = ospf->ibuf;
 2987|  2.95k|	ifp = ospf->fuzzing_packet_ifp;
 2988|  2.95k|#endif
 2989|  2.95k|	if (ibuf == NULL)
  ------------------
  |  Branch (2989:6): [True: 0, False: 2.95k]
  ------------------
 2990|      0|		return OSPF_READ_ERROR;
 2991|       |
 2992|       |	/*
 2993|       |	 * This raw packet is known to be at least as big as its
 2994|       |	 * IP header. Note that there should not be alignment problems with
 2995|       |	 * this assignment because this is at the beginning of the
 2996|       |	 * stream data buffer.
 2997|       |	 */
 2998|  2.95k|	iph = (struct ip *)STREAM_DATA(ibuf);
  ------------------
  |  |  126|  2.95k|#define STREAM_DATA(S)  ((S)->data)
  ------------------
 2999|       |	/*
 3000|       |	 * Note that sockopt_iphdrincl_swab_systoh was called in
 3001|       |	 * ospf_recv_packet.
 3002|       |	 */
 3003|  2.95k|	if (ifp == NULL) {
  ------------------
  |  Branch (3003:6): [True: 0, False: 2.95k]
  ------------------
 3004|       |		/*
 3005|       |		 * Handle cases where the platform does not support
 3006|       |		 * retrieving the ifindex, and also platforms (such as
 3007|       |		 * Solaris 8) that claim to support ifindex retrieval but do
 3008|       |		 * not.
 3009|       |		 */
 3010|      0|		c = if_lookup_address((void *)&iph->ip_src, AF_INET,
 3011|      0|				      ospf->vrf_id);
 3012|      0|		if (c)
  ------------------
  |  Branch (3012:7): [True: 0, False: 0]
  ------------------
 3013|      0|			ifp = c->ifp;
 3014|      0|		if (ifp == NULL) {
  ------------------
  |  Branch (3014:7): [True: 0, False: 0]
  ------------------
 3015|      0|			if (IS_DEBUG_OSPF_PACKET(0, RECV))
  ------------------
  |  |   90|      0|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   19|      0|#define OSPF_DEBUG_RECV		0x02
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3016|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 3017|      0|					"%s: Unable to determine incoming interface from: %pI4(%s)",
 3018|      0|					__func__, &iph->ip_src,
 3019|      0|					ospf_get_name(ospf));
 3020|      0|			return OSPF_READ_CONTINUE;
 3021|      0|		}
 3022|      0|	}
 3023|       |
 3024|  2.95k|	if (ospf->vrf_id == VRF_DEFAULT && ospf->vrf_id != ifp->vrf->vrf_id) {
  ------------------
  |  |  254|  5.91k|#define VRF_DEFAULT 0
  ------------------
  |  Branch (3024:6): [True: 2.95k, False: 0]
  |  Branch (3024:37): [True: 0, False: 2.95k]
  ------------------
 3025|       |		/*
 3026|       |		 * We may have a situation where l3mdev_accept == 1
 3027|       |		 * let's just kindly drop the packet and move on.
 3028|       |		 * ospf really really really does not like when
 3029|       |		 * we receive the same packet multiple times.
 3030|       |		 */
 3031|      0|		return OSPF_READ_CONTINUE;
 3032|      0|	}
 3033|       |
 3034|       |	/* Self-originated packet should be discarded silently. */
 3035|  2.95k|	if (ospf_if_lookup_by_local_addr(ospf, NULL, iph->ip_src)) {
  ------------------
  |  Branch (3035:6): [True: 1, False: 2.95k]
  ------------------
 3036|      1|		if (IS_DEBUG_OSPF_PACKET(0, RECV)) {
  ------------------
  |  |   90|      1|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   19|      1|#define OSPF_DEBUG_RECV		0x02
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 1]
  |  |  ------------------
  ------------------
 3037|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 3038|      0|				"ospf_read[%pI4]: Dropping self-originated packet",
 3039|      0|				&iph->ip_src);
 3040|      0|		}
 3041|      1|		return OSPF_READ_CONTINUE;
 3042|      1|	}
 3043|       |
 3044|       |	/* Check that we have enough for an IP header */
 3045|  2.95k|	if ((unsigned int)(iph->ip_hl << 2) >= STREAM_READABLE(ibuf)) {
  ------------------
  |  |  121|  2.95k|#define STREAM_READABLE(S) ((S)->endp - (S)->getp)
  ------------------
  |  Branch (3045:6): [True: 22, False: 2.93k]
  ------------------
 3046|     22|		if ((unsigned int)(iph->ip_hl << 2) == STREAM_READABLE(ibuf)) {
  ------------------
  |  |  121|     22|#define STREAM_READABLE(S) ((S)->endp - (S)->getp)
  ------------------
  |  Branch (3046:7): [True: 2, False: 20]
  ------------------
 3047|      2|			flog_warn(
  ------------------
  |  |  137|      2|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 3048|      2|				EC_OSPF_PACKET,
 3049|      2|				"Rx'd IP packet with OSPF protocol number but no payload");
 3050|     20|		} else {
 3051|     20|			flog_warn(
  ------------------
  |  |  137|     20|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 3052|     20|				EC_OSPF_PACKET,
 3053|     20|				"IP header length field claims header is %u bytes, but we only have %zu",
 3054|     20|				(unsigned int)(iph->ip_hl << 2),
 3055|     20|				STREAM_READABLE(ibuf));
 3056|     20|		}
 3057|       |
 3058|     22|		return OSPF_READ_ERROR;
 3059|     22|	}
 3060|  2.93k|	stream_forward_getp(ibuf, iph->ip_hl << 2);
 3061|       |
 3062|  2.93k|	ospfh = (struct ospf_header *)stream_pnt(ibuf);
 3063|  2.93k|	if (MSG_OK
  ------------------
  |  |   34|  2.93k|#define MSG_OK    0
  ------------------
  |  Branch (3063:6): [True: 383, False: 2.55k]
  ------------------
 3064|  2.93k|	    != ospf_packet_examin(ospfh, stream_get_endp(ibuf)
 3065|  2.93k|						 - stream_get_getp(ibuf)))
 3066|    383|		return OSPF_READ_CONTINUE;
 3067|       |	/* Now it is safe to access all fields of OSPF packet header. */
 3068|       |
 3069|       |	/* associate packet with ospf interface */
 3070|  2.55k|	oi = ospf_if_lookup_recv_if(ospf, iph->ip_src, ifp);
 3071|       |
 3072|       |	/*
 3073|       |	 * ospf_verify_header() relies on a valid "oi" and thus can be called
 3074|       |	 * only after the passive/backbone/other checks below are passed.
 3075|       |	 * These checks in turn access the fields of unverified "ospfh"
 3076|       |	 * structure for their own purposes and must remain very accurate
 3077|       |	 * in doing this.
 3078|       |	 */
 3079|       |
 3080|       |	/* If incoming interface is passive one, ignore it. */
 3081|  2.55k|	if (oi && OSPF_IF_PASSIVE_STATUS(oi) == OSPF_IF_PASSIVE) {
  ------------------
  |  |   64|  2.47k|	(OSPF_IF_PARAM_CONFIGURED((O)->params, passive_interface)              \
  |  |  ------------------
  |  |  |  |   22|  2.47k|#define OSPF_IF_PARAM_CONFIGURED(S, P) ((S) && (S)->P##__config)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (22:41): [True: 0, False: 2.47k]
  |  |  |  |  |  Branch (22:48): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   65|  2.47k|		 ? (O)->params->passive_interface                              \
  |  |   66|  2.47k|		 : (OSPF_IF_PARAM_CONFIGURED(IF_DEF_PARAMS((O)->ifp),          \
  |  |  ------------------
  |  |  |  |   22|  2.47k|#define OSPF_IF_PARAM_CONFIGURED(S, P) ((S) && (S)->P##__config)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (22:41): [True: 2.47k, False: 0]
  |  |  |  |  |  Branch (22:48): [True: 0, False: 2.47k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   67|  2.47k|					     passive_interface)                \
  |  |   68|  2.47k|			    ? IF_DEF_PARAMS((O)->ifp)->passive_interface       \
  |  |  ------------------
  |  |  |  |   17|      0|#define IF_DEF_PARAMS(I) (IF_OSPF_IF_INFO (I)->def_params)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   69|  2.47k|			    : (O)->ospf->passive_interface_default))
  ------------------
              	if (oi && OSPF_IF_PASSIVE_STATUS(oi) == OSPF_IF_PASSIVE) {
  ------------------
  |  |   61|  2.47k|#define OSPF_IF_PASSIVE		        1
  ------------------
  |  Branch (3081:6): [True: 2.47k, False: 79]
  |  Branch (3081:12): [True: 0, False: 2.47k]
  ------------------
 3082|      0|		if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|      0|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|      0|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3083|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 3084|      0|				"ignoring packet from router %pI4 sent to %pI4, received on a passive interface, %pI4",
 3085|      0|				&ospfh->router_id, &iph->ip_dst,
 3086|      0|				&oi->address->u.prefix4);
 3087|       |
 3088|      0|		if (iph->ip_dst.s_addr == htonl(OSPF_ALLSPFROUTERS)) {
  ------------------
  |  Branch (3088:7): [True: 0, False: 0]
  ------------------
 3089|       |			/* Try to fix multicast membership.
 3090|       |			 * Some OS:es may have problems in this area,
 3091|       |			 * make sure it is removed.
 3092|       |			 */
 3093|      0|			OI_MEMBER_JOINED(oi, MEMBER_ALLROUTERS);
  ------------------
  |  |  196|      0|	do {                                                                   \
  |  |  197|      0|		SET_FLAG((O)->multicast_memberships, OI_MEMBER_FLAG(M));       \
  |  |  ------------------
  |  |  |  |  395|      0|#define SET_FLAG(V,F)        (V) |= (F)
  |  |  ------------------
  |  |  198|      0|		IF_OSPF_IF_INFO((O)->ifp)->membership_counts[(M)]++;           \
  |  |  ------------------
  |  |  |  |   16|      0|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  ------------------
  |  |  199|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (199:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3094|      0|			ospf_if_set_multicast(oi);
 3095|      0|		}
 3096|      0|		return OSPF_READ_CONTINUE;
 3097|      0|	}
 3098|       |
 3099|       |
 3100|       |	/* if no local ospf_interface,
 3101|       |	 * or header area is backbone but ospf_interface is not
 3102|       |	 * check for VLINK interface
 3103|       |	 */
 3104|  2.55k|	if ((oi == NULL)
  ------------------
  |  Branch (3104:6): [True: 79, False: 2.47k]
  ------------------
 3105|  2.47k|	    || (OSPF_IS_AREA_ID_BACKBONE(ospfh->area_id)
  ------------------
  |  |  678|  4.94k|#define OSPF_IS_AREA_ID_BACKBONE(I) ((I).s_addr == OSPF_AREA_BACKBONE)
  |  |  ------------------
  |  |  |  |   73|  2.47k|#define OSPF_AREA_BACKBONE              0x00000000      /* 0.0.0.0 */
  |  |  ------------------
  |  |  |  Branch (678:37): [True: 2.35k, False: 112]
  |  |  ------------------
  ------------------
 3106|  2.35k|		&& !OSPF_IS_AREA_ID_BACKBONE(oi->area->area_id))) {
  ------------------
  |  |  678|  2.35k|#define OSPF_IS_AREA_ID_BACKBONE(I) ((I).s_addr == OSPF_AREA_BACKBONE)
  |  |  ------------------
  |  |  |  |   73|  2.35k|#define OSPF_AREA_BACKBONE              0x00000000      /* 0.0.0.0 */
  |  |  ------------------
  ------------------
  |  Branch (3106:6): [True: 0, False: 2.35k]
  ------------------
 3107|     79|		if ((oi = ospf_associate_packet_vl(ospf, ifp, iph, ospfh))
  ------------------
  |  Branch (3107:7): [True: 79, False: 0]
  ------------------
 3108|     79|		    == NULL) {
 3109|     79|			if (!ospf->instance && IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|     79|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|     79|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|     79|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 79]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3109:8): [True: 79, False: 0]
  ------------------
 3110|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 3111|     79|					"Packet from [%pI4] received on link %s but no ospf_interface",
 3112|     79|					&iph->ip_src, ifp->name);
 3113|     79|			return OSPF_READ_CONTINUE;
 3114|     79|		}
 3115|     79|	}
 3116|       |
 3117|       |	/*
 3118|       |	 * else it must be a local ospf interface, check it was
 3119|       |	 * received on correct link
 3120|       |	 */
 3121|  2.47k|	else if (oi->ifp != ifp) {
  ------------------
  |  Branch (3121:11): [True: 0, False: 2.47k]
  ------------------
 3122|      0|		if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|      0|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|      0|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3123|      0|			flog_warn(EC_OSPF_PACKET,
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 3124|      0|				  "Packet from [%pI4] received on wrong link %s",
 3125|      0|				  &iph->ip_src, ifp->name);
 3126|      0|		return OSPF_READ_CONTINUE;
 3127|  2.47k|	} else if (oi->state == ISM_Down) {
  ------------------
  |  |   15|  2.47k|#define ISM_Down                          1
  ------------------
  |  Branch (3127:13): [True: 0, False: 2.47k]
  ------------------
 3128|      0|		flog_warn(
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 3129|      0|			EC_OSPF_PACKET,
 3130|      0|			"Ignoring packet from %pI4 to %pI4 received on interface that is down [%s]; interface flags are %s",
 3131|      0|			&iph->ip_src, &iph->ip_dst, ifp->name,
 3132|      0|			if_flag_dump(ifp->flags));
 3133|       |		/* Fix multicast memberships? */
 3134|      0|		if (iph->ip_dst.s_addr == htonl(OSPF_ALLSPFROUTERS))
  ------------------
  |  Branch (3134:7): [True: 0, False: 0]
  ------------------
 3135|      0|			OI_MEMBER_JOINED(oi, MEMBER_ALLROUTERS);
  ------------------
  |  |  196|      0|	do {                                                                   \
  |  |  197|      0|		SET_FLAG((O)->multicast_memberships, OI_MEMBER_FLAG(M));       \
  |  |  ------------------
  |  |  |  |  395|      0|#define SET_FLAG(V,F)        (V) |= (F)
  |  |  ------------------
  |  |  198|      0|		IF_OSPF_IF_INFO((O)->ifp)->membership_counts[(M)]++;           \
  |  |  ------------------
  |  |  |  |   16|      0|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  ------------------
  |  |  199|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (199:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3136|      0|		else if (iph->ip_dst.s_addr == htonl(OSPF_ALLDROUTERS))
  ------------------
  |  Branch (3136:12): [True: 0, False: 0]
  ------------------
 3137|      0|			OI_MEMBER_JOINED(oi, MEMBER_DROUTERS);
  ------------------
  |  |  196|      0|	do {                                                                   \
  |  |  197|      0|		SET_FLAG((O)->multicast_memberships, OI_MEMBER_FLAG(M));       \
  |  |  ------------------
  |  |  |  |  395|      0|#define SET_FLAG(V,F)        (V) |= (F)
  |  |  ------------------
  |  |  198|      0|		IF_OSPF_IF_INFO((O)->ifp)->membership_counts[(M)]++;           \
  |  |  ------------------
  |  |  |  |   16|      0|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  ------------------
  |  |  199|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (199:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3138|      0|		if (oi->multicast_memberships)
  ------------------
  |  Branch (3138:7): [True: 0, False: 0]
  ------------------
 3139|      0|			ospf_if_set_multicast(oi);
 3140|      0|		return OSPF_READ_CONTINUE;
 3141|      0|	}
 3142|       |
 3143|       |	/*
 3144|       |	 * If the received packet is destined for AllDRouters, the
 3145|       |	 * packet should be accepted only if the received ospf
 3146|       |	 * interface state is either DR or Backup -- endo.
 3147|       |	 *
 3148|       |	 * I wonder who endo is?
 3149|       |	 */
 3150|  2.47k|	if (iph->ip_dst.s_addr == htonl(OSPF_ALLDROUTERS)
  ------------------
  |  Branch (3150:6): [True: 1, False: 2.47k]
  ------------------
 3151|      1|	    && (oi->state != ISM_DR && oi->state != ISM_Backup)) {
  ------------------
  |  |   21|      2|#define ISM_DR                            7
  ------------------
              	    && (oi->state != ISM_DR && oi->state != ISM_Backup)) {
  ------------------
  |  |   20|      0|#define ISM_Backup                        6
  ------------------
  |  Branch (3151:10): [True: 0, False: 1]
  |  Branch (3151:33): [True: 0, False: 0]
  ------------------
 3152|      0|		flog_warn(
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 3153|      0|			EC_OSPF_PACKET,
 3154|      0|			"Dropping packet for AllDRouters from [%pI4] via [%s] (ISM: %s)",
 3155|      0|			&iph->ip_src, IF_NAME(oi),
 3156|      0|			lookup_msg(ospf_ism_state_msg, oi->state, NULL));
 3157|       |		/* Try to fix multicast membership. */
 3158|      0|		SET_FLAG(oi->multicast_memberships, MEMBER_DROUTERS);
  ------------------
  |  |  395|      0|#define SET_FLAG(V,F)        (V) |= (F)
  ------------------
 3159|      0|		ospf_if_set_multicast(oi);
 3160|      0|		return OSPF_READ_CONTINUE;
 3161|      0|	}
 3162|       |
 3163|       |	/* Verify more OSPF header fields. */
 3164|  2.47k|	ret = ospf_verify_header(ibuf, oi, iph, ospfh);
 3165|  2.47k|	if (ret < 0) {
  ------------------
  |  Branch (3165:6): [True: 116, False: 2.35k]
  ------------------
 3166|    116|		if (IS_DEBUG_OSPF_PACKET(0, RECV))
  ------------------
  |  |   90|    116|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   19|    116|#define OSPF_DEBUG_RECV		0x02
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 116]
  |  |  ------------------
  ------------------
 3167|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 3168|    116|				"ospf_read[%pI4]: Header check failed, dropping.",
 3169|    116|				&iph->ip_src);
 3170|    116|		return OSPF_READ_CONTINUE;
 3171|    116|	}
 3172|       |
 3173|       |	/* Show debug receiving packet. */
 3174|  2.35k|	if (IS_DEBUG_OSPF_PACKET(ospfh->type - 1, RECV)) {
  ------------------
  |  |   90|  2.35k|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   19|  2.35k|#define OSPF_DEBUG_RECV		0x02
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 2.35k]
  |  |  ------------------
  ------------------
 3175|      0|		if (IS_DEBUG_OSPF_PACKET(ospfh->type - 1, DETAIL)) {
  ------------------
  |  |   90|      0|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   21|      0|#define OSPF_DEBUG_DETAIL	0x04
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3176|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 3177|      0|				"-----------------------------------------------------");
 3178|      0|			ospf_packet_dump(ibuf);
 3179|      0|		}
 3180|       |
 3181|      0|		zlog_debug("%s received from [%pI4] via [%s]",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 3182|      0|			   lookup_msg(ospf_packet_type_str, ospfh->type, NULL),
 3183|      0|			   &ospfh->router_id, IF_NAME(oi));
 3184|      0|		zlog_debug(" src [%pI4],", &iph->ip_src);
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 3185|      0|		zlog_debug(" dst [%pI4]", &iph->ip_dst);
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 3186|       |
 3187|      0|		if (IS_DEBUG_OSPF_PACKET(ospfh->type - 1, DETAIL))
  ------------------
  |  |   90|      0|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   21|      0|#define OSPF_DEBUG_DETAIL	0x04
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3188|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 3189|      0|				"-----------------------------------------------------");
 3190|      0|	}
 3191|       |
 3192|  2.35k|	stream_forward_getp(ibuf, OSPF_HEADER_SIZE);
  ------------------
  |  |   10|  2.35k|#define OSPF_HEADER_SIZE         24U
  ------------------
 3193|       |
 3194|       |	/* Adjust size to message length. */
 3195|  2.35k|	length = ntohs(ospfh->length) - OSPF_HEADER_SIZE;
  ------------------
  |  |   10|  2.35k|#define OSPF_HEADER_SIZE         24U
  ------------------
 3196|       |
 3197|  2.35k|#ifdef FUZZING
 3198|       |	/*
 3199|       |	 * Everything except hellos returns early with no neighbor found, so we
 3200|       |	 * need to make a neighbor
 3201|       |	 */
 3202|  2.35k|	struct prefix p;
 3203|  2.35k|	p.family = AF_INET;
 3204|  2.35k|	p.prefixlen = 24;
 3205|  2.35k|	p.u.prefix4 = iph->ip_src;
 3206|       |
 3207|  2.35k|	struct ospf_neighbor *n = ospf_nbr_get(oi, ospfh, iph, &p);
 3208|  2.35k|	n->state = NSM_Exchange;
  ------------------
  |  |   21|  2.35k|#define NSM_Exchange		7
  ------------------
 3209|  2.35k|#endif
 3210|       |
 3211|       |	/* Read rest of the packet and call each sort of packet routine.
 3212|       |	 */
 3213|  2.35k|	switch (ospfh->type) {
 3214|    249|	case OSPF_MSG_HELLO:
  ------------------
  |  |   21|    249|#define OSPF_MSG_HELLO 1   /* OSPF Hello Message. */
  ------------------
  |  Branch (3214:2): [True: 249, False: 2.10k]
  ------------------
 3215|    249|		ospf_hello(iph, ospfh, ibuf, oi, length);
 3216|    249|		break;
 3217|    291|	case OSPF_MSG_DB_DESC:
  ------------------
  |  |   22|    291|#define OSPF_MSG_DB_DESC 2 /* OSPF Database Description Message. */
  ------------------
  |  Branch (3217:2): [True: 291, False: 2.06k]
  ------------------
 3218|    291|		ospf_db_desc(iph, ospfh, ibuf, oi, length);
 3219|    291|		break;
 3220|    275|	case OSPF_MSG_LS_REQ:
  ------------------
  |  |   23|    275|#define OSPF_MSG_LS_REQ 3  /* OSPF Link State Request Message. */
  ------------------
  |  Branch (3220:2): [True: 275, False: 2.08k]
  ------------------
 3221|    275|		ospf_ls_req(iph, ospfh, ibuf, oi, length);
 3222|    275|		break;
 3223|  1.49k|	case OSPF_MSG_LS_UPD:
  ------------------
  |  |   24|  1.49k|#define OSPF_MSG_LS_UPD 4  /* OSPF Link State Update Message. */
  ------------------
  |  Branch (3223:2): [True: 1.49k, False: 864]
  ------------------
 3224|  1.49k|		ospf_ls_upd(ospf, iph, ospfh, ibuf, oi, length);
 3225|  1.49k|		break;
 3226|     49|	case OSPF_MSG_LS_ACK:
  ------------------
  |  |   25|     49|#define OSPF_MSG_LS_ACK 5  /* OSPF Link State Acknowledgement Message. */
  ------------------
  |  Branch (3226:2): [True: 49, False: 2.30k]
  ------------------
 3227|     49|		ospf_ls_ack(iph, ospfh, ibuf, oi, length);
 3228|     49|		break;
 3229|      0|	default:
  ------------------
  |  Branch (3229:2): [True: 0, False: 2.35k]
  ------------------
 3230|      0|		flog_warn(
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 3231|      0|			EC_OSPF_PACKET,
 3232|      0|			"interface %s(%s): OSPF packet header type %d is illegal",
 3233|      0|			IF_NAME(oi), ospf_get_name(ospf), ospfh->type);
 3234|      0|		break;
 3235|  2.35k|	}
 3236|       |
 3237|  2.35k|	return OSPF_READ_CONTINUE;
 3238|  2.35k|}
ospf_db_desc_send:
 3869|     90|{
 3870|     90|	struct ospf_interface *oi;
 3871|     90|	struct ospf_packet *op;
 3872|     90|	uint16_t length = OSPF_HEADER_SIZE;
  ------------------
  |  |   10|     90|#define OSPF_HEADER_SIZE         24U
  ------------------
 3873|       |
 3874|     90|	oi = nbr->oi;
 3875|     90|	op = ospf_packet_new(oi->ifp->mtu);
 3876|       |
 3877|       |	/* Prepare OSPF common header. */
 3878|     90|	ospf_make_header(OSPF_MSG_DB_DESC, oi, op->s);
  ------------------
  |  |   22|     90|#define OSPF_MSG_DB_DESC 2 /* OSPF Database Description Message. */
  ------------------
 3879|       |
 3880|       |	/* Prepare OSPF Database Description body. */
 3881|     90|	length += ospf_make_db_desc(oi, nbr, op->s);
 3882|       |
 3883|       |	/* Fill OSPF header. */
 3884|     90|	ospf_fill_header(oi, op->s, length);
 3885|       |
 3886|       |	/* Set packet length. */
 3887|     90|	op->length = length;
 3888|       |
 3889|       |	/* Decide destination address. */
 3890|     90|	if (oi->type == OSPF_IFTYPE_POINTOPOINT)
  ------------------
  |  |   44|     90|#define OSPF_IFTYPE_POINTOPOINT		1
  ------------------
  |  Branch (3890:6): [True: 0, False: 90]
  ------------------
 3891|      0|		op->dst.s_addr = htonl(OSPF_ALLSPFROUTERS);
 3892|     90|	else
 3893|     90|		op->dst = nbr->address.u.prefix4;
 3894|       |
 3895|       |	/* Add packet to the interface output queue. */
 3896|     90|	ospf_packet_add(oi, op);
 3897|       |
 3898|       |	/* Hook thread to write packet. */
 3899|     90|	OSPF_ISM_WRITE_ON(oi->ospf);
  ------------------
  |  |   36|     90|	do {                                                                   \
  |  |   37|     90|		if (oi->on_write_q == 0) {                                     \
  |  |  ------------------
  |  |  |  Branch (37:7): [True: 1, False: 89]
  |  |  ------------------
  |  |   38|      1|			listnode_add((O)->oi_write_q, oi);                     \
  |  |   39|      1|			oi->on_write_q = 1;                                    \
  |  |   40|      1|		}                                                              \
  |  |   41|     90|		if (!list_isempty((O)->oi_write_q))                            \
  |  |  ------------------
  |  |  |  |   56|     90|#define list_isempty(X) ((X)->head == NULL && (X)->tail == NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (56:26): [True: 0, False: 90]
  |  |  |  |  |  Branch (56:47): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   42|     90|			event_add_write(master, ospf_write, (O), (O)->fd,      \
  |  |  ------------------
  |  |  |  |  215|     90|#define event_add_write(m, f, a, v, t) 0
  |  |  ------------------
  |  |   43|     90|					&(O)->t_write);                        \
  |  |   44|     90|	} while (0)
  |  |  ------------------
  |  |  |  Branch (44:11): [Folded, False: 90]
  |  |  ------------------
  ------------------
 3900|       |
 3901|       |	/* Remove old DD packet, then copy new one and keep in neighbor
 3902|       |	 * structure. */
 3903|     90|	if (nbr->last_send)
  ------------------
  |  Branch (3903:6): [True: 4, False: 86]
  ------------------
 3904|      4|		ospf_packet_free(nbr->last_send);
 3905|     90|	nbr->last_send = ospf_packet_dup(op);
 3906|     90|	monotime(&nbr->last_send_ts);
 3907|     90|	if (CHECK_FLAG(oi->ospf->config, OSPF_LOG_ADJACENCY_DETAIL))
  ------------------
  |  |  394|     90|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 0, False: 90]
  |  |  ------------------
  ------------------
 3908|      0|		zlog_info(
  ------------------
  |  |  132|      0|#define zlog_info(...) 0
  ------------------
 3909|     90|			"%s:Packet[DD]: %pI4 DB Desc send with seqnum:%x , flags:%x",
 3910|     90|			ospf_get_name(oi->ospf), &nbr->router_id,
 3911|     90|			nbr->dd_seqnum, nbr->dd_flags);
 3912|     90|}
ospf_ls_req_send:
 3935|     94|{
 3936|     94|	struct ospf_interface *oi;
 3937|     94|	struct ospf_packet *op;
 3938|     94|	uint16_t length = OSPF_HEADER_SIZE;
  ------------------
  |  |   10|     94|#define OSPF_HEADER_SIZE         24U
  ------------------
 3939|       |
 3940|     94|	oi = nbr->oi;
 3941|     94|	op = ospf_packet_new(oi->ifp->mtu);
 3942|       |
 3943|       |	/* Prepare OSPF common header. */
 3944|     94|	ospf_make_header(OSPF_MSG_LS_REQ, oi, op->s);
  ------------------
  |  |   23|     94|#define OSPF_MSG_LS_REQ 3  /* OSPF Link State Request Message. */
  ------------------
 3945|       |
 3946|       |	/* Prepare OSPF Link State Request body. */
 3947|     94|	length += ospf_make_ls_req(nbr, op->s);
 3948|     94|	if (length == OSPF_HEADER_SIZE) {
  ------------------
  |  |   10|     94|#define OSPF_HEADER_SIZE         24U
  ------------------
  |  Branch (3948:6): [True: 12, False: 82]
  ------------------
 3949|     12|		ospf_packet_free(op);
 3950|     12|		return;
 3951|     12|	}
 3952|       |
 3953|       |	/* Fill OSPF header. */
 3954|     82|	ospf_fill_header(oi, op->s, length);
 3955|       |
 3956|       |	/* Set packet length. */
 3957|     82|	op->length = length;
 3958|       |
 3959|       |	/* Decide destination address. */
 3960|     82|	if (oi->type == OSPF_IFTYPE_POINTOPOINT)
  ------------------
  |  |   44|     82|#define OSPF_IFTYPE_POINTOPOINT		1
  ------------------
  |  Branch (3960:6): [True: 0, False: 82]
  ------------------
 3961|      0|		op->dst.s_addr = htonl(OSPF_ALLSPFROUTERS);
 3962|     82|	else
 3963|     82|		op->dst = nbr->address.u.prefix4;
 3964|       |
 3965|       |	/* Add packet to the interface output queue. */
 3966|     82|	ospf_packet_add(oi, op);
 3967|       |
 3968|       |	/* Hook thread to write packet. */
 3969|     82|	OSPF_ISM_WRITE_ON(oi->ospf);
  ------------------
  |  |   36|     82|	do {                                                                   \
  |  |   37|     82|		if (oi->on_write_q == 0) {                                     \
  |  |  ------------------
  |  |  |  Branch (37:7): [True: 0, False: 82]
  |  |  ------------------
  |  |   38|      0|			listnode_add((O)->oi_write_q, oi);                     \
  |  |   39|      0|			oi->on_write_q = 1;                                    \
  |  |   40|      0|		}                                                              \
  |  |   41|     82|		if (!list_isempty((O)->oi_write_q))                            \
  |  |  ------------------
  |  |  |  |   56|     82|#define list_isempty(X) ((X)->head == NULL && (X)->tail == NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (56:26): [True: 0, False: 82]
  |  |  |  |  |  Branch (56:47): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   42|     82|			event_add_write(master, ospf_write, (O), (O)->fd,      \
  |  |  ------------------
  |  |  |  |  215|     82|#define event_add_write(m, f, a, v, t) 0
  |  |  ------------------
  |  |   43|     82|					&(O)->t_write);                        \
  |  |   44|     82|	} while (0)
  |  |  ------------------
  |  |  |  Branch (44:11): [Folded, False: 82]
  |  |  ------------------
  ------------------
 3970|       |
 3971|       |	/* Add Link State Request Retransmission Timer. */
 3972|     82|	OSPF_NSM_TIMER_ON(nbr->t_ls_req, ospf_ls_req_timer, nbr->v_ls_req);
  ------------------
  |  |   44|     82|#define OSPF_NSM_TIMER_ON(T, F, V) event_add_timer(master, (F), nbr, (V), &(T))
  |  |  ------------------
  |  |  |  |  216|     82|#define event_add_timer(m, f, a, v, t) 0
  |  |  ------------------
  ------------------
 3973|     82|}
ospf_ls_ack_send:
 4299|  3.68k|{
 4300|  3.68k|	struct ospf_interface *oi = nbr->oi;
 4301|       |
 4302|  3.68k|	if (IS_GRACE_LSA(lsa)) {
  ------------------
  |  |  124|  3.68k|	((lsa->data->type == OSPF_OPAQUE_LINK_LSA)                             \
  |  |  ------------------
  |  |  |  |   32|  3.68k|#define OSPF_OPAQUE_LINK_LSA	      9
  |  |  ------------------
  |  |  |  Branch (124:3): [True: 40, False: 3.64k]
  |  |  ------------------
  |  |  125|  3.68k|	 && (GET_OPAQUE_TYPE(ntohl(lsa->data->id.s_addr))                      \
  |  |  ------------------
  |  |  |  |   30|     40|#define GET_OPAQUE_TYPE(lsid) (((uint32_t)(lsid)&LSID_OPAQUE_TYPE_MASK) >> 24)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|     40|#define LSID_OPAQUE_TYPE_MASK	0xff000000	/*  8 bits */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (125:6): [True: 23, False: 17]
  |  |  ------------------
  |  |  126|     40|	     == OPAQUE_TYPE_GRACE_LSA))
  |  |  ------------------
  |  |  |  |   44|     40|#define OPAQUE_TYPE_GRACE_LSA				3
  |  |  ------------------
  ------------------
 4303|     23|		if (IS_DEBUG_OSPF_GR)
  ------------------
  |  |  107|     23|#define IS_DEBUG_OSPF_GR IS_DEBUG_OSPF(gr, GR)
  |  |  ------------------
  |  |  |  |   91|     23|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|     23|#define OSPF_DEBUG_GR 0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 23]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4304|      0|			zlog_debug("%s, Sending GRACE ACK to Restarter.",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 4305|     23|				   __func__);
 4306|     23|	}
 4307|       |
 4308|  3.68k|	if (listcount(oi->ls_ack_direct.ls_ack) == 0)
  ------------------
  |  |   55|  3.68k|#define listcount(X) ((X)->count)
  ------------------
  |  Branch (4308:6): [True: 1, False: 3.68k]
  ------------------
 4309|      1|		oi->ls_ack_direct.dst = nbr->address.u.prefix4;
 4310|       |
 4311|  3.68k|	listnode_add(oi->ls_ack_direct.ls_ack, ospf_lsa_lock(lsa));
 4312|       |
 4313|  3.68k|	event_add_event(master, ospf_ls_ack_send_event, oi, 0,
  ------------------
  |  |  219|  3.68k|#define event_add_event(m, f, a, v, t) 0
  ------------------
 4314|  3.68k|			&oi->t_ls_ack_direct);
 4315|  3.68k|}
ospf_packet.c:ospf_packet_examin:
 2820|  2.93k|{
 2821|  2.93k|	uint16_t bytesdeclared, bytesauth;
 2822|  2.93k|	unsigned ret;
 2823|  2.93k|	struct ospf_ls_update *lsupd;
 2824|       |
 2825|       |	/* Length, 1st approximation. */
 2826|  2.93k|	if (bytesonwire < OSPF_HEADER_SIZE) {
  ------------------
  |  |   10|  2.93k|#define OSPF_HEADER_SIZE         24U
  ------------------
  |  Branch (2826:6): [True: 45, False: 2.88k]
  ------------------
 2827|     45|		if (IS_DEBUG_OSPF_PACKET(0, RECV))
  ------------------
  |  |   90|     45|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   19|     45|#define OSPF_DEBUG_RECV		0x02
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 45]
  |  |  ------------------
  ------------------
 2828|      0|			zlog_debug("%s: undersized (%u B) packet", __func__,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 2829|     45|				   bytesonwire);
 2830|     45|		return MSG_NG;
  ------------------
  |  |   35|     45|#define MSG_NG    1
  ------------------
 2831|     45|	}
 2832|       |	/* Now it is safe to access header fields. Performing length check,
 2833|       |	 * allow
 2834|       |	 * for possible extra bytes of crypto auth/padding, which are not
 2835|       |	 * counted
 2836|       |	 * in the OSPF header "length" field. */
 2837|  2.88k|	if (oh->version != OSPF_VERSION) {
  ------------------
  |  |   23|  2.88k|#define OSPF_VERSION            2
  ------------------
  |  Branch (2837:6): [True: 28, False: 2.86k]
  ------------------
 2838|     28|		if (IS_DEBUG_OSPF_PACKET(0, RECV))
  ------------------
  |  |   90|     28|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   19|     28|#define OSPF_DEBUG_RECV		0x02
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 28]
  |  |  ------------------
  ------------------
 2839|      0|			zlog_debug("%s: invalid (%u) protocol version",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 2840|     28|				   __func__, oh->version);
 2841|     28|		return MSG_NG;
  ------------------
  |  |   35|     28|#define MSG_NG    1
  ------------------
 2842|     28|	}
 2843|  2.86k|	bytesdeclared = ntohs(oh->length);
 2844|  2.86k|	if (ntohs(oh->auth_type) != OSPF_AUTH_CRYPTOGRAPHIC)
  ------------------
  |  |   43|  2.86k|#define OSPF_AUTH_CRYPTOGRAPHIC             2
  ------------------
  |  Branch (2844:6): [True: 2.84k, False: 12]
  ------------------
 2845|  2.84k|		bytesauth = 0;
 2846|     12|	else {
 2847|     12|		if (oh->u.crypt.auth_data_len != OSPF_AUTH_MD5_SIZE) {
  ------------------
  |  |   12|     12|#define OSPF_AUTH_MD5_SIZE       16U
  ------------------
  |  Branch (2847:7): [True: 9, False: 3]
  ------------------
 2848|      9|			if (IS_DEBUG_OSPF_PACKET(0, RECV))
  ------------------
  |  |   90|      9|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   19|      9|#define OSPF_DEBUG_RECV		0x02
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 9]
  |  |  ------------------
  ------------------
 2849|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 2850|      9|					"%s: unsupported crypto auth length (%u B)",
 2851|      9|					__func__, oh->u.crypt.auth_data_len);
 2852|      9|			return MSG_NG;
  ------------------
  |  |   35|      9|#define MSG_NG    1
  ------------------
 2853|      9|		}
 2854|      3|		bytesauth = OSPF_AUTH_MD5_SIZE;
  ------------------
  |  |   12|      3|#define OSPF_AUTH_MD5_SIZE       16U
  ------------------
 2855|      3|	}
 2856|  2.85k|	if (bytesdeclared + bytesauth > bytesonwire) {
  ------------------
  |  Branch (2856:6): [True: 26, False: 2.82k]
  ------------------
 2857|     26|		if (IS_DEBUG_OSPF_PACKET(0, RECV))
  ------------------
  |  |   90|     26|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   19|     26|#define OSPF_DEBUG_RECV		0x02
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 26]
  |  |  ------------------
  ------------------
 2858|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 2859|     26|				"%s: packet length error (%u real, %u+%u declared)",
 2860|     26|				__func__, bytesonwire, bytesdeclared,
 2861|     26|				bytesauth);
 2862|     26|		return MSG_NG;
  ------------------
  |  |   35|     26|#define MSG_NG    1
  ------------------
 2863|     26|	}
 2864|       |	/* Length, 2nd approximation. The type-specific constraint is checked
 2865|       |	   against declared length, not amount of bytes on wire. */
 2866|  2.82k|	if (oh->type >= OSPF_MSG_HELLO && oh->type <= OSPF_MSG_LS_ACK
  ------------------
  |  |   21|  5.65k|#define OSPF_MSG_HELLO 1   /* OSPF Hello Message. */
  ------------------
              	if (oh->type >= OSPF_MSG_HELLO && oh->type <= OSPF_MSG_LS_ACK
  ------------------
  |  |   25|  5.64k|#define OSPF_MSG_LS_ACK 5  /* OSPF Link State Acknowledgement Message. */
  ------------------
  |  Branch (2866:6): [True: 2.82k, False: 1]
  |  Branch (2866:36): [True: 2.81k, False: 9]
  ------------------
 2867|  2.81k|	    && bytesdeclared
  ------------------
  |  Branch (2867:9): [True: 9, False: 2.80k]
  ------------------
 2868|  2.81k|		       < OSPF_HEADER_SIZE + ospf_packet_minlen[oh->type]) {
  ------------------
  |  |   10|  2.81k|#define OSPF_HEADER_SIZE         24U
  ------------------
 2869|      9|		if (IS_DEBUG_OSPF_PACKET(0, RECV))
  ------------------
  |  |   90|      9|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   19|      9|#define OSPF_DEBUG_RECV		0x02
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 9]
  |  |  ------------------
  ------------------
 2870|      0|			zlog_debug("%s: undersized (%u B) %s packet", __func__,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 2871|      9|				   bytesdeclared,
 2872|      9|				   lookup_msg(ospf_packet_type_str, oh->type,
 2873|      9|					      NULL));
 2874|      9|		return MSG_NG;
  ------------------
  |  |   35|      9|#define MSG_NG    1
  ------------------
 2875|      9|	}
 2876|  2.81k|	switch (oh->type) {
 2877|    251|	case OSPF_MSG_HELLO:
  ------------------
  |  |   21|    251|#define OSPF_MSG_HELLO 1   /* OSPF Hello Message. */
  ------------------
  |  Branch (2877:2): [True: 251, False: 2.56k]
  ------------------
 2878|       |		/* RFC2328 A.3.2, packet header + OSPF_HELLO_MIN_SIZE bytes
 2879|       |		   followed
 2880|       |		   by N>=0 router-IDs. */
 2881|    251|		ret = (bytesdeclared - OSPF_HEADER_SIZE - OSPF_HELLO_MIN_SIZE)
  ------------------
  |  |   10|    251|#define OSPF_HEADER_SIZE         24U
  ------------------
              		ret = (bytesdeclared - OSPF_HEADER_SIZE - OSPF_HELLO_MIN_SIZE)
  ------------------
  |  |   15|    251|#define OSPF_HELLO_MIN_SIZE      20U   /* not including neighbors */
  ------------------
  |  Branch (2881:9): [True: 1, False: 250]
  ------------------
 2882|    251|				      % 4
 2883|    251|			      ? MSG_NG
  ------------------
  |  |   35|      1|#define MSG_NG    1
  ------------------
 2884|    251|			      : MSG_OK;
  ------------------
  |  |   34|    501|#define MSG_OK    0
  ------------------
 2885|    251|		break;
 2886|    302|	case OSPF_MSG_DB_DESC:
  ------------------
  |  |   22|    302|#define OSPF_MSG_DB_DESC 2 /* OSPF Database Description Message. */
  ------------------
  |  Branch (2886:2): [True: 302, False: 2.51k]
  ------------------
 2887|       |		/* RFC2328 A.3.3, packet header + OSPF_DB_DESC_MIN_SIZE bytes
 2888|       |		   followed
 2889|       |		   by N>=0 header-only LSAs. */
 2890|    302|		ret = ospf_lsaseq_examin(
 2891|    302|			(struct lsa_header *)((caddr_t)oh + OSPF_HEADER_SIZE
  ------------------
  |  |   10|    302|#define OSPF_HEADER_SIZE         24U
  ------------------
 2892|    302|					      + OSPF_DB_DESC_MIN_SIZE),
  ------------------
  |  |   16|    302|#define OSPF_DB_DESC_MIN_SIZE     8U
  ------------------
 2893|    302|			bytesdeclared - OSPF_HEADER_SIZE
  ------------------
  |  |   10|    302|#define OSPF_HEADER_SIZE         24U
  ------------------
 2894|    302|				- OSPF_DB_DESC_MIN_SIZE,
  ------------------
  |  |   16|    302|#define OSPF_DB_DESC_MIN_SIZE     8U
  ------------------
 2895|    302|			1, /* header-only LSAs */
 2896|    302|			0);
 2897|    302|		break;
 2898|    305|	case OSPF_MSG_LS_REQ:
  ------------------
  |  |   23|    305|#define OSPF_MSG_LS_REQ 3  /* OSPF Link State Request Message. */
  ------------------
  |  Branch (2898:2): [True: 305, False: 2.51k]
  ------------------
 2899|       |		/* RFC2328 A.3.4, packet header followed by N>=0 12-bytes
 2900|       |		 * request blocks. */
 2901|    305|		ret = (bytesdeclared - OSPF_HEADER_SIZE - OSPF_LS_REQ_MIN_SIZE)
  ------------------
  |  |   10|    305|#define OSPF_HEADER_SIZE         24U
  ------------------
              		ret = (bytesdeclared - OSPF_HEADER_SIZE - OSPF_LS_REQ_MIN_SIZE)
  ------------------
  |  |   17|    305|#define OSPF_LS_REQ_MIN_SIZE      0U
  ------------------
  |  Branch (2901:9): [True: 6, False: 299]
  ------------------
 2902|    305|				      % OSPF_LSA_KEY_SIZE
  ------------------
  |  | 1590|    305|#define OSPF_LSA_KEY_SIZE       12 /* type(4) + id(4) + ar(4) */
  ------------------
 2903|    305|			      ? MSG_NG
  ------------------
  |  |   35|      6|#define MSG_NG    1
  ------------------
 2904|    305|			      : MSG_OK;
  ------------------
  |  |   34|    604|#define MSG_OK    0
  ------------------
 2905|    305|		break;
 2906|  1.68k|	case OSPF_MSG_LS_UPD:
  ------------------
  |  |   24|  1.68k|#define OSPF_MSG_LS_UPD 4  /* OSPF Link State Update Message. */
  ------------------
  |  Branch (2906:2): [True: 1.68k, False: 1.13k]
  ------------------
 2907|       |		/* RFC2328 A.3.5, packet header + OSPF_LS_UPD_MIN_SIZE bytes
 2908|       |		   followed
 2909|       |		   by N>=0 full LSAs (with N declared beforehand). */
 2910|  1.68k|		lsupd = (struct ospf_ls_update *)((caddr_t)oh
 2911|  1.68k|						  + OSPF_HEADER_SIZE);
  ------------------
  |  |   10|  1.68k|#define OSPF_HEADER_SIZE         24U
  ------------------
 2912|  1.68k|		ret = ospf_lsaseq_examin(
 2913|  1.68k|			(struct lsa_header *)((caddr_t)lsupd
 2914|  1.68k|					      + OSPF_LS_UPD_MIN_SIZE),
  ------------------
  |  |   18|  1.68k|#define OSPF_LS_UPD_MIN_SIZE      4U
  ------------------
 2915|  1.68k|			bytesdeclared - OSPF_HEADER_SIZE - OSPF_LS_UPD_MIN_SIZE,
  ------------------
  |  |   10|  1.68k|#define OSPF_HEADER_SIZE         24U
  ------------------
              			bytesdeclared - OSPF_HEADER_SIZE - OSPF_LS_UPD_MIN_SIZE,
  ------------------
  |  |   18|  1.68k|#define OSPF_LS_UPD_MIN_SIZE      4U
  ------------------
 2916|  1.68k|			0,		       /* full LSAs */
 2917|       |			ntohl(lsupd->num_lsas) /* 32 bits */
 2918|  1.68k|			);
 2919|  1.68k|		break;
 2920|    267|	case OSPF_MSG_LS_ACK:
  ------------------
  |  |   25|    267|#define OSPF_MSG_LS_ACK 5  /* OSPF Link State Acknowledgement Message. */
  ------------------
  |  Branch (2920:2): [True: 267, False: 2.54k]
  ------------------
 2921|       |		/* RFC2328 A.3.6, packet header followed by N>=0 header-only
 2922|       |		 * LSAs. */
 2923|    267|		ret = ospf_lsaseq_examin(
 2924|    267|			(struct lsa_header *)((caddr_t)oh + OSPF_HEADER_SIZE
  ------------------
  |  |   10|    267|#define OSPF_HEADER_SIZE         24U
  ------------------
 2925|    267|					      + OSPF_LS_ACK_MIN_SIZE),
  ------------------
  |  |   19|    267|#define OSPF_LS_ACK_MIN_SIZE      0U
  ------------------
 2926|    267|			bytesdeclared - OSPF_HEADER_SIZE - OSPF_LS_ACK_MIN_SIZE,
  ------------------
  |  |   10|    267|#define OSPF_HEADER_SIZE         24U
  ------------------
              			bytesdeclared - OSPF_HEADER_SIZE - OSPF_LS_ACK_MIN_SIZE,
  ------------------
  |  |   19|    267|#define OSPF_LS_ACK_MIN_SIZE      0U
  ------------------
 2927|    267|			1, /* header-only LSAs */
 2928|    267|			0);
 2929|    267|		break;
 2930|     10|	default:
  ------------------
  |  Branch (2930:2): [True: 10, False: 2.80k]
  ------------------
 2931|     10|		if (IS_DEBUG_OSPF_PACKET(0, RECV))
  ------------------
  |  |   90|     10|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   19|     10|#define OSPF_DEBUG_RECV		0x02
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 10]
  |  |  ------------------
  ------------------
 2932|      0|			zlog_debug("%s: invalid packet type 0x%02x", __func__,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 2933|     10|				   oh->type);
 2934|     10|		return MSG_NG;
  ------------------
  |  |   35|     10|#define MSG_NG    1
  ------------------
 2935|  2.81k|	}
 2936|  2.80k|	if (ret != MSG_OK && IS_DEBUG_OSPF_PACKET(0, RECV))
  ------------------
  |  |   34|  5.61k|#define MSG_OK    0
  ------------------
              	if (ret != MSG_OK && IS_DEBUG_OSPF_PACKET(0, RECV))
  ------------------
  |  |   90|    256|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   19|    256|#define OSPF_DEBUG_RECV		0x02
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 256]
  |  |  ------------------
  ------------------
  |  Branch (2936:6): [True: 256, False: 2.55k]
  ------------------
 2937|      0|		zlog_debug("%s: malformed %s packet", __func__,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 2938|  2.80k|			   lookup_msg(ospf_packet_type_str, oh->type, NULL));
 2939|  2.80k|	return ret;
 2940|  2.81k|}
ospf_packet.c:ospf_lsaseq_examin:
 2751|  2.25k|{
 2752|  2.25k|	uint32_t counted_lsas = 0;
 2753|       |
 2754|  64.2k|	while (length) {
  ------------------
  |  Branch (2754:9): [True: 62.2k, False: 2.06k]
  ------------------
 2755|  62.2k|		uint16_t lsalen;
 2756|  62.2k|		if (length < OSPF_LSA_HEADER_SIZE) {
  ------------------
  |  |   36|  62.2k|#define OSPF_LSA_HEADER_SIZE	     20U
  ------------------
  |  Branch (2756:7): [True: 20, False: 62.1k]
  ------------------
 2757|     20|			if (IS_DEBUG_OSPF_PACKET(0, RECV))
  ------------------
  |  |   90|     20|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   19|     20|#define OSPF_DEBUG_RECV		0x02
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 20]
  |  |  ------------------
  ------------------
 2758|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 2759|     20|					"%s: undersized (%zu B) trailing (#%u) LSA header",
 2760|     20|					__func__, length, counted_lsas);
 2761|     20|			return MSG_NG;
  ------------------
  |  |   35|     20|#define MSG_NG    1
  ------------------
 2762|     20|		}
 2763|       |		/* save on ntohs() calls here and in the LSA validator */
 2764|  62.1k|		lsalen = ntohs(lsah->length);
 2765|  62.1k|		if (lsalen < OSPF_LSA_HEADER_SIZE) {
  ------------------
  |  |   36|  62.1k|#define OSPF_LSA_HEADER_SIZE	     20U
  ------------------
  |  Branch (2765:7): [True: 7, False: 62.1k]
  ------------------
 2766|      7|			if (IS_DEBUG_OSPF_PACKET(0, RECV))
  ------------------
  |  |   90|      7|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   19|      7|#define OSPF_DEBUG_RECV		0x02
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 7]
  |  |  ------------------
  ------------------
 2767|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 2768|      7|					"%s: malformed LSA header #%u, declared length is %u B",
 2769|      7|					__func__, counted_lsas, lsalen);
 2770|      7|			return MSG_NG;
  ------------------
  |  |   35|      7|#define MSG_NG    1
  ------------------
 2771|      7|		}
 2772|  62.1k|		if (headeronly) {
  ------------------
  |  Branch (2772:7): [True: 11.6k, False: 50.5k]
  ------------------
 2773|       |			/* less checks here and in ospf_lsa_examin() */
 2774|  11.6k|			if (MSG_OK != ospf_lsa_examin(lsah, lsalen, 1)) {
  ------------------
  |  |   34|  11.6k|#define MSG_OK    0
  ------------------
  |  Branch (2774:8): [True: 41, False: 11.6k]
  ------------------
 2775|     41|				if (IS_DEBUG_OSPF_PACKET(0, RECV))
  ------------------
  |  |   90|     41|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   19|     41|#define OSPF_DEBUG_RECV		0x02
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 41]
  |  |  ------------------
  ------------------
 2776|      0|					zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 2777|     41|						"%s: malformed header-only LSA #%u",
 2778|     41|						__func__, counted_lsas);
 2779|     41|				return MSG_NG;
  ------------------
  |  |   35|     41|#define MSG_NG    1
  ------------------
 2780|     41|			}
 2781|  11.6k|			lsah = (struct lsa_header *)((caddr_t)lsah
 2782|  11.6k|						     + OSPF_LSA_HEADER_SIZE);
  ------------------
  |  |   36|  11.6k|#define OSPF_LSA_HEADER_SIZE	     20U
  ------------------
 2783|  11.6k|			length -= OSPF_LSA_HEADER_SIZE;
  ------------------
  |  |   36|  11.6k|#define OSPF_LSA_HEADER_SIZE	     20U
  ------------------
 2784|  50.5k|		} else {
 2785|       |			/* make sure the input buffer is deep enough before
 2786|       |			 * further checks */
 2787|  50.5k|			if (lsalen > length) {
  ------------------
  |  Branch (2787:8): [True: 27, False: 50.4k]
  ------------------
 2788|     27|				if (IS_DEBUG_OSPF_PACKET(0, RECV))
  ------------------
  |  |   90|     27|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   19|     27|#define OSPF_DEBUG_RECV		0x02
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 27]
  |  |  ------------------
  ------------------
 2789|      0|					zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 2790|     27|						"%s: anomaly in LSA #%u: declared length is %u B, buffered length is %zu B",
 2791|     27|						__func__, counted_lsas, lsalen,
 2792|     27|						length);
 2793|     27|				return MSG_NG;
  ------------------
  |  |   35|     27|#define MSG_NG    1
  ------------------
 2794|     27|			}
 2795|  50.4k|			if (MSG_OK != ospf_lsa_examin(lsah, lsalen, 0)) {
  ------------------
  |  |   34|  50.4k|#define MSG_OK    0
  ------------------
  |  Branch (2795:8): [True: 89, False: 50.3k]
  ------------------
 2796|     89|				if (IS_DEBUG_OSPF_PACKET(0, RECV))
  ------------------
  |  |   90|     89|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   19|     89|#define OSPF_DEBUG_RECV		0x02
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 89]
  |  |  ------------------
  ------------------
 2797|      0|					zlog_debug("%s: malformed LSA #%u",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 2798|     89|						   __func__, counted_lsas);
 2799|     89|				return MSG_NG;
  ------------------
  |  |   35|     89|#define MSG_NG    1
  ------------------
 2800|     89|			}
 2801|  50.3k|			lsah = (struct lsa_header *)((caddr_t)lsah + lsalen);
 2802|  50.3k|			length -= lsalen;
 2803|  50.3k|		}
 2804|  62.0k|		counted_lsas++;
 2805|  62.0k|	}
 2806|       |
 2807|  2.06k|	if (declared_num_lsas && counted_lsas != declared_num_lsas) {
  ------------------
  |  Branch (2807:6): [True: 1.54k, False: 522]
  |  Branch (2807:27): [True: 65, False: 1.47k]
  ------------------
 2808|     65|		if (IS_DEBUG_OSPF_PACKET(0, RECV))
  ------------------
  |  |   90|     65|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   19|     65|#define OSPF_DEBUG_RECV		0x02
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 65]
  |  |  ------------------
  ------------------
 2809|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 2810|     65|				"%s: #LSAs declared (%u) does not match actual (%u)",
 2811|     65|				__func__, declared_num_lsas, counted_lsas);
 2812|     65|		return MSG_NG;
  ------------------
  |  |   35|     65|#define MSG_NG    1
  ------------------
 2813|     65|	}
 2814|  2.00k|	return MSG_OK;
  ------------------
  |  |   34|  2.00k|#define MSG_OK    0
  ------------------
 2815|  2.06k|}
ospf_packet.c:ospf_lsa_examin:
 2658|  62.1k|{
 2659|  62.1k|	unsigned ret;
 2660|  62.1k|	struct router_lsa *rlsa;
 2661|  62.1k|	if (lsah->type < OSPF_MAX_LSA && ospf_lsa_minlen[lsah->type]
  ------------------
  |  |   20|   124k|#define OSPF_MAX_LSA           12
  ------------------
  |  Branch (2661:6): [True: 62.1k, False: 20]
  |  Branch (2661:35): [True: 50.7k, False: 11.3k]
  ------------------
 2662|  50.7k|	    && lsalen < OSPF_LSA_HEADER_SIZE + ospf_lsa_minlen[lsah->type]) {
  ------------------
  |  |   36|  50.7k|#define OSPF_LSA_HEADER_SIZE	     20U
  ------------------
  |  Branch (2662:9): [True: 13, False: 50.7k]
  ------------------
 2663|     13|		if (IS_DEBUG_OSPF_PACKET(0, RECV))
  ------------------
  |  |   90|     13|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   19|     13|#define OSPF_DEBUG_RECV		0x02
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 13]
  |  |  ------------------
  ------------------
 2664|      0|			zlog_debug("%s: undersized (%u B) %s", __func__, lsalen,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 2665|     13|				   lookup_msg(ospf_lsa_type_msg, lsah->type,
 2666|     13|					      NULL));
 2667|     13|		return MSG_NG;
  ------------------
  |  |   35|     13|#define MSG_NG    1
  ------------------
 2668|     13|	}
 2669|  62.1k|	switch (lsah->type) {
 2670|  7.45k|	case OSPF_ROUTER_LSA: {
  ------------------
  |  |   24|  7.45k|#define OSPF_ROUTER_LSA               1
  ------------------
  |  Branch (2670:2): [True: 7.45k, False: 54.6k]
  ------------------
 2671|       |		/*
 2672|       |		 * RFC2328 A.4.2, LSA header + 4 bytes followed by N>=0
 2673|       |		 * (12+)-byte link blocks
 2674|       |		 */
 2675|  7.45k|		size_t linkbytes_len = lsalen - OSPF_LSA_HEADER_SIZE
  ------------------
  |  |   36|  7.45k|#define OSPF_LSA_HEADER_SIZE	     20U
  ------------------
 2676|  7.45k|				       - OSPF_ROUTER_LSA_MIN_SIZE;
  ------------------
  |  |  148|  7.45k|#define OSPF_ROUTER_LSA_MIN_SIZE                   4U /* w/0 link descriptors */
  ------------------
 2677|       |
 2678|       |		/*
 2679|       |		 * LSA link blocks are variable length but always multiples of
 2680|       |		 * 4; basic sanity check
 2681|       |		 */
 2682|  7.45k|		if (linkbytes_len % 4 != 0)
  ------------------
  |  Branch (2682:7): [True: 7, False: 7.44k]
  ------------------
 2683|      7|			return MSG_NG;
  ------------------
  |  |   35|      7|#define MSG_NG    1
  ------------------
 2684|       |
 2685|  7.44k|		if (headeronly)
  ------------------
  |  Branch (2685:7): [True: 3.29k, False: 4.15k]
  ------------------
 2686|  3.29k|			return MSG_OK;
  ------------------
  |  |   34|  3.29k|#define MSG_OK    0
  ------------------
 2687|       |
 2688|  4.15k|		rlsa = (struct router_lsa *)lsah;
 2689|       |
 2690|  4.15k|		ret = ospf_router_lsa_links_examin(
 2691|  4.15k|			(struct router_lsa_link *)rlsa->link,
 2692|  4.15k|			linkbytes_len,
 2693|  4.15k|			ntohs(rlsa->links));
 2694|  4.15k|		break;
 2695|  7.44k|	}
 2696|  2.91k|	case OSPF_AS_EXTERNAL_LSA:
  ------------------
  |  |   28|  2.91k|#define OSPF_AS_EXTERNAL_LSA          5
  ------------------
  |  Branch (2696:2): [True: 2.91k, False: 59.2k]
  ------------------
 2697|       |	/* RFC2328 A.4.5, LSA header + 4 bytes followed by N>=1 12-bytes long
 2698|       |	 * blocks */
 2699|  3.89k|	case OSPF_AS_NSSA_LSA:
  ------------------
  |  |   30|  3.89k|#define OSPF_AS_NSSA_LSA	              7
  ------------------
  |  Branch (2699:2): [True: 986, False: 61.1k]
  ------------------
 2700|       |		/* RFC3101 C, idem */
 2701|  3.89k|		ret = (lsalen - OSPF_LSA_HEADER_SIZE
  ------------------
  |  |   36|  3.89k|#define OSPF_LSA_HEADER_SIZE	     20U
  ------------------
  |  Branch (2701:9): [True: 11, False: 3.88k]
  ------------------
 2702|  3.89k|		       - OSPF_AS_EXTERNAL_LSA_MIN_SIZE)
  ------------------
  |  |  188|  3.89k|#define OSPF_AS_EXTERNAL_LSA_MIN_SIZE             16U /* w/1 TOS forwarding block */
  ------------------
 2703|  3.89k|				      % 12
 2704|  3.89k|			      ? MSG_NG
  ------------------
  |  |   35|     11|#define MSG_NG    1
  ------------------
 2705|  3.89k|			      : MSG_OK;
  ------------------
  |  |   34|  7.78k|#define MSG_OK    0
  ------------------
 2706|  3.89k|		break;
 2707|       |	/* Following LSA types are considered OK length-wise as soon as their
 2708|       |	 * minimum
 2709|       |	 * length constraint is met and length of the whole LSA is a multiple of
 2710|       |	 * 4
 2711|       |	 * (basic LSA header size is already a multiple of 4). */
 2712|  21.5k|	case OSPF_NETWORK_LSA:
  ------------------
  |  |   25|  21.5k|#define OSPF_NETWORK_LSA              2
  ------------------
  |  Branch (2712:2): [True: 21.5k, False: 40.5k]
  ------------------
 2713|       |	/* RFC2328 A.4.3, LSA header + 4 bytes followed by N>=1 router-IDs */
 2714|  30.3k|	case OSPF_SUMMARY_LSA:
  ------------------
  |  |   26|  30.3k|#define OSPF_SUMMARY_LSA              3
  ------------------
  |  Branch (2714:2): [True: 8.78k, False: 53.3k]
  ------------------
 2715|  39.3k|	case OSPF_ASBR_SUMMARY_LSA:
  ------------------
  |  |   27|  39.3k|#define OSPF_ASBR_SUMMARY_LSA         4
  ------------------
  |  Branch (2715:2): [True: 9.04k, False: 53.0k]
  ------------------
 2716|       |	/* RFC2328 A.4.4, LSA header + 4 bytes followed by N>=1 4-bytes TOS
 2717|       |	 * blocks */
 2718|  43.3k|	case OSPF_OPAQUE_LINK_LSA:
  ------------------
  |  |   32|  43.3k|#define OSPF_OPAQUE_LINK_LSA	      9
  ------------------
  |  Branch (2718:2): [True: 3.91k, False: 58.2k]
  ------------------
 2719|  47.3k|	case OSPF_OPAQUE_AREA_LSA:
  ------------------
  |  |   33|  47.3k|#define OSPF_OPAQUE_AREA_LSA	     10
  ------------------
  |  Branch (2719:2): [True: 4.07k, False: 58.0k]
  ------------------
 2720|  50.7k|	case OSPF_OPAQUE_AS_LSA:
  ------------------
  |  |   34|  50.7k|#define OSPF_OPAQUE_AS_LSA	     11
  ------------------
  |  Branch (2720:2): [True: 3.38k, False: 58.7k]
  ------------------
 2721|       |		/* RFC5250 A.2, "some number of octets (of application-specific
 2722|       |		 * data) padded to 32-bit alignment." This is considered
 2723|       |		 * equivalent
 2724|       |		 * to 4-byte alignment of all other LSA types, see
 2725|       |		 * OSPF-ALIGNMENT.txt
 2726|       |		 * file for the detailed analysis of this passage. */
 2727|  50.7k|		ret = lsalen % 4 ? MSG_NG : MSG_OK;
  ------------------
  |  |   35|     27|#define MSG_NG    1
  ------------------
              		ret = lsalen % 4 ? MSG_NG : MSG_OK;
  ------------------
  |  |   34|   101k|#define MSG_OK    0
  ------------------
  |  Branch (2727:9): [True: 27, False: 50.7k]
  ------------------
 2728|  50.7k|		break;
 2729|     23|	default:
  ------------------
  |  Branch (2729:2): [True: 23, False: 62.1k]
  ------------------
 2730|     23|		if (IS_DEBUG_OSPF_PACKET(0, RECV))
  ------------------
  |  |   90|     23|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   19|     23|#define OSPF_DEBUG_RECV		0x02
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 23]
  |  |  ------------------
  ------------------
 2731|      0|			zlog_debug("%s: unsupported LSA type 0x%02x", __func__,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 2732|     23|				   lsah->type);
 2733|     23|		return MSG_NG;
  ------------------
  |  |   35|     23|#define MSG_NG    1
  ------------------
 2734|  62.1k|	}
 2735|  58.8k|	if (ret != MSG_OK && IS_DEBUG_OSPF_PACKET(0, RECV))
  ------------------
  |  |   34|   117k|#define MSG_OK    0
  ------------------
              	if (ret != MSG_OK && IS_DEBUG_OSPF_PACKET(0, RECV))
  ------------------
  |  |   90|     87|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   19|     87|#define OSPF_DEBUG_RECV		0x02
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 87]
  |  |  ------------------
  ------------------
  |  Branch (2735:6): [True: 87, False: 58.7k]
  ------------------
 2736|      0|		zlog_debug("%s: alignment error in %s", __func__,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 2737|  58.8k|			   lookup_msg(ospf_lsa_type_msg, lsah->type, NULL));
 2738|  58.8k|	return ret;
 2739|  62.1k|}
ospf_packet.c:ospf_router_lsa_links_examin:
 2629|  4.15k|{
 2630|  4.15k|	unsigned counted_links = 0, thislinklen;
 2631|       |
 2632|  21.1k|	while (linkbytes >= OSPF_ROUTER_LSA_LINK_SIZE) {
  ------------------
  |  |   37|  21.1k|#define OSPF_ROUTER_LSA_LINK_SIZE    12U
  ------------------
  |  Branch (2632:9): [True: 17.0k, False: 4.13k]
  ------------------
 2633|  17.0k|		thislinklen =
 2634|  17.0k|			OSPF_ROUTER_LSA_LINK_SIZE + 4 * link->m[0].tos_count;
  ------------------
  |  |   37|  17.0k|#define OSPF_ROUTER_LSA_LINK_SIZE    12U
  ------------------
 2635|  17.0k|		if (thislinklen > linkbytes) {
  ------------------
  |  Branch (2635:7): [True: 15, False: 17.0k]
  ------------------
 2636|     15|			if (IS_DEBUG_OSPF_PACKET(0, RECV))
  ------------------
  |  |   90|     15|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   19|     15|#define OSPF_DEBUG_RECV		0x02
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 15]
  |  |  ------------------
  ------------------
 2637|      0|				zlog_debug("%s: length error in link block #%u",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 2638|     15|					   __func__, counted_links);
 2639|     15|			return MSG_NG;
  ------------------
  |  |   35|     15|#define MSG_NG    1
  ------------------
 2640|     15|		}
 2641|  17.0k|		link = (struct router_lsa_link *)((caddr_t)link + thislinklen);
 2642|  17.0k|		linkbytes -= thislinklen;
 2643|  17.0k|		counted_links++;
 2644|  17.0k|	}
 2645|  4.13k|	if (counted_links != num_links) {
  ------------------
  |  Branch (2645:6): [True: 34, False: 4.10k]
  ------------------
 2646|     34|		if (IS_DEBUG_OSPF_PACKET(0, RECV))
  ------------------
  |  |   90|     34|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   19|     34|#define OSPF_DEBUG_RECV		0x02
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 34]
  |  |  ------------------
  ------------------
 2647|      0|			zlog_debug("%s: %u link blocks declared, %u present",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 2648|     34|				   __func__, num_links, counted_links);
 2649|     34|		return MSG_NG;
  ------------------
  |  |   35|     34|#define MSG_NG    1
  ------------------
 2650|     34|	}
 2651|  4.10k|	return MSG_OK;
  ------------------
  |  |   34|  4.10k|#define MSG_OK    0
  ------------------
 2652|  4.13k|}
ospf_packet.c:ospf_associate_packet_vl:
 2399|     79|{
 2400|     79|	struct ospf_interface *rcv_oi;
 2401|     79|	struct ospf_vl_data *vl_data;
 2402|     79|	struct ospf_area *vl_area;
 2403|     79|	struct listnode *node;
 2404|       |
 2405|     79|	if (IN_MULTICAST(ntohl(iph->ip_dst.s_addr))
  ------------------
  |  Branch (2405:6): [True: 2, False: 77]
  ------------------
 2406|     77|	    || !OSPF_IS_AREA_BACKBONE(ospfh))
  ------------------
  |  |  679|     77|#define OSPF_IS_AREA_BACKBONE(A) OSPF_IS_AREA_ID_BACKBONE ((A)->area_id)
  |  |  ------------------
  |  |  |  |  678|     77|#define OSPF_IS_AREA_ID_BACKBONE(I) ((I).s_addr == OSPF_AREA_BACKBONE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   73|     77|#define OSPF_AREA_BACKBONE              0x00000000      /* 0.0.0.0 */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2406:9): [True: 72, False: 5]
  ------------------
 2407|     74|		return NULL;
 2408|       |
 2409|       |	/* look for local OSPF interface matching the destination
 2410|       |	 * to determine Area ID. We presume therefore the destination address
 2411|       |	 * is unique, or at least (for "unnumbered" links), not used in other
 2412|       |	 * areas
 2413|       |	 */
 2414|      5|	if ((rcv_oi = ospf_if_lookup_by_local_addr(ospf, NULL, iph->ip_dst))
  ------------------
  |  Branch (2414:6): [True: 4, False: 1]
  ------------------
 2415|      5|	    == NULL)
 2416|      4|		return NULL;
 2417|       |
 2418|      1|	for (ALL_LIST_ELEMENTS_RO(ospf->vlinks, node, vl_data)) {
  ------------------
  |  |  333|      1|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|      1|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|      1|	(node) != NULL && ((data) = static_cast(data, listgetdata(node)), 1);  \
  |  |  ------------------
  |  |  |  |  204|      0|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (334:2): [True: 0, False: 1]
  |  |  |  Branch (334:20): [True: 0, False: 0]
  |  |  ------------------
  |  |  335|      1|	(node) = listnextnode(node), ((data) = NULL)
  |  |  ------------------
  |  |  |  |   49|      0|#define listnextnode(X) ((X) ? ((X)->next) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2419|      0|		vl_area =
 2420|      0|			ospf_area_lookup_by_area_id(ospf, vl_data->vl_area_id);
 2421|      0|		if (!vl_area)
  ------------------
  |  Branch (2421:7): [True: 0, False: 0]
  ------------------
 2422|      0|			continue;
 2423|       |
 2424|      0|		if (OSPF_AREA_SAME(&vl_area, &rcv_oi->area)
  ------------------
  |  |  673|      0|	(memcmp((X->area_id), (Y->area_id), IPV4_MAX_BYTELEN) == 0)
  |  |  ------------------
  |  |  |  |  333|      0|#define IPV4_MAX_BYTELEN    4
  |  |  ------------------
  |  |  |  Branch (673:2): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2425|      0|		    && IPV4_ADDR_SAME(&vl_data->vl_peer, &ospfh->router_id)) {
  ------------------
  |  |  342|      0|#define IPV4_ADDR_SAME(A,B)  ipv4_addr_same((A), (B))
  |  |  ------------------
  |  |  |  Branch (342:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2426|      0|			if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|      0|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|      0|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2427|      0|				zlog_debug("associating packet with %s",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 2428|      0|					   IF_NAME(vl_data->vl_oi));
 2429|      0|			if (!CHECK_FLAG(vl_data->vl_oi->ifp->flags, IFF_UP)) {
  ------------------
  |  |  394|      0|#define CHECK_FLAG(V,F)      ((V) & (F))
  ------------------
  |  Branch (2429:8): [True: 0, False: 0]
  ------------------
 2430|      0|				if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|      0|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|      0|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2431|      0|					zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 2432|      0|						"This VL is not up yet, sorry");
 2433|      0|				return NULL;
 2434|      0|			}
 2435|       |
 2436|      0|			return vl_data->vl_oi;
 2437|      0|		}
 2438|      0|	}
 2439|       |
 2440|      1|	if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|      1|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|      1|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|      1|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2441|      0|		zlog_debug("couldn't find any VL to associate the packet with");
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 2442|       |
 2443|       |	return NULL;
 2444|      1|}
ospf_packet.c:ospf_verify_header:
 2945|  2.47k|{
 2946|       |	/* Check Area ID. */
 2947|  2.47k|	if (!ospf_check_area_id(oi, ospfh)) {
  ------------------
  |  Branch (2947:6): [True: 112, False: 2.35k]
  ------------------
 2948|    112|		flog_warn(EC_OSPF_PACKET,
  ------------------
  |  |  137|    112|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 2949|    112|			  "interface %s: ospf_read invalid Area ID %pI4",
 2950|    112|			  IF_NAME(oi), &ospfh->area_id);
 2951|    112|		return -1;
 2952|    112|	}
 2953|       |
 2954|       |	/* Check network mask, Silently discarded. */
 2955|  2.35k|	if (!ospf_check_network_mask(oi, iph->ip_src)) {
  ------------------
  |  Branch (2955:6): [True: 0, False: 2.35k]
  ------------------
 2956|      0|		flog_warn(
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 2957|      0|			EC_OSPF_PACKET,
 2958|      0|			"interface %s: ospf_read network address is not same [%pI4]",
 2959|      0|			IF_NAME(oi), &iph->ip_src);
 2960|      0|		return -1;
 2961|      0|	}
 2962|       |
 2963|       |	/* Check authentication. The function handles logging actions, where
 2964|       |	 * required. */
 2965|  2.35k|	if (!ospf_check_auth(oi, ospfh))
  ------------------
  |  Branch (2965:6): [True: 4, False: 2.35k]
  ------------------
 2966|      4|		return -1;
 2967|       |
 2968|  2.35k|	return 0;
 2969|  2.35k|}
ospf_packet.c:ospf_check_area_id:
 2448|  2.47k|{
 2449|       |	/* Check match the Area ID of the receiving interface. */
 2450|  2.47k|	if (OSPF_AREA_SAME(&oi->area, &ospfh))
  ------------------
  |  |  673|  2.47k|	(memcmp((X->area_id), (Y->area_id), IPV4_MAX_BYTELEN) == 0)
  |  |  ------------------
  |  |  |  |  333|  2.47k|#define IPV4_MAX_BYTELEN    4
  |  |  ------------------
  |  |  |  Branch (673:2): [True: 2.35k, False: 112]
  |  |  ------------------
  ------------------
 2451|  2.35k|		return 1;
 2452|       |
 2453|    112|	return 0;
 2454|  2.47k|}
ospf_packet.c:ospf_check_network_mask:
 2461|  2.35k|{
 2462|  2.35k|	struct in_addr mask, me, him;
 2463|       |
 2464|  2.35k|	if (oi->type == OSPF_IFTYPE_POINTOPOINT
  ------------------
  |  |   44|  4.71k|#define OSPF_IFTYPE_POINTOPOINT		1
  ------------------
  |  Branch (2464:6): [True: 0, False: 2.35k]
  ------------------
 2465|  2.35k|	    || oi->type == OSPF_IFTYPE_VIRTUALLINK)
  ------------------
  |  |   48|  2.35k|#define OSPF_IFTYPE_VIRTUALLINK		5
  ------------------
  |  Branch (2465:9): [True: 0, False: 2.35k]
  ------------------
 2466|      0|		return 1;
 2467|       |
 2468|       |	/* Ignore mask check for max prefix length (32) */
 2469|  2.35k|	if (oi->type == OSPF_IFTYPE_POINTOMULTIPOINT
  ------------------
  |  |   47|  4.71k|#define OSPF_IFTYPE_POINTOMULTIPOINT	4
  ------------------
  |  Branch (2469:6): [True: 0, False: 2.35k]
  ------------------
 2470|      0|	    && oi->address->prefixlen == IPV4_MAX_BITLEN)
  ------------------
  |  |  334|      0|#define IPV4_MAX_BITLEN    32
  ------------------
  |  Branch (2470:9): [True: 0, False: 0]
  ------------------
 2471|      0|		return 1;
 2472|       |
 2473|  2.35k|	masklen2ip(oi->address->prefixlen, &mask);
 2474|       |
 2475|  2.35k|	me.s_addr = oi->address->u.prefix4.s_addr & mask.s_addr;
 2476|  2.35k|	him.s_addr = ip_src.s_addr & mask.s_addr;
 2477|       |
 2478|  2.35k|	if (IPV4_ADDR_SAME(&me, &him))
  ------------------
  |  |  342|  2.35k|#define IPV4_ADDR_SAME(A,B)  ipv4_addr_same((A), (B))
  |  |  ------------------
  |  |  |  Branch (342:30): [True: 2.35k, False: 0]
  |  |  ------------------
  ------------------
 2479|  2.35k|		return 1;
 2480|       |
 2481|      0|	return 0;
 2482|  2.35k|}
ospf_packet.c:ospf_check_auth:
 2488|  2.35k|{
 2489|  2.35k|	struct crypt_key *ck;
 2490|  2.35k|	uint16_t iface_auth_type;
 2491|  2.35k|	uint16_t pkt_auth_type = ntohs(ospfh->auth_type);
 2492|       |
 2493|  2.35k|	switch (pkt_auth_type) {
 2494|  2.35k|	case OSPF_AUTH_NULL: /* RFC2328 D.5.1 */
  ------------------
  |  |   41|  2.35k|#define OSPF_AUTH_NULL                      0
  ------------------
  |  Branch (2494:2): [True: 2.35k, False: 4]
  ------------------
 2495|  2.35k|		if (OSPF_AUTH_NULL != (iface_auth_type = ospf_auth_type(oi))) {
  ------------------
  |  |   41|  2.35k|#define OSPF_AUTH_NULL                      0
  ------------------
  |  Branch (2495:7): [True: 0, False: 2.35k]
  ------------------
 2496|      0|			if (IS_DEBUG_OSPF_PACKET(ospfh->type - 1, RECV))
  ------------------
  |  |   90|      0|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   19|      0|#define OSPF_DEBUG_RECV		0x02
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2497|      0|				flog_warn(
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 2498|      0|					EC_OSPF_PACKET,
 2499|      0|					"interface %s: auth-type mismatch, local %s, rcvd Null, Router-ID %pI4",
 2500|      0|					IF_NAME(oi),
 2501|      0|					lookup_msg(ospf_auth_type_str,
 2502|      0|						   iface_auth_type, NULL),
 2503|      0|					&ospfh->router_id);
 2504|       |#ifndef FUZZING
 2505|       |			return 0;
 2506|       |#endif
 2507|      0|		}
 2508|  2.35k|		if (!ospf_check_sum(ospfh)) {
  ------------------
  |  Branch (2508:7): [True: 2.35k, False: 0]
  ------------------
 2509|  2.35k|			if (IS_DEBUG_OSPF_PACKET(ospfh->type - 1, RECV))
  ------------------
  |  |   90|  2.35k|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   19|  2.35k|#define OSPF_DEBUG_RECV		0x02
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 2.35k]
  |  |  ------------------
  ------------------
 2510|      0|				flog_warn(
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 2511|  2.35k|					EC_OSPF_PACKET,
 2512|  2.35k|					"interface %s: Null auth OK, but checksum error, Router-ID %pI4",
 2513|  2.35k|					IF_NAME(oi),
 2514|  2.35k|					&ospfh->router_id);
 2515|       |#ifndef FUZZING
 2516|       |			return 0;
 2517|       |#endif
 2518|  2.35k|		}
 2519|  2.35k|		return 1;
 2520|      1|	case OSPF_AUTH_SIMPLE: /* RFC2328 D.5.2 */
  ------------------
  |  |   42|      1|#define OSPF_AUTH_SIMPLE                    1
  ------------------
  |  Branch (2520:2): [True: 1, False: 2.35k]
  ------------------
 2521|      1|		if (OSPF_AUTH_SIMPLE
  ------------------
  |  |   42|      1|#define OSPF_AUTH_SIMPLE                    1
  ------------------
  |  Branch (2521:7): [True: 1, False: 0]
  ------------------
 2522|      1|		    != (iface_auth_type = ospf_auth_type(oi))) {
 2523|      1|			if (IS_DEBUG_OSPF_PACKET(ospfh->type - 1, RECV))
  ------------------
  |  |   90|      1|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   19|      1|#define OSPF_DEBUG_RECV		0x02
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 1]
  |  |  ------------------
  ------------------
 2524|      0|				flog_warn(
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 2525|      1|					EC_OSPF_PACKET,
 2526|      1|					"interface %s: auth-type mismatch, local %s, rcvd Simple, Router-ID %pI4",
 2527|      1|					IF_NAME(oi),
 2528|      1|					lookup_msg(ospf_auth_type_str,
 2529|      1|						   iface_auth_type, NULL),
 2530|      1|					&ospfh->router_id);
 2531|      1|			return 0;
 2532|      1|		}
 2533|      0|		if (memcmp(OSPF_IF_PARAM(oi, auth_simple), ospfh->u.auth_data,
  ------------------
  |  |   32|      0|	(OSPF_IF_PARAM_CONFIGURED((O)->params, P)                              \
  |  |  ------------------
  |  |  |  |   22|      0|#define OSPF_IF_PARAM_CONFIGURED(S, P) ((S) && (S)->P##__config)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (22:41): [True: 0, False: 0]
  |  |  |  |  |  Branch (22:48): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   33|      0|		 ? (O)->params->P                                              \
  |  |   34|      0|		 : IF_DEF_PARAMS((O)->ifp)->P)
  |  |  ------------------
  |  |  |  |   17|      0|#define IF_DEF_PARAMS(I) (IF_OSPF_IF_INFO (I)->def_params)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2533:7): [True: 0, False: 0]
  ------------------
 2534|      0|			   OSPF_AUTH_SIMPLE_SIZE)) {
  ------------------
  |  |   11|      0|#define OSPF_AUTH_SIMPLE_SIZE     8U
  ------------------
 2535|      0|			if (IS_DEBUG_OSPF_PACKET(ospfh->type - 1, RECV))
  ------------------
  |  |   90|      0|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   19|      0|#define OSPF_DEBUG_RECV		0x02
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2536|      0|				flog_warn(
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 2537|      0|					EC_OSPF_PACKET,
 2538|      0|					"interface %s: Simple auth failed, Router-ID %pI4",
 2539|      0|					IF_NAME(oi), &ospfh->router_id);
 2540|      0|			return 0;
 2541|      0|		}
 2542|      0|		if (!ospf_check_sum(ospfh)) {
  ------------------
  |  Branch (2542:7): [True: 0, False: 0]
  ------------------
 2543|      0|			if (IS_DEBUG_OSPF_PACKET(ospfh->type - 1, RECV))
  ------------------
  |  |   90|      0|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   19|      0|#define OSPF_DEBUG_RECV		0x02
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2544|      0|				flog_warn(
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 2545|      0|					EC_OSPF_PACKET,
 2546|      0|					"interface %s: Simple auth OK, checksum error, Router-ID %pI4",
 2547|      0|					IF_NAME(oi),
 2548|      0|					&ospfh->router_id);
 2549|      0|			return 0;
 2550|      0|		}
 2551|      0|		return 1;
 2552|      1|	case OSPF_AUTH_CRYPTOGRAPHIC: /* RFC2328 D.5.3 */
  ------------------
  |  |   43|      1|#define OSPF_AUTH_CRYPTOGRAPHIC             2
  ------------------
  |  Branch (2552:2): [True: 1, False: 2.35k]
  ------------------
 2553|      1|		if (OSPF_AUTH_CRYPTOGRAPHIC
  ------------------
  |  |   43|      1|#define OSPF_AUTH_CRYPTOGRAPHIC             2
  ------------------
  |  Branch (2553:7): [True: 1, False: 0]
  ------------------
 2554|      1|		    != (iface_auth_type = ospf_auth_type(oi))) {
 2555|      1|			if (IS_DEBUG_OSPF_PACKET(ospfh->type - 1, RECV))
  ------------------
  |  |   90|      1|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   19|      1|#define OSPF_DEBUG_RECV		0x02
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 1]
  |  |  ------------------
  ------------------
 2556|      0|				flog_warn(
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 2557|      1|					EC_OSPF_PACKET,
 2558|      1|					"interface %s: auth-type mismatch, local %s, rcvd Cryptographic, Router-ID %pI4",
 2559|      1|					IF_NAME(oi),
 2560|      1|					lookup_msg(ospf_auth_type_str,
 2561|      1|						   iface_auth_type, NULL),
 2562|      1|					&ospfh->router_id);
 2563|      1|			return 0;
 2564|      1|		}
 2565|      0|		if (ospfh->checksum) {
  ------------------
  |  Branch (2565:7): [True: 0, False: 0]
  ------------------
 2566|      0|			if (IS_DEBUG_OSPF_PACKET(ospfh->type - 1, RECV))
  ------------------
  |  |   90|      0|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   19|      0|#define OSPF_DEBUG_RECV		0x02
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2567|      0|				flog_warn(
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 2568|      0|					EC_OSPF_PACKET,
 2569|      0|					"interface %s: OSPF header checksum is not 0, Router-ID %pI4",
 2570|      0|					IF_NAME(oi), &ospfh->router_id);
 2571|      0|			return 0;
 2572|      0|		}
 2573|       |		/* only MD5 crypto method can pass ospf_packet_examin() */
 2574|      0|		if (NULL == (ck = listgetdata(
  ------------------
  |  |   58|      0|#define listgetdata(X) (assert(X), assert((X)->data != NULL), (X)->data)
  |  |  ------------------
  |  |  |  |   51|      0|	({                                                                     \
  |  |  |  |   52|      0|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|      0|			(used)) = {                                            \
  |  |  |  |   54|      0|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{                                                                      \
  |  |  |  |  |  |  284|      0|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|      0|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|      0|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|      0|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|      0|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|      0|			.expr = #expr_,                                        \
  |  |  |  |   56|      0|		};                                                             \
  |  |  |  |   57|      0|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|      0|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|      0|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|      0|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|      0|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 0]
  |  |  |  |  |  Branch (58:24): [True: 0, False: 0]
  |  |  |  |  |  Branch (58:25): [True: 0, False: 0]
  |  |  |  |  |  Branch (58:25): [True: 0, False: 0]
  |  |  |  |  |  Branch (58:25): [True: 0, False: 0]
  |  |  |  |  |  Branch (58:25): [True: 0, False: 0]
  |  |  |  |  |  Branch (58:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|      0|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|      0|	})
  |  |  ------------------
  |  |               #define listgetdata(X) (assert(X), assert((X)->data != NULL), (X)->data)
  |  |  ------------------
  |  |  |  |   51|      0|	({                                                                     \
  |  |  |  |   52|      0|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|      0|			(used)) = {                                            \
  |  |  |  |   54|      0|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{                                                                      \
  |  |  |  |  |  |  284|      0|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|      0|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|      0|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|      0|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|      0|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|      0|			.expr = #expr_,                                        \
  |  |  |  |   56|      0|		};                                                             \
  |  |  |  |   57|      0|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|      0|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|      0|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|      0|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|      0|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 0]
  |  |  |  |  |  Branch (58:24): [True: 0, False: 0]
  |  |  |  |  |  Branch (58:25): [True: 0, False: 0]
  |  |  |  |  |  Branch (58:25): [True: 0, False: 0]
  |  |  |  |  |  Branch (58:25): [True: 0, False: 0]
  |  |  |  |  |  Branch (58:25): [True: 0, False: 0]
  |  |  |  |  |  Branch (58:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|      0|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|      0|	})
  |  |  ------------------
  |  |  |  Branch (58:64): [True: 0, False: 0]
  |  |  |  Branch (58:64): [True: 0, False: 0]
  |  |  |  Branch (58:64): [True: 0, False: 0]
  |  |  |  Branch (58:64): [True: 0, False: 0]
  |  |  |  Branch (58:64): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (2574:7): [True: 0, False: 0]
  ------------------
 2575|      0|				     listtail(OSPF_IF_PARAM(oi, auth_crypt))))
 2576|      0|		    || ospfh->u.crypt.key_id != ck->key_id ||
  ------------------
  |  Branch (2576:10): [True: 0, False: 0]
  ------------------
 2577|       |		    /* Condition above uses the last key ID on the list,
 2578|       |		       which is
 2579|       |		       different from what ospf_crypt_key_lookup() does. A
 2580|       |		       bug? */
 2581|      0|		    !ospf_check_md5_digest(oi, ospfh)) {
  ------------------
  |  Branch (2581:7): [True: 0, False: 0]
  ------------------
 2582|      0|			if (IS_DEBUG_OSPF_PACKET(ospfh->type - 1, RECV))
  ------------------
  |  |   90|      0|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   19|      0|#define OSPF_DEBUG_RECV		0x02
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2583|      0|				flog_warn(
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 2584|      0|					EC_OSPF_MD5,
 2585|      0|					"interface %s: MD5 auth failed, Router-ID %pI4",
 2586|      0|					IF_NAME(oi), &ospfh->router_id);
 2587|      0|			return 0;
 2588|      0|		}
 2589|      0|		return 1;
 2590|      2|	default:
  ------------------
  |  Branch (2590:2): [True: 2, False: 2.35k]
  ------------------
 2591|      2|		if (IS_DEBUG_OSPF_PACKET(ospfh->type - 1, RECV))
  ------------------
  |  |   90|      2|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   19|      2|#define OSPF_DEBUG_RECV		0x02
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 2592|      0|			flog_warn(
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 2593|      2|				EC_OSPF_PACKET,
 2594|      2|				"interface %s: invalid packet auth-type (%02x), Router-ID %pI4",
 2595|      2|				IF_NAME(oi), pkt_auth_type, &ospfh->router_id);
 2596|      2|		return 0;
 2597|  2.35k|	}
 2598|  2.35k|}
ospf_packet.c:ospf_auth_type:
  107|  3.05k|{
  108|  3.05k|	int auth_type;
  109|       |
  110|  3.05k|	if (OSPF_IF_PARAM(oi, auth_type) == OSPF_AUTH_NOTSET)
  ------------------
  |  |   32|  3.05k|	(OSPF_IF_PARAM_CONFIGURED((O)->params, P)                              \
  |  |  ------------------
  |  |  |  |   22|  3.05k|#define OSPF_IF_PARAM_CONFIGURED(S, P) ((S) && (S)->P##__config)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (22:41): [True: 0, False: 3.05k]
  |  |  |  |  |  Branch (22:48): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   33|  3.05k|		 ? (O)->params->P                                              \
  |  |   34|  3.05k|		 : IF_DEF_PARAMS((O)->ifp)->P)
  |  |  ------------------
  |  |  |  |   17|  3.05k|#define IF_DEF_PARAMS(I) (IF_OSPF_IF_INFO (I)->def_params)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  3.05k|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              	if (OSPF_IF_PARAM(oi, auth_type) == OSPF_AUTH_NOTSET)
  ------------------
  |  |   45|  3.05k|#define OSPF_AUTH_NOTSET                   -1
  ------------------
  |  Branch (110:6): [True: 3.05k, False: 0]
  ------------------
  111|  3.05k|		auth_type = oi->area->auth_type;
  112|      0|	else
  113|      0|		auth_type = OSPF_IF_PARAM(oi, auth_type);
  ------------------
  |  |   32|      0|	(OSPF_IF_PARAM_CONFIGURED((O)->params, P)                              \
  |  |  ------------------
  |  |  |  |   22|      0|#define OSPF_IF_PARAM_CONFIGURED(S, P) ((S) && (S)->P##__config)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (22:41): [True: 0, False: 0]
  |  |  |  |  |  Branch (22:48): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   33|      0|		 ? (O)->params->P                                              \
  |  |   34|      0|		 : IF_DEF_PARAMS((O)->ifp)->P)
  |  |  ------------------
  |  |  |  |   17|      0|#define IF_DEF_PARAMS(I) (IF_OSPF_IF_INFO (I)->def_params)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  114|       |
  115|       |	/* Handle case where MD5 key list is not configured aka Cisco */
  116|  3.05k|	if (auth_type == OSPF_AUTH_CRYPTOGRAPHIC
  ------------------
  |  |   43|  6.10k|#define OSPF_AUTH_CRYPTOGRAPHIC             2
  ------------------
  |  Branch (116:6): [True: 0, False: 3.05k]
  ------------------
  117|      0|	    && list_isempty(OSPF_IF_PARAM(oi, auth_crypt)))
  ------------------
  |  |   56|      0|#define list_isempty(X) ((X)->head == NULL && (X)->tail == NULL)
  |  |  ------------------
  |  |  |  Branch (56:26): [True: 0, False: 0]
  |  |  |  Branch (56:27): [True: 0, False: 0]
  |  |  |  Branch (56:27): [True: 0, False: 0]
  |  |  |  Branch (56:47): [True: 0, False: 0]
  |  |  |  Branch (56:48): [True: 0, False: 0]
  |  |  |  Branch (56:48): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  118|      0|		return OSPF_AUTH_NULL;
  ------------------
  |  |   41|      0|#define OSPF_AUTH_NULL                      0
  ------------------
  119|       |
  120|  3.05k|	return auth_type;
  121|  3.05k|}
ospf_packet.c:ospf_check_sum:
 2601|  2.35k|{
 2602|  2.35k|	uint32_t ret;
 2603|  2.35k|	uint16_t sum;
 2604|       |
 2605|       |	/* clear auth_data for checksum. */
 2606|  2.35k|	memset(ospfh->u.auth_data, 0, OSPF_AUTH_SIMPLE_SIZE);
  ------------------
  |  |   11|  2.35k|#define OSPF_AUTH_SIMPLE_SIZE     8U
  ------------------
 2607|       |
 2608|       |	/* keep checksum and clear. */
 2609|  2.35k|	sum = ospfh->checksum;
 2610|  2.35k|	memset(&ospfh->checksum, 0, sizeof(uint16_t));
 2611|       |
 2612|       |	/* calculate checksum. */
 2613|  2.35k|	ret = in_cksum(ospfh, ntohs(ospfh->length));
 2614|       |
 2615|  2.35k|	if (ret != sum) {
  ------------------
  |  Branch (2615:6): [True: 2.35k, False: 0]
  ------------------
 2616|  2.35k|		zlog_info("%s: checksum mismatch, my %X, his %X", __func__, ret,
  ------------------
  |  |  132|  2.35k|#define zlog_info(...) 0
  ------------------
 2617|  2.35k|			  sum);
 2618|  2.35k|		return 0;
 2619|  2.35k|	}
 2620|       |
 2621|      0|	return 1;
 2622|  2.35k|}
ospf_packet.c:ospf_hello:
  866|    249|{
  867|    249|	struct ospf_hello *hello;
  868|    249|	struct ospf_neighbor *nbr;
  869|    249|	int old_state;
  870|    249|	struct prefix p;
  871|       |
  872|       |	/* increment statistics. */
  873|    249|	oi->hello_in++;
  874|       |
  875|    249|	hello = (struct ospf_hello *)stream_pnt(s);
  876|       |
  877|       |	/* If Hello is myself, silently discard. */
  878|    249|	if (IPV4_ADDR_SAME(&ospfh->router_id, &oi->ospf->router_id)) {
  ------------------
  |  |  342|    249|#define IPV4_ADDR_SAME(A,B)  ipv4_addr_same((A), (B))
  |  |  ------------------
  |  |  |  Branch (342:30): [True: 1, False: 248]
  |  |  ------------------
  ------------------
  879|      1|		if (IS_DEBUG_OSPF_PACKET(ospfh->type - 1, RECV)) {
  ------------------
  |  |   90|      1|#define IS_DEBUG_OSPF_PACKET(a, b) (term_debug_ospf_packet[a] & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   19|      1|#define OSPF_DEBUG_RECV		0x02
  |  |  ------------------
  |  |  |  Branch (90:36): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  880|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  881|      0|				"ospf_header[%s/%pI4]: selforiginated, dropping.",
  882|      0|				lookup_msg(ospf_packet_type_str, ospfh->type,
  883|      0|					   NULL),
  884|      0|				&iph->ip_src);
  885|      0|		}
  886|      1|		return;
  887|      1|	}
  888|       |
  889|       |	/* get neighbor prefix. */
  890|    248|	p.family = AF_INET;
  891|    248|	p.prefixlen = ip_masklen(hello->network_mask);
  892|    248|	p.u.prefix4 = iph->ip_src;
  893|       |
  894|       |	/* Compare network mask. */
  895|       |	/* Checking is ignored for Point-to-Point and Virtual link. */
  896|       |	/* Checking is also ignored for Point-to-Multipoint with /32 prefix */
  897|    248|	if (oi->type != OSPF_IFTYPE_POINTOPOINT
  ------------------
  |  |   44|    496|#define OSPF_IFTYPE_POINTOPOINT		1
  ------------------
  |  Branch (897:6): [True: 248, False: 0]
  ------------------
  898|    248|	    && oi->type != OSPF_IFTYPE_VIRTUALLINK
  ------------------
  |  |   48|    496|#define OSPF_IFTYPE_VIRTUALLINK		5
  ------------------
  |  Branch (898:9): [True: 248, False: 0]
  ------------------
  899|    248|	    && !(oi->type == OSPF_IFTYPE_POINTOMULTIPOINT
  ------------------
  |  |   47|    496|#define OSPF_IFTYPE_POINTOMULTIPOINT	4
  ------------------
  |  Branch (899:11): [True: 0, False: 248]
  ------------------
  900|      0|		 && oi->address->prefixlen == IPV4_MAX_BITLEN))
  ------------------
  |  |  334|      0|#define IPV4_MAX_BITLEN    32
  ------------------
  |  Branch (900:7): [True: 0, False: 0]
  ------------------
  901|    248|		if (oi->address->prefixlen != p.prefixlen) {
  ------------------
  |  Branch (901:7): [True: 103, False: 145]
  ------------------
  902|    103|			flog_warn(
  ------------------
  |  |  137|    103|#define flog_warn(ferr_id, format, ...) 0
  ------------------
  903|    103|				EC_OSPF_PACKET,
  904|    103|				"Packet %pI4 [Hello:RECV]: NetworkMask mismatch on %s (configured prefix length is %d, but hello packet indicates %d).",
  905|    103|				&ospfh->router_id, IF_NAME(oi),
  906|    103|				(int)oi->address->prefixlen, (int)p.prefixlen);
  907|    103|			return;
  908|    103|		}
  909|       |
  910|       |	/* Compare Router Dead Interval. */
  911|    145|	if (OSPF_IF_PARAM(oi, v_wait) != ntohl(hello->dead_interval)) {
  ------------------
  |  |   32|    145|	(OSPF_IF_PARAM_CONFIGURED((O)->params, P)                              \
  |  |  ------------------
  |  |  |  |   22|    145|#define OSPF_IF_PARAM_CONFIGURED(S, P) ((S) && (S)->P##__config)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (22:41): [True: 0, False: 145]
  |  |  |  |  |  Branch (22:48): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   33|    145|		 ? (O)->params->P                                              \
  |  |   34|    145|		 : IF_DEF_PARAMS((O)->ifp)->P)
  |  |  ------------------
  |  |  |  |   17|    145|#define IF_DEF_PARAMS(I) (IF_OSPF_IF_INFO (I)->def_params)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    145|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (911:6): [True: 57, False: 88]
  ------------------
  912|     57|		flog_warn(
  ------------------
  |  |  137|     57|#define flog_warn(ferr_id, format, ...) 0
  ------------------
  913|     57|			EC_OSPF_PACKET,
  914|     57|			"Packet %pI4 [Hello:RECV]: RouterDeadInterval mismatch on %s (expected %u, but received %u).",
  915|     57|			&ospfh->router_id, IF_NAME(oi),
  916|     57|			OSPF_IF_PARAM(oi, v_wait), ntohl(hello->dead_interval));
  917|     57|		return;
  918|     57|	}
  919|       |
  920|       |	/* Compare Hello Interval - ignored if fast-hellos are set. */
  921|     88|	if (OSPF_IF_PARAM(oi, fast_hello) == 0) {
  ------------------
  |  |   32|     88|	(OSPF_IF_PARAM_CONFIGURED((O)->params, P)                              \
  |  |  ------------------
  |  |  |  |   22|     88|#define OSPF_IF_PARAM_CONFIGURED(S, P) ((S) && (S)->P##__config)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (22:41): [True: 0, False: 88]
  |  |  |  |  |  Branch (22:48): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   33|     88|		 ? (O)->params->P                                              \
  |  |   34|     88|		 : IF_DEF_PARAMS((O)->ifp)->P)
  |  |  ------------------
  |  |  |  |   17|     88|#define IF_DEF_PARAMS(I) (IF_OSPF_IF_INFO (I)->def_params)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     88|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (921:6): [True: 88, False: 0]
  ------------------
  922|     88|		if (OSPF_IF_PARAM(oi, v_hello)
  ------------------
  |  |   32|     88|	(OSPF_IF_PARAM_CONFIGURED((O)->params, P)                              \
  |  |  ------------------
  |  |  |  |   22|     88|#define OSPF_IF_PARAM_CONFIGURED(S, P) ((S) && (S)->P##__config)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (22:41): [True: 0, False: 88]
  |  |  |  |  |  Branch (22:48): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   33|     88|		 ? (O)->params->P                                              \
  |  |   34|     88|		 : IF_DEF_PARAMS((O)->ifp)->P)
  |  |  ------------------
  |  |  |  |   17|     88|#define IF_DEF_PARAMS(I) (IF_OSPF_IF_INFO (I)->def_params)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     88|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (922:7): [True: 18, False: 70]
  ------------------
  923|     88|		    != ntohs(hello->hello_interval)) {
  924|     18|			flog_warn(
  ------------------
  |  |  137|     18|#define flog_warn(ferr_id, format, ...) 0
  ------------------
  925|     18|				EC_OSPF_PACKET,
  926|     18|				"Packet %pI4 [Hello:RECV]: HelloInterval mismatch on %s (expected %u, but received %u).",
  927|     18|				&ospfh->router_id, IF_NAME(oi),
  928|     18|				OSPF_IF_PARAM(oi, v_hello),
  929|     18|				ntohs(hello->hello_interval));
  930|     18|			return;
  931|     18|		}
  932|     88|	}
  933|       |
  934|     70|	if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|     70|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|     70|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|     70|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 70]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  935|      0|		zlog_debug("Packet %pI4 [Hello:RECV]: Options on %s %s vrf %s",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  936|     70|			   &ospfh->router_id, IF_NAME(oi),
  937|     70|			   ospf_options_dump(hello->options),
  938|     70|			   ospf_vrf_id_to_name(oi->ospf->vrf_id));
  939|       |
  940|       |/* Compare options. */
  941|     70|#define REJECT_IF_TBIT_ON	1 /* XXX */
  942|     70|#ifdef REJECT_IF_TBIT_ON
  943|     70|	if (CHECK_FLAG(hello->options, OSPF_OPTION_MT)) {
  ------------------
  |  |  394|     70|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 1, False: 69]
  |  |  ------------------
  ------------------
  944|       |		/*
  945|       |		 * This router does not support non-zero TOS.
  946|       |		 * Drop this Hello packet not to establish neighbor
  947|       |		 * relationship.
  948|       |		 */
  949|      1|		flog_warn(EC_OSPF_PACKET,
  ------------------
  |  |  137|      1|#define flog_warn(ferr_id, format, ...) 0
  ------------------
  950|      1|			  "Packet %pI4 [Hello:RECV]: T-bit ON on %s, drop it.",
  951|      1|			  &ospfh->router_id, IF_NAME(oi));
  952|      1|		return;
  953|      1|	}
  954|     69|#endif /* REJECT_IF_TBIT_ON */
  955|       |
  956|     69|	if (CHECK_FLAG(oi->ospf->config, OSPF_OPAQUE_CAPABLE)
  ------------------
  |  |  394|    138|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 0, False: 69]
  |  |  ------------------
  ------------------
  957|      0|	    && CHECK_FLAG(hello->options, OSPF_OPTION_O)) {
  ------------------
  |  |  394|      0|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  958|       |		/*
  959|       |		 * This router does know the correct usage of O-bit
  960|       |		 * the bit should be set in DD packet only.
  961|       |		 */
  962|      0|		flog_warn(EC_OSPF_PACKET,
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
  963|      0|			  "Packet %pI4 [Hello:RECV]: O-bit abuse? on %s",
  964|      0|			  &ospfh->router_id, IF_NAME(oi));
  965|       |#ifdef STRICT_OBIT_USAGE_CHECK
  966|       |		return; /* Reject this packet. */
  967|       |#else			/* STRICT_OBIT_USAGE_CHECK */
  968|      0|		UNSET_FLAG(hello->options, OSPF_OPTION_O); /* Ignore O-bit. */
  ------------------
  |  |  396|      0|#define UNSET_FLAG(V,F)      (V) &= ~(F)
  ------------------
  969|      0|#endif			/* STRICT_OBIT_USAGE_CHECK */
  970|      0|	}
  971|       |
  972|       |	/* new for NSSA is to ensure that NP is on and E is off */
  973|       |
  974|     69|	if (oi->area->external_routing == OSPF_AREA_NSSA) {
  ------------------
  |  |   78|     69|#define OSPF_AREA_NSSA          2
  ------------------
  |  Branch (974:6): [True: 0, False: 69]
  ------------------
  975|      0|		if (!(CHECK_FLAG(OPTIONS(oi), OSPF_OPTION_NP)
  ------------------
  |  |  394|      0|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  976|      0|		      && CHECK_FLAG(hello->options, OSPF_OPTION_NP)
  ------------------
  |  |  394|      0|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  977|      0|		      && !CHECK_FLAG(OPTIONS(oi), OSPF_OPTION_E)
  ------------------
  |  |  394|      0|#define CHECK_FLAG(V,F)      ((V) & (F))
  ------------------
  |  Branch (977:12): [True: 0, False: 0]
  ------------------
  978|      0|		      && !CHECK_FLAG(hello->options, OSPF_OPTION_E))) {
  ------------------
  |  |  394|      0|#define CHECK_FLAG(V,F)      ((V) & (F))
  ------------------
  |  Branch (978:12): [True: 0, False: 0]
  ------------------
  979|      0|			flog_warn(
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
  980|      0|				EC_OSPF_PACKET,
  981|      0|				"NSSA-Packet-%pI4[Hello:RECV]: my options: %x, his options %x",
  982|      0|				&ospfh->router_id, OPTIONS(oi),
  983|      0|				hello->options);
  984|      0|			return;
  985|      0|		}
  986|      0|		if (IS_DEBUG_OSPF_NSSA)
  ------------------
  |  |   94|      0|#define IS_DEBUG_OSPF_NSSA  IS_DEBUG_OSPF(nssa, NSSA)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|      0|#define OSPF_DEBUG_NSSA		0x02
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  987|      0|			zlog_debug("NSSA-Hello:RECV:Packet from %pI4:",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  988|      0|				   &ospfh->router_id);
  989|      0|	} else
  990|       |		/* The setting of the E-bit found in the Hello Packet's Options
  991|       |		   field must match this area's ExternalRoutingCapability A
  992|       |		   mismatch causes processing to stop and the packet to be
  993|       |		   dropped. The setting of the rest of the bits in the Hello
  994|       |		   Packet's Options field should be ignored. */
  995|     69|		if (CHECK_FLAG(OPTIONS(oi), OSPF_OPTION_E)
  ------------------
  |  |  394|     69|#define CHECK_FLAG(V,F)      ((V) & (F))
  ------------------
  |  Branch (995:7): [True: 1, False: 68]
  ------------------
  996|     69|		    != CHECK_FLAG(hello->options, OSPF_OPTION_E)) {
  ------------------
  |  |  394|     69|#define CHECK_FLAG(V,F)      ((V) & (F))
  ------------------
  997|      1|		flog_warn(
  ------------------
  |  |  137|      1|#define flog_warn(ferr_id, format, ...) 0
  ------------------
  998|      1|			EC_OSPF_PACKET,
  999|      1|			"Packet %pI4 [Hello:RECV]: my options: %x, his options %x",
 1000|      1|			&ospfh->router_id, OPTIONS(oi),
 1001|      1|			hello->options);
 1002|      1|		return;
 1003|      1|	}
 1004|       |
 1005|       |	/* get neighbour struct */
 1006|     68|	nbr = ospf_nbr_get(oi, ospfh, iph, &p);
 1007|       |
 1008|       |	/* neighbour must be valid, ospf_nbr_get creates if none existed */
 1009|     68|	assert(nbr);
  ------------------
  |  |   51|     68|	({                                                                     \
  |  |   52|     68|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|     68|			(used)) = {                                            \
  |  |   54|     68|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|     68|	{                                                                      \
  |  |  |  |  284|     68|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|     68|		/* .type = */ (type_),                                         \
  |  |  |  |  286|     68|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|     68|		/* .func = */ func_,                                           \
  |  |  |  |  289|     68|	}                                                                      \
  |  |  ------------------
  |  |   55|     68|			.expr = #expr_,                                        \
  |  |   56|     68|		};                                                             \
  |  |   57|     68|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|     68|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|     68|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|     68|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|     68|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 68]
  |  |  |  Branch (58:24): [True: 68, False: 0]
  |  |  ------------------
  |  |   59|     68|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|     68|	})
  ------------------
 1010|       |
 1011|     68|	old_state = nbr->state;
 1012|       |
 1013|       |	/* Add event to thread. */
 1014|     68|	OSPF_NSM_EVENT_SCHEDULE(nbr, NSM_HelloReceived);
 1015|       |
 1016|       |	/*  RFC2328  Section 9.5.1
 1017|       |	    If the router is not eligible to become Designated Router,
 1018|       |	    (snip)   It	must also send an Hello	Packet in reply	to an
 1019|       |	    Hello Packet received from any eligible neighbor (other than
 1020|       |	    the	current	Designated Router and Backup Designated	Router).  */
 1021|     68|	if (oi->type == OSPF_IFTYPE_NBMA)
  ------------------
  |  |   46|     68|#define OSPF_IFTYPE_NBMA		3
  ------------------
  |  Branch (1021:6): [True: 0, False: 68]
  ------------------
 1022|      0|		if (PRIORITY(oi) == 0 && hello->priority > 0
  ------------------
  |  |  221|      0|#define PRIORITY(I)		((I)->nbr_self->priority)
  ------------------
  |  Branch (1022:7): [True: 0, False: 0]
  |  Branch (1022:28): [True: 0, False: 0]
  ------------------
 1023|      0|		    && IPV4_ADDR_CMP(&DR(oi), &iph->ip_src)
  ------------------
  |  |  335|      0|#define IPV4_ADDR_CMP(D,S)   memcmp ((D), (S), IPV4_MAX_BYTELEN)
  |  |  ------------------
  |  |  |  |  333|      0|#define IPV4_MAX_BYTELEN    4
  |  |  ------------------
  |  |  |  Branch (335:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1024|      0|		    && IPV4_ADDR_CMP(&BDR(oi), &iph->ip_src))
  ------------------
  |  |  335|      0|#define IPV4_ADDR_CMP(D,S)   memcmp ((D), (S), IPV4_MAX_BYTELEN)
  |  |  ------------------
  |  |  |  |  333|      0|#define IPV4_MAX_BYTELEN    4
  |  |  ------------------
  |  |  |  Branch (335:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1025|      0|			OSPF_NSM_TIMER_ON(nbr->t_hello_reply,
  ------------------
  |  |   44|      0|#define OSPF_NSM_TIMER_ON(T, F, V) event_add_timer(master, (F), nbr, (V), &(T))
  |  |  ------------------
  |  |  |  |  216|      0|#define event_add_timer(m, f, a, v, t) 0
  |  |  ------------------
  ------------------
 1026|     68|					  ospf_hello_reply_timer,
 1027|     68|					  OSPF_HELLO_REPLY_DELAY);
 1028|       |
 1029|       |	/* on NBMA network type, it happens to receive bidirectional Hello
 1030|       |	   packet
 1031|       |	   without advance 1-Way Received event.
 1032|       |	   To avoid incorrect DR-seletion, raise 1-Way Received event.*/
 1033|     68|	if (oi->type == OSPF_IFTYPE_NBMA
  ------------------
  |  |   46|    136|#define OSPF_IFTYPE_NBMA		3
  ------------------
  |  Branch (1033:6): [True: 0, False: 68]
  ------------------
 1034|      0|	    && (old_state == NSM_Down || old_state == NSM_Attempt)) {
  ------------------
  |  |   16|      0|#define NSM_Down		2
  ------------------
              	    && (old_state == NSM_Down || old_state == NSM_Attempt)) {
  ------------------
  |  |   17|      0|#define NSM_Attempt		3
  ------------------
  |  Branch (1034:10): [True: 0, False: 0]
  |  Branch (1034:35): [True: 0, False: 0]
  ------------------
 1035|      0|		OSPF_NSM_EVENT_SCHEDULE(nbr, NSM_OneWayReceived);
 1036|      0|		nbr->priority = hello->priority;
 1037|      0|		nbr->d_router = hello->d_router;
 1038|      0|		nbr->bd_router = hello->bd_router;
 1039|      0|		return;
 1040|      0|	}
 1041|       |
 1042|     68|	if (ospf_nbr_bidirectional(&oi->ospf->router_id, hello->neighbors,
  ------------------
  |  Branch (1042:6): [True: 5, False: 63]
  ------------------
 1043|     68|				   size - OSPF_HELLO_MIN_SIZE)) {
  ------------------
  |  |   15|     68|#define OSPF_HELLO_MIN_SIZE      20U   /* not including neighbors */
  ------------------
 1044|      5|		OSPF_NSM_EVENT_SCHEDULE(nbr, NSM_TwoWayReceived);
 1045|      5|		nbr->options |= hello->options;
 1046|     63|	} else {
 1047|       |		/* If the router is DR_OTHER, RESTARTER will not wait
 1048|       |		 * until it receives the hello from it if it receives
 1049|       |		 * from DR and BDR.
 1050|       |		 * So, helper might receives ONW_WAY hello from
 1051|       |		 * RESTARTER. So not allowing to change the state if it
 1052|       |		 * receives one_way hellow when it acts as HELPER for
 1053|       |		 * that specific neighbor.
 1054|       |		 */
 1055|     63|		if (!OSPF_GR_IS_ACTIVE_HELPER(nbr))
  ------------------
  |  |  120|     63|	((N)->gr_helper_info.gr_helper_status == OSPF_GR_ACTIVE_HELPER)
  |  |  ------------------
  |  |  |  |   13|     63|#define OSPF_GR_ACTIVE_HELPER 1
  |  |  ------------------
  ------------------
  |  Branch (1055:7): [True: 63, False: 0]
  ------------------
 1056|     63|			OSPF_NSM_EVENT_SCHEDULE(nbr, NSM_OneWayReceived);
 1057|       |		/* Set neighbor information. */
 1058|     63|		nbr->priority = hello->priority;
 1059|     63|		nbr->d_router = hello->d_router;
 1060|     63|		nbr->bd_router = hello->bd_router;
 1061|     63|		return;
 1062|     63|	}
 1063|       |
 1064|      5|	if (OSPF_GR_IS_ACTIVE_HELPER(nbr)) {
  ------------------
  |  |  120|      5|	((N)->gr_helper_info.gr_helper_status == OSPF_GR_ACTIVE_HELPER)
  |  |  ------------------
  |  |  |  |   13|      5|#define OSPF_GR_ACTIVE_HELPER 1
  |  |  ------------------
  |  |  |  Branch (120:2): [True: 0, False: 5]
  |  |  ------------------
  ------------------
 1065|       |		/* As per the GR Conformance Test Case 7.2. Section 3
 1066|       |		 * "Also, if X was the Designated Router on network segment S
 1067|       |		 * when the helping relationship began, Y maintains X as the
 1068|       |		 * Designated Router until the helping relationship is
 1069|       |		 * terminated."
 1070|       |		 * When I am helper for this neighbor, I should not trigger the
 1071|       |		 * ISM Events. Also Intentionally not setting the priority and
 1072|       |		 * other fields so that when the neighbor exits the Grace
 1073|       |		 * period, it can handle if there is any change before GR and
 1074|       |		 * after GR. */
 1075|      0|		if (IS_DEBUG_OSPF_GR)
  ------------------
  |  |  107|      0|#define IS_DEBUG_OSPF_GR IS_DEBUG_OSPF(gr, GR)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|#define OSPF_DEBUG_GR 0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1076|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1077|      0|				"%s, Neighbor is under GR Restart, hence ignoring the ISM Events",
 1078|      0|				__PRETTY_FUNCTION__);
 1079|      5|	} else {
 1080|       |		/* If neighbor itself declares DR and no BDR exists,
 1081|       |		   cause event BackupSeen */
 1082|      5|		if (IPV4_ADDR_SAME(&nbr->address.u.prefix4, &hello->d_router))
  ------------------
  |  |  342|      5|#define IPV4_ADDR_SAME(A,B)  ipv4_addr_same((A), (B))
  |  |  ------------------
  |  |  |  Branch (342:30): [True: 0, False: 5]
  |  |  ------------------
  ------------------
 1083|      0|			if (hello->bd_router.s_addr == INADDR_ANY
  ------------------
  |  Branch (1083:8): [True: 0, False: 0]
  ------------------
 1084|      0|			    && oi->state == ISM_Waiting)
  ------------------
  |  |   17|      0|#define ISM_Waiting                       3
  ------------------
  |  Branch (1084:11): [True: 0, False: 0]
  ------------------
 1085|      0|				OSPF_ISM_EVENT_SCHEDULE(oi, ISM_BackupSeen);
  ------------------
  |  |   68|      0|	event_add_event(master, ospf_ism_event, (I), (E), NULL)
  |  |  ------------------
  |  |  |  |  219|      0|#define event_add_event(m, f, a, v, t) 0
  |  |  ------------------
  ------------------
 1086|       |
 1087|       |		/* neighbor itself declares BDR. */
 1088|      5|		if (oi->state == ISM_Waiting
  ------------------
  |  |   17|     10|#define ISM_Waiting                       3
  ------------------
  |  Branch (1088:7): [True: 0, False: 5]
  ------------------
 1089|      0|		    && IPV4_ADDR_SAME(&nbr->address.u.prefix4,
  ------------------
  |  |  342|      0|#define IPV4_ADDR_SAME(A,B)  ipv4_addr_same((A), (B))
  |  |  ------------------
  |  |  |  Branch (342:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1090|      5|				      &hello->bd_router))
 1091|      5|			OSPF_ISM_EVENT_SCHEDULE(oi, ISM_BackupSeen);
  ------------------
  |  |   68|      0|	event_add_event(master, ospf_ism_event, (I), (E), NULL)
  |  |  ------------------
  |  |  |  |  219|      0|#define event_add_event(m, f, a, v, t) 0
  |  |  ------------------
  ------------------
 1092|       |
 1093|       |		/* had not previously. */
 1094|      5|		if ((IPV4_ADDR_SAME(&nbr->address.u.prefix4, &hello->d_router)
  ------------------
  |  |  342|     10|#define IPV4_ADDR_SAME(A,B)  ipv4_addr_same((A), (B))
  |  |  ------------------
  |  |  |  Branch (342:30): [True: 0, False: 5]
  |  |  ------------------
  ------------------
 1095|      0|		     && IPV4_ADDR_CMP(&nbr->address.u.prefix4, &nbr->d_router))
  ------------------
  |  |  335|      0|#define IPV4_ADDR_CMP(D,S)   memcmp ((D), (S), IPV4_MAX_BYTELEN)
  |  |  ------------------
  |  |  |  |  333|      0|#define IPV4_MAX_BYTELEN    4
  |  |  ------------------
  |  |  |  Branch (335:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1096|      5|		    || (IPV4_ADDR_CMP(&nbr->address.u.prefix4, &hello->d_router)
  ------------------
  |  |  335|     10|#define IPV4_ADDR_CMP(D,S)   memcmp ((D), (S), IPV4_MAX_BYTELEN)
  |  |  ------------------
  |  |  |  |  333|      5|#define IPV4_MAX_BYTELEN    4
  |  |  ------------------
  |  |  |  Branch (335:30): [True: 5, False: 0]
  |  |  ------------------
  ------------------
 1097|      5|			&& IPV4_ADDR_SAME(&nbr->address.u.prefix4,
  ------------------
  |  |  342|      5|#define IPV4_ADDR_SAME(A,B)  ipv4_addr_same((A), (B))
  |  |  ------------------
  |  |  |  Branch (342:30): [True: 0, False: 5]
  |  |  ------------------
  ------------------
 1098|      5|					  &nbr->d_router)))
 1099|      5|			OSPF_ISM_EVENT_SCHEDULE(oi, ISM_NeighborChange);
  ------------------
  |  |   68|      0|	event_add_event(master, ospf_ism_event, (I), (E), NULL)
  |  |  ------------------
  |  |  |  |  219|      0|#define event_add_event(m, f, a, v, t) 0
  |  |  ------------------
  ------------------
 1100|       |
 1101|       |		/* had not previously. */
 1102|      5|		if ((IPV4_ADDR_SAME(&nbr->address.u.prefix4, &hello->bd_router)
  ------------------
  |  |  342|     10|#define IPV4_ADDR_SAME(A,B)  ipv4_addr_same((A), (B))
  |  |  ------------------
  |  |  |  Branch (342:30): [True: 0, False: 5]
  |  |  ------------------
  ------------------
 1103|      0|		     && IPV4_ADDR_CMP(&nbr->address.u.prefix4, &nbr->bd_router))
  ------------------
  |  |  335|      0|#define IPV4_ADDR_CMP(D,S)   memcmp ((D), (S), IPV4_MAX_BYTELEN)
  |  |  ------------------
  |  |  |  |  333|      0|#define IPV4_MAX_BYTELEN    4
  |  |  ------------------
  |  |  |  Branch (335:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1104|      5|		    || (IPV4_ADDR_CMP(&nbr->address.u.prefix4,
  ------------------
  |  |  335|     10|#define IPV4_ADDR_CMP(D,S)   memcmp ((D), (S), IPV4_MAX_BYTELEN)
  |  |  ------------------
  |  |  |  |  333|      5|#define IPV4_MAX_BYTELEN    4
  |  |  ------------------
  |  |  |  Branch (335:30): [True: 5, False: 0]
  |  |  ------------------
  ------------------
 1105|      5|				      &hello->bd_router)
 1106|      5|			&& IPV4_ADDR_SAME(&nbr->address.u.prefix4,
  ------------------
  |  |  342|      5|#define IPV4_ADDR_SAME(A,B)  ipv4_addr_same((A), (B))
  |  |  ------------------
  |  |  |  Branch (342:30): [True: 0, False: 5]
  |  |  ------------------
  ------------------
 1107|      5|					  &nbr->bd_router)))
 1108|      5|			OSPF_ISM_EVENT_SCHEDULE(oi, ISM_NeighborChange);
  ------------------
  |  |   68|      0|	event_add_event(master, ospf_ism_event, (I), (E), NULL)
  |  |  ------------------
  |  |  |  |  219|      0|#define event_add_event(m, f, a, v, t) 0
  |  |  ------------------
  ------------------
 1109|       |
 1110|       |		/* Neighbor priority check. */
 1111|      5|		if (nbr->priority >= 0 && nbr->priority != hello->priority)
  ------------------
  |  Branch (1111:7): [True: 3, False: 2]
  |  Branch (1111:29): [True: 0, False: 3]
  ------------------
 1112|      5|			OSPF_ISM_EVENT_SCHEDULE(oi, ISM_NeighborChange);
  ------------------
  |  |   68|      0|	event_add_event(master, ospf_ism_event, (I), (E), NULL)
  |  |  ------------------
  |  |  |  |  219|      0|#define event_add_event(m, f, a, v, t) 0
  |  |  ------------------
  ------------------
 1113|      5|	}
 1114|       |
 1115|       |	/* Set neighbor information. */
 1116|      5|	nbr->priority = hello->priority;
 1117|      5|	nbr->d_router = hello->d_router;
 1118|      5|	nbr->bd_router = hello->bd_router;
 1119|       |
 1120|       |	/*
 1121|       |	 * RFC 3623 - Section 2:
 1122|       |	 * "If the restarting router determines that it was the Designated
 1123|       |	 * Router on a given segment prior to the restart, it elects
 1124|       |	 * itself as the Designated Router again.  The restarting router
 1125|       |	 * knows that it was the Designated Router if, while the
 1126|       |	 * associated interface is in Waiting state, a Hello packet is
 1127|       |	 * received from a neighbor listing the router as the Designated
 1128|       |	 * Router".
 1129|       |	 */
 1130|      5|	if (oi->area->ospf->gr_info.restart_in_progress
  ------------------
  |  Branch (1130:6): [True: 0, False: 5]
  ------------------
 1131|      0|	    && oi->state == ISM_Waiting
  ------------------
  |  |   17|      5|#define ISM_Waiting                       3
  ------------------
  |  Branch (1131:9): [True: 0, False: 0]
  ------------------
 1132|      0|	    && IPV4_ADDR_SAME(&hello->d_router, &oi->address->u.prefix4))
  ------------------
  |  |  342|      0|#define IPV4_ADDR_SAME(A,B)  ipv4_addr_same((A), (B))
  |  |  ------------------
  |  |  |  Branch (342:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1133|      0|		DR(oi) = hello->d_router;
  ------------------
  |  |  218|      0|#define DR(I)			((I)->nbr_self->d_router)
  ------------------
 1134|      5|}
ospf_packet.c:ospf_db_desc:
 1300|    291|{
 1301|    291|	struct ospf_db_desc *dd;
 1302|    291|	struct ospf_neighbor *nbr;
 1303|       |
 1304|       |	/* Increment statistics. */
 1305|    291|	oi->db_desc_in++;
 1306|       |
 1307|    291|	dd = (struct ospf_db_desc *)stream_pnt(s);
 1308|       |
 1309|    291|	nbr = ospf_nbr_lookup(oi, iph, ospfh);
 1310|    291|	if (nbr == NULL) {
  ------------------
  |  Branch (1310:6): [True: 0, False: 291]
  ------------------
 1311|      0|		flog_warn(EC_OSPF_PACKET, "Packet[DD]: Unknown Neighbor %pI4",
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 1312|      0|			  &ospfh->router_id);
 1313|      0|		return;
 1314|      0|	}
 1315|       |
 1316|       |	/* Check MTU. */
 1317|    291|	if ((OSPF_IF_PARAM(oi, mtu_ignore) == 0)
  ------------------
  |  |   32|    291|	(OSPF_IF_PARAM_CONFIGURED((O)->params, P)                              \
  |  |  ------------------
  |  |  |  |   22|    291|#define OSPF_IF_PARAM_CONFIGURED(S, P) ((S) && (S)->P##__config)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (22:41): [True: 0, False: 291]
  |  |  |  |  |  Branch (22:48): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   33|    291|		 ? (O)->params->P                                              \
  |  |   34|    291|		 : IF_DEF_PARAMS((O)->ifp)->P)
  |  |  ------------------
  |  |  |  |   17|    291|#define IF_DEF_PARAMS(I) (IF_OSPF_IF_INFO (I)->def_params)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    291|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1317:6): [True: 291, False: 0]
  ------------------
 1318|    291|	    && (ntohs(dd->mtu) > oi->ifp->mtu)) {
  ------------------
  |  Branch (1318:9): [True: 23, False: 268]
  ------------------
 1319|     23|		flog_warn(
  ------------------
  |  |  137|     23|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 1320|     23|			EC_OSPF_PACKET,
 1321|     23|			"Packet[DD]: Neighbor %pI4 MTU %u is larger than [%s]'s MTU %u",
 1322|     23|			&nbr->router_id, ntohs(dd->mtu), IF_NAME(oi),
 1323|     23|			oi->ifp->mtu);
 1324|     23|		return;
 1325|     23|	}
 1326|       |
 1327|       |	/*
 1328|       |	 * XXX HACK by Hasso Tepper. Setting N/P bit in NSSA area DD packets is
 1329|       |	 * not
 1330|       |	 * required. In fact at least JunOS sends DD packets with P bit clear.
 1331|       |	 * Until proper solution is developped, this hack should help.
 1332|       |	 *
 1333|       |	 * Update: According to the RFCs, N bit is specified /only/ for Hello
 1334|       |	 * options, unfortunately its use in DD options is not specified. Hence
 1335|       |	 * some
 1336|       |	 * implementations follow E-bit semantics and set it in DD options, and
 1337|       |	 * some
 1338|       |	 * treat it as unspecified and hence follow the directive "default for
 1339|       |	 * options is clear", ie unset.
 1340|       |	 *
 1341|       |	 * Reset the flag, as ospfd follows E-bit semantics.
 1342|       |	 */
 1343|    268|	if ((oi->area->external_routing == OSPF_AREA_NSSA)
  ------------------
  |  |   78|    268|#define OSPF_AREA_NSSA          2
  ------------------
  |  Branch (1343:6): [True: 0, False: 268]
  ------------------
 1344|      0|	    && (CHECK_FLAG(nbr->options, OSPF_OPTION_NP))
  ------------------
  |  |  394|      0|#define CHECK_FLAG(V,F)      ((V) & (F))
  ------------------
  |  Branch (1344:9): [True: 0, False: 0]
  ------------------
 1345|      0|	    && (!CHECK_FLAG(dd->options, OSPF_OPTION_NP))) {
  ------------------
  |  |  394|      0|#define CHECK_FLAG(V,F)      ((V) & (F))
  ------------------
  |  Branch (1345:9): [True: 0, False: 0]
  ------------------
 1346|      0|		if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|      0|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|      0|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1347|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1348|      0|				"Packet[DD]: Neighbour %pI4: Has NSSA capability, sends with N bit clear in DD options",
 1349|      0|				&nbr->router_id);
 1350|      0|		SET_FLAG(dd->options, OSPF_OPTION_NP);
  ------------------
  |  |  395|      0|#define SET_FLAG(V,F)        (V) |= (F)
  ------------------
 1351|      0|	}
 1352|       |
 1353|    268|#ifdef REJECT_IF_TBIT_ON
 1354|    268|	if (CHECK_FLAG(dd->options, OSPF_OPTION_MT)) {
  ------------------
  |  |  394|    268|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 1, False: 267]
  |  |  ------------------
  ------------------
 1355|       |		/*
 1356|       |		 * In Hello protocol, optional capability must have checked
 1357|       |		 * to prevent this T-bit enabled router be my neighbor.
 1358|       |		 */
 1359|      1|		flog_warn(EC_OSPF_PACKET, "Packet[DD]: Neighbor %pI4: T-bit on?",
  ------------------
  |  |  137|      1|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 1360|      1|			  &nbr->router_id);
 1361|      1|		return;
 1362|      1|	}
 1363|    267|#endif /* REJECT_IF_TBIT_ON */
 1364|       |
 1365|    267|	if (CHECK_FLAG(dd->options, OSPF_OPTION_O)
  ------------------
  |  |  394|    534|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 21, False: 246]
  |  |  ------------------
  ------------------
 1366|     21|	    && !CHECK_FLAG(oi->ospf->config, OSPF_OPAQUE_CAPABLE)) {
  ------------------
  |  |  394|     21|#define CHECK_FLAG(V,F)      ((V) & (F))
  ------------------
  |  Branch (1366:9): [True: 21, False: 0]
  ------------------
 1367|       |		/*
 1368|       |		 * This node is not configured to handle O-bit, for now.
 1369|       |		 * Clear it to ignore unsupported capability proposed by
 1370|       |		 * neighbor.
 1371|       |		 */
 1372|     21|		UNSET_FLAG(dd->options, OSPF_OPTION_O);
  ------------------
  |  |  396|     21|#define UNSET_FLAG(V,F)      (V) &= ~(F)
  ------------------
 1373|     21|	}
 1374|       |
 1375|    267|	if (CHECK_FLAG(oi->ospf->config, OSPF_LOG_ADJACENCY_DETAIL))
  ------------------
  |  |  394|    267|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 0, False: 267]
  |  |  ------------------
  ------------------
 1376|      0|		zlog_info(
  ------------------
  |  |  132|      0|#define zlog_info(...) 0
  ------------------
 1377|    267|			"%s:Packet[DD]: Neighbor %pI4 state is %s, seq_num:0x%x, local:0x%x",
 1378|    267|			ospf_get_name(oi->ospf), &nbr->router_id,
 1379|    267|			lookup_msg(ospf_nsm_state_msg, nbr->state, NULL),
 1380|    267|			ntohl(dd->dd_seqnum), nbr->dd_seqnum);
 1381|       |
 1382|       |	/* Process DD packet by neighbor status. */
 1383|    267|	switch (nbr->state) {
 1384|      0|	case NSM_Down:
  ------------------
  |  |   16|      0|#define NSM_Down		2
  ------------------
  |  Branch (1384:2): [True: 0, False: 267]
  ------------------
 1385|      0|	case NSM_Attempt:
  ------------------
  |  |   17|      0|#define NSM_Attempt		3
  ------------------
  |  Branch (1385:2): [True: 0, False: 267]
  ------------------
 1386|      0|	case NSM_TwoWay:
  ------------------
  |  |   19|      0|#define NSM_TwoWay		5
  ------------------
  |  Branch (1386:2): [True: 0, False: 267]
  ------------------
 1387|      0|		if (CHECK_FLAG(oi->ospf->config, OSPF_LOG_ADJACENCY_DETAIL))
  ------------------
  |  |  394|      0|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1388|      0|			zlog_info(
  ------------------
  |  |  132|      0|#define zlog_info(...) 0
  ------------------
 1389|      0|				"Packet[DD]: Neighbor %pI4 state is %s, packet discarded.",
 1390|      0|				&nbr->router_id,
 1391|      0|				lookup_msg(ospf_nsm_state_msg, nbr->state,
 1392|      0|					   NULL));
 1393|      0|		break;
 1394|      0|	case NSM_Init:
  ------------------
  |  |   18|      0|#define NSM_Init		4
  ------------------
  |  Branch (1394:2): [True: 0, False: 267]
  ------------------
 1395|      0|		OSPF_NSM_EVENT_EXECUTE(nbr, NSM_TwoWayReceived);
  ------------------
  |  |   57|      0|	event_execute(master, ospf_nsm_event, (N), (E))
  |  |  ------------------
  |  |  |  |  220|      0|#define event_execute(m, f, a, v) 0
  |  |  ------------------
  ------------------
 1396|       |		/* If the new state is ExStart, the processing of the current
 1397|       |		   packet should then continue in this new state by falling
 1398|       |		   through to case ExStart below.  */
 1399|      0|		if (nbr->state != NSM_ExStart)
  ------------------
  |  |   20|      0|#define NSM_ExStart		6
  ------------------
  |  Branch (1399:7): [True: 0, False: 0]
  ------------------
 1400|      0|			break;
 1401|       |	/* fallthru */
 1402|      0|	case NSM_ExStart:
  ------------------
  |  |   20|      0|#define NSM_ExStart		6
  ------------------
  |  Branch (1402:2): [True: 0, False: 267]
  ------------------
 1403|       |		/* Initial DBD */
 1404|      0|		if ((IS_SET_DD_ALL(dd->flags) == OSPF_DD_FLAG_ALL)
  ------------------
  |  |  116|      0|#define IS_SET_DD_ALL(X)        ((X) & OSPF_DD_FLAG_ALL)
  |  |  ------------------
  |  |  |  |   65|      0|#define OSPF_DD_FLAG_ALL                 0x07
  |  |  ------------------
  ------------------
              		if ((IS_SET_DD_ALL(dd->flags) == OSPF_DD_FLAG_ALL)
  ------------------
  |  |   65|      0|#define OSPF_DD_FLAG_ALL                 0x07
  ------------------
  |  Branch (1404:7): [True: 0, False: 0]
  ------------------
 1405|      0|		    && (size == OSPF_DB_DESC_MIN_SIZE)) {
  ------------------
  |  |   16|      0|#define OSPF_DB_DESC_MIN_SIZE     8U
  ------------------
  |  Branch (1405:10): [True: 0, False: 0]
  ------------------
 1406|      0|			if (IPV4_ADDR_CMP(&nbr->router_id, &oi->ospf->router_id)
  ------------------
  |  |  335|      0|#define IPV4_ADDR_CMP(D,S)   memcmp ((D), (S), IPV4_MAX_BYTELEN)
  |  |  ------------------
  |  |  |  |  333|      0|#define IPV4_MAX_BYTELEN    4
  |  |  ------------------
  ------------------
  |  Branch (1406:8): [True: 0, False: 0]
  ------------------
 1407|      0|			    > 0) {
 1408|       |				/* We're Slave---obey */
 1409|      0|				if (CHECK_FLAG(oi->ospf->config,
  ------------------
  |  |  394|      0|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1410|      0|					       OSPF_LOG_ADJACENCY_DETAIL))
 1411|      0|					zlog_info(
  ------------------
  |  |  132|      0|#define zlog_info(...) 0
  ------------------
 1412|      0|						"Packet[DD]: Neighbor %pI4 Negotiation done (Slave).",
 1413|      0|						&nbr->router_id);
 1414|       |
 1415|      0|				nbr->dd_seqnum = ntohl(dd->dd_seqnum);
 1416|       |
 1417|       |				/* Reset I/MS */
 1418|      0|				UNSET_FLAG(nbr->dd_flags,
  ------------------
  |  |  396|      0|#define UNSET_FLAG(V,F)      (V) &= ~(F)
  ------------------
 1419|      0|					   (OSPF_DD_FLAG_MS | OSPF_DD_FLAG_I));
 1420|      0|			} else {
 1421|       |				/* We're Master, ignore the initial DBD from
 1422|       |				 * Slave */
 1423|      0|				if (CHECK_FLAG(oi->ospf->config,
  ------------------
  |  |  394|      0|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1424|      0|					       OSPF_LOG_ADJACENCY_DETAIL))
 1425|      0|					zlog_info(
  ------------------
  |  |  132|      0|#define zlog_info(...) 0
  ------------------
 1426|      0|						"Packet[DD]: Neighbor %pI4: Initial DBD from Slave, ignoring.",
 1427|      0|						&nbr->router_id);
 1428|      0|				break;
 1429|      0|			}
 1430|      0|		}
 1431|       |		/* Ack from the Slave */
 1432|      0|		else if (!IS_SET_DD_MS(dd->flags) && !IS_SET_DD_I(dd->flags)
  ------------------
  |  |  113|      0|#define IS_SET_DD_MS(X)         ((X) & OSPF_DD_FLAG_MS)
  |  |  ------------------
  |  |  |  |   62|      0|#define OSPF_DD_FLAG_MS                  0x01
  |  |  ------------------
  ------------------
              		else if (!IS_SET_DD_MS(dd->flags) && !IS_SET_DD_I(dd->flags)
  ------------------
  |  |  115|      0|#define IS_SET_DD_I(X)          ((X) & OSPF_DD_FLAG_I)
  |  |  ------------------
  |  |  |  |   64|      0|#define OSPF_DD_FLAG_I                   0x04
  |  |  ------------------
  ------------------
  |  Branch (1432:12): [True: 0, False: 0]
  |  Branch (1432:40): [True: 0, False: 0]
  ------------------
 1433|      0|			 && ntohl(dd->dd_seqnum) == nbr->dd_seqnum
  ------------------
  |  Branch (1433:8): [True: 0, False: 0]
  ------------------
 1434|      0|			 && IPV4_ADDR_CMP(&nbr->router_id, &oi->ospf->router_id)
  ------------------
  |  |  335|      0|#define IPV4_ADDR_CMP(D,S)   memcmp ((D), (S), IPV4_MAX_BYTELEN)
  |  |  ------------------
  |  |  |  |  333|      0|#define IPV4_MAX_BYTELEN    4
  |  |  ------------------
  ------------------
  |  Branch (1434:8): [True: 0, False: 0]
  ------------------
 1435|      0|				    < 0) {
 1436|      0|			zlog_info(
  ------------------
  |  |  132|      0|#define zlog_info(...) 0
  ------------------
 1437|      0|				"Packet[DD]: Neighbor %pI4 Negotiation done (Master).",
 1438|      0|				&nbr->router_id);
 1439|       |			/* Reset I, leaving MS */
 1440|      0|			UNSET_FLAG(nbr->dd_flags, OSPF_DD_FLAG_I);
  ------------------
  |  |  396|      0|#define UNSET_FLAG(V,F)      (V) &= ~(F)
  ------------------
 1441|      0|		} else {
 1442|      0|			flog_warn(EC_OSPF_PACKET,
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 1443|      0|				  "Packet[DD]: Neighbor %pI4 Negotiation fails.",
 1444|      0|				  &nbr->router_id);
 1445|      0|			break;
 1446|      0|		}
 1447|       |
 1448|       |		/* This is where the real Options are saved */
 1449|      0|		nbr->options = dd->options;
 1450|       |
 1451|      0|		if (CHECK_FLAG(oi->ospf->config, OSPF_OPAQUE_CAPABLE)) {
  ------------------
  |  |  394|      0|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1452|      0|			if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|      0|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|      0|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1453|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1454|      0|					"Neighbor[%pI4] is %sOpaque-capable.",
 1455|      0|					&nbr->router_id,
 1456|      0|					CHECK_FLAG(nbr->options, OSPF_OPTION_O)
 1457|      0|						? ""
 1458|      0|						: "NOT ");
 1459|       |
 1460|      0|			if (!CHECK_FLAG(nbr->options, OSPF_OPTION_O)
  ------------------
  |  |  394|      0|#define CHECK_FLAG(V,F)      ((V) & (F))
  ------------------
  |  Branch (1460:8): [True: 0, False: 0]
  ------------------
 1461|      0|			    && IPV4_ADDR_SAME(&DR(oi),
  ------------------
  |  |  342|      0|#define IPV4_ADDR_SAME(A,B)  ipv4_addr_same((A), (B))
  |  |  ------------------
  |  |  |  Branch (342:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1462|      0|					      &nbr->address.u.prefix4)) {
 1463|      0|				flog_warn(
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 1464|      0|					EC_OSPF_PACKET,
 1465|      0|					"DR-neighbor[%pI4] is NOT opaque-capable; Opaque-LSAs cannot be reliably advertised in this network.",
 1466|      0|					&nbr->router_id);
 1467|       |				/* This situation is undesirable, but not a real
 1468|       |				 * error. */
 1469|      0|			}
 1470|      0|		}
 1471|       |
 1472|      0|		OSPF_NSM_EVENT_EXECUTE(nbr, NSM_NegotiationDone);
  ------------------
  |  |   57|      0|	event_execute(master, ospf_nsm_event, (N), (E))
  |  |  ------------------
  |  |  |  |  220|      0|#define event_execute(m, f, a, v) 0
  |  |  ------------------
  ------------------
 1473|       |
 1474|       |		/* continue processing rest of packet. */
 1475|      0|		ospf_db_desc_proc(s, oi, nbr, dd, size);
 1476|      0|		break;
 1477|    267|	case NSM_Exchange:
  ------------------
  |  |   21|    267|#define NSM_Exchange		7
  ------------------
  |  Branch (1477:2): [True: 267, False: 0]
  ------------------
 1478|    267|		if (ospf_db_desc_is_dup(dd, nbr)) {
  ------------------
  |  Branch (1478:7): [True: 1, False: 266]
  ------------------
 1479|      1|			if (IS_SET_DD_MS(nbr->dd_flags))
  ------------------
  |  |  113|      1|#define IS_SET_DD_MS(X)         ((X) & OSPF_DD_FLAG_MS)
  |  |  ------------------
  |  |  |  |   62|      1|#define OSPF_DD_FLAG_MS                  0x01
  |  |  ------------------
  |  |  |  Branch (113:33): [True: 1, False: 0]
  |  |  ------------------
  ------------------
 1480|       |				/* Master: discard duplicated DD packet. */
 1481|      1|				zlog_info(
  ------------------
  |  |  132|      1|#define zlog_info(...) 0
  ------------------
 1482|      1|					"Packet[DD] (Master): Neighbor %pI4 packet duplicated.",
 1483|      1|					&nbr->router_id);
 1484|      0|			else
 1485|       |			/* Slave: cause to retransmit the last Database
 1486|       |			   Description. */
 1487|      0|			{
 1488|      0|				zlog_info(
  ------------------
  |  |  132|      0|#define zlog_info(...) 0
  ------------------
 1489|      0|					"Packet[DD] [Slave]: Neighbor %pI4 packet duplicated.",
 1490|      0|					&nbr->router_id);
 1491|      0|				ospf_db_desc_resend(nbr);
 1492|      0|			}
 1493|      1|			break;
 1494|      1|		}
 1495|       |
 1496|       |		/* Otherwise DD packet should be checked. */
 1497|       |		/* Check Master/Slave bit mismatch */
 1498|    266|		if (IS_SET_DD_MS(dd->flags)
  ------------------
  |  |  113|    266|#define IS_SET_DD_MS(X)         ((X) & OSPF_DD_FLAG_MS)
  |  |  ------------------
  |  |  |  |   62|    266|#define OSPF_DD_FLAG_MS                  0x01
  |  |  ------------------
  ------------------
  |  Branch (1498:7): [True: 6, False: 260]
  ------------------
 1499|    266|		    != IS_SET_DD_MS(nbr->last_recv.flags)) {
  ------------------
  |  |  113|    266|#define IS_SET_DD_MS(X)         ((X) & OSPF_DD_FLAG_MS)
  |  |  ------------------
  |  |  |  |   62|    266|#define OSPF_DD_FLAG_MS                  0x01
  |  |  ------------------
  ------------------
 1500|      6|			flog_warn(EC_OSPF_PACKET,
  ------------------
  |  |  137|      6|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 1501|      6|				  "Packet[DD]: Neighbor %pI4 MS-bit mismatch.",
 1502|      6|				  &nbr->router_id);
 1503|      6|			OSPF_NSM_EVENT_SCHEDULE(nbr, NSM_SeqNumberMismatch);
 1504|      6|			if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|      6|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|      6|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|      6|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1505|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1506|      6|					"Packet[DD]: dd->flags=%d, nbr->dd_flags=%d",
 1507|      6|					dd->flags, nbr->dd_flags);
 1508|      6|			break;
 1509|      6|		}
 1510|       |
 1511|       |		/* Check initialize bit is set. */
 1512|    260|		if (IS_SET_DD_I(dd->flags)) {
  ------------------
  |  |  115|    260|#define IS_SET_DD_I(X)          ((X) & OSPF_DD_FLAG_I)
  |  |  ------------------
  |  |  |  |   64|    260|#define OSPF_DD_FLAG_I                   0x04
  |  |  ------------------
  |  |  |  Branch (115:33): [True: 3, False: 257]
  |  |  ------------------
  ------------------
 1513|      3|			zlog_info("Packet[DD]: Neighbor %pI4 I-bit set.",
  ------------------
  |  |  132|      3|#define zlog_info(...) 0
  ------------------
 1514|      3|				  &nbr->router_id);
 1515|      3|			OSPF_NSM_EVENT_SCHEDULE(nbr, NSM_SeqNumberMismatch);
 1516|      3|			break;
 1517|      3|		}
 1518|       |
 1519|       |		/* Check DD Options. */
 1520|    257|		if (dd->options != nbr->options) {
  ------------------
  |  Branch (1520:7): [True: 20, False: 237]
  ------------------
 1521|     20|			flog_warn(EC_OSPF_PACKET,
  ------------------
  |  |  137|     20|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 1522|     20|				  "Packet[DD]: Neighbor %pI4 options mismatch.",
 1523|     20|				  &nbr->router_id);
 1524|     20|			OSPF_NSM_EVENT_SCHEDULE(nbr, NSM_SeqNumberMismatch);
 1525|     20|			break;
 1526|     20|		}
 1527|       |
 1528|       |		/* Check DD sequence number. */
 1529|    237|		if ((IS_SET_DD_MS(nbr->dd_flags)
  ------------------
  |  |  113|    474|#define IS_SET_DD_MS(X)         ((X) & OSPF_DD_FLAG_MS)
  |  |  ------------------
  |  |  |  |   62|    237|#define OSPF_DD_FLAG_MS                  0x01
  |  |  ------------------
  |  |  |  Branch (113:33): [True: 237, False: 0]
  |  |  ------------------
  ------------------
 1530|    237|		     && ntohl(dd->dd_seqnum) != nbr->dd_seqnum)
  ------------------
  |  Branch (1530:11): [True: 85, False: 152]
  ------------------
 1531|    152|		    || (!IS_SET_DD_MS(nbr->dd_flags)
  ------------------
  |  |  113|    304|#define IS_SET_DD_MS(X)         ((X) & OSPF_DD_FLAG_MS)
  |  |  ------------------
  |  |  |  |   62|    152|#define OSPF_DD_FLAG_MS                  0x01
  |  |  ------------------
  ------------------
  |  Branch (1531:11): [True: 0, False: 152]
  ------------------
 1532|    152|			&& ntohl(dd->dd_seqnum) != nbr->dd_seqnum + 1)) {
  ------------------
  |  Branch (1532:7): [True: 0, False: 0]
  ------------------
 1533|     85|			flog_warn(
  ------------------
  |  |  137|     85|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 1534|     85|				EC_OSPF_PACKET,
 1535|     85|				"Packet[DD]: Neighbor %pI4 sequence number mismatch.",
 1536|     85|				&nbr->router_id);
 1537|     85|			OSPF_NSM_EVENT_SCHEDULE(nbr, NSM_SeqNumberMismatch);
 1538|     85|			break;
 1539|     85|		}
 1540|       |
 1541|       |		/* Continue processing rest of packet. */
 1542|    152|		ospf_db_desc_proc(s, oi, nbr, dd, size);
 1543|    152|		break;
 1544|      0|	case NSM_Loading:
  ------------------
  |  |   22|      0|#define NSM_Loading		8
  ------------------
  |  Branch (1544:2): [True: 0, False: 267]
  ------------------
 1545|      0|	case NSM_Full:
  ------------------
  |  |   23|      0|#define NSM_Full		9
  ------------------
  |  Branch (1545:2): [True: 0, False: 267]
  ------------------
 1546|      0|		if (ospf_db_desc_is_dup(dd, nbr)) {
  ------------------
  |  Branch (1546:7): [True: 0, False: 0]
  ------------------
 1547|      0|			if (IS_SET_DD_MS(nbr->dd_flags)) {
  ------------------
  |  |  113|      0|#define IS_SET_DD_MS(X)         ((X) & OSPF_DD_FLAG_MS)
  |  |  ------------------
  |  |  |  |   62|      0|#define OSPF_DD_FLAG_MS                  0x01
  |  |  ------------------
  |  |  |  Branch (113:33): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1548|       |				/* Master should discard duplicate DD packet. */
 1549|      0|				zlog_info(
  ------------------
  |  |  132|      0|#define zlog_info(...) 0
  ------------------
 1550|      0|					"Packet[DD]: Neighbor %pI4 duplicated, packet discarded.",
 1551|      0|					&nbr->router_id);
 1552|      0|				break;
 1553|      0|			} else {
 1554|      0|				if (monotime_since(&nbr->last_send_ts, NULL)
  ------------------
  |  Branch (1554:9): [True: 0, False: 0]
  ------------------
 1555|      0|				    < nbr->v_inactivity * 1000000LL) {
 1556|       |					/* In states Loading and Full the slave
 1557|       |					   must resend
 1558|       |					   its last Database Description packet
 1559|       |					   in response to
 1560|       |					   duplicate Database Description
 1561|       |					   packets received
 1562|       |					   from the master.  For this reason the
 1563|       |					   slave must
 1564|       |					   wait RouterDeadInterval seconds
 1565|       |					   before freeing the
 1566|       |					   last Database Description packet.
 1567|       |					   Reception of a
 1568|       |					   Database Description packet from the
 1569|       |					   master after
 1570|       |					   this interval will generate a
 1571|       |					   SeqNumberMismatch
 1572|       |					   neighbor event. RFC2328 Section 10.8
 1573|       |					   */
 1574|      0|					ospf_db_desc_resend(nbr);
 1575|      0|					break;
 1576|      0|				}
 1577|      0|			}
 1578|      0|		}
 1579|       |
 1580|      0|		OSPF_NSM_EVENT_SCHEDULE(nbr, NSM_SeqNumberMismatch);
 1581|      0|		break;
 1582|      0|	default:
  ------------------
  |  Branch (1582:2): [True: 0, False: 267]
  ------------------
 1583|      0|		flog_warn(EC_OSPF_PACKET,
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 1584|      0|			  "Packet[DD]: Neighbor %pI4 NSM illegal status %u.",
 1585|      0|			  &nbr->router_id, nbr->state);
 1586|      0|		break;
 1587|    267|	}
 1588|    267|}
ospf_packet.c:ospf_db_desc_proc:
 1149|    152|{
 1150|    152|	struct ospf_lsa *new, *find;
 1151|    152|	struct lsa_header *lsah;
 1152|       |
 1153|    152|	stream_forward_getp(s, OSPF_DB_DESC_MIN_SIZE);
  ------------------
  |  |   16|    152|#define OSPF_DB_DESC_MIN_SIZE     8U
  ------------------
 1154|  9.40k|	for (size -= OSPF_DB_DESC_MIN_SIZE; size >= OSPF_LSA_HEADER_SIZE;
  ------------------
  |  |   16|    152|#define OSPF_DB_DESC_MIN_SIZE     8U
  ------------------
              	for (size -= OSPF_DB_DESC_MIN_SIZE; size >= OSPF_LSA_HEADER_SIZE;
  ------------------
  |  |   36|  9.40k|#define OSPF_LSA_HEADER_SIZE	     20U
  ------------------
  |  Branch (1154:38): [True: 9.31k, False: 94]
  ------------------
 1155|  9.31k|	     size -= OSPF_LSA_HEADER_SIZE) {
  ------------------
  |  |   36|  9.25k|#define OSPF_LSA_HEADER_SIZE	     20U
  ------------------
 1156|  9.31k|		lsah = (struct lsa_header *)stream_pnt(s);
 1157|  9.31k|		stream_forward_getp(s, OSPF_LSA_HEADER_SIZE);
  ------------------
  |  |   36|  9.31k|#define OSPF_LSA_HEADER_SIZE	     20U
  ------------------
 1158|       |
 1159|       |		/* Unknown LS type. */
 1160|  9.31k|		if (lsah->type < OSPF_MIN_LSA || lsah->type >= OSPF_MAX_LSA) {
  ------------------
  |  |   19|  18.6k|#define OSPF_MIN_LSA		1  /* begin range here */
  ------------------
              		if (lsah->type < OSPF_MIN_LSA || lsah->type >= OSPF_MAX_LSA) {
  ------------------
  |  |   20|  9.31k|#define OSPF_MAX_LSA           12
  ------------------
  |  Branch (1160:7): [True: 0, False: 9.31k]
  |  Branch (1160:36): [True: 0, False: 9.31k]
  ------------------
 1161|      0|			flog_warn(EC_OSPF_PACKET,
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 1162|      0|				  "Packet [DD:RECV]: Unknown LS type %d.",
 1163|      0|				  lsah->type);
 1164|      0|			OSPF_NSM_EVENT_SCHEDULE(nbr, NSM_SeqNumberMismatch);
 1165|      0|			return;
 1166|      0|		}
 1167|       |
 1168|  9.31k|		if (IS_OPAQUE_LSA(lsah->type)
  ------------------
  |  |   15|  18.6k|	((type) == OSPF_OPAQUE_LINK_LSA || (type) == OSPF_OPAQUE_AREA_LSA      \
  |  |  ------------------
  |  |  |  |   32|  18.6k|#define OSPF_OPAQUE_LINK_LSA	      9
  |  |  ------------------
  |  |               	((type) == OSPF_OPAQUE_LINK_LSA || (type) == OSPF_OPAQUE_AREA_LSA      \
  |  |  ------------------
  |  |  |  |   33|  18.6k|#define OSPF_OPAQUE_AREA_LSA	     10
  |  |  ------------------
  |  |  |  Branch (15:3): [True: 18, False: 9.29k]
  |  |  |  Branch (15:37): [True: 22, False: 9.27k]
  |  |  ------------------
  |  |   16|  18.6k|	 || (type) == OSPF_OPAQUE_AS_LSA)
  |  |  ------------------
  |  |  |  |   34|  9.27k|#define OSPF_OPAQUE_AS_LSA	     11
  |  |  ------------------
  |  |  |  Branch (16:6): [True: 18, False: 9.25k]
  |  |  ------------------
  ------------------
 1169|     58|		    && !CHECK_FLAG(nbr->options, OSPF_OPTION_O)) {
  ------------------
  |  |  394|     58|#define CHECK_FLAG(V,F)      ((V) & (F))
  ------------------
  |  Branch (1169:10): [True: 58, False: 0]
  ------------------
 1170|     58|			flog_warn(EC_OSPF_PACKET,
  ------------------
  |  |  137|     58|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 1171|     58|				  "LSA[Type%d:%pI4] from %pI4: Opaque capability mismatch?",
 1172|     58|				  lsah->type, &lsah->id, &lsah->adv_router);
 1173|     58|			OSPF_NSM_EVENT_SCHEDULE(nbr, NSM_SeqNumberMismatch);
 1174|     58|			return;
 1175|     58|		}
 1176|       |
 1177|  9.25k|		switch (lsah->type) {
 1178|    473|		case OSPF_AS_EXTERNAL_LSA:
  ------------------
  |  |   28|    473|#define OSPF_AS_EXTERNAL_LSA          5
  ------------------
  |  Branch (1178:3): [True: 473, False: 8.78k]
  ------------------
 1179|    473|		case OSPF_OPAQUE_AS_LSA:
  ------------------
  |  |   34|    473|#define OSPF_OPAQUE_AS_LSA	     11
  ------------------
  |  Branch (1179:3): [True: 0, False: 9.25k]
  ------------------
 1180|       |			/* Check for stub area.  Reject if AS-External from stub
 1181|       |			   but
 1182|       |			   allow if from NSSA. */
 1183|    473|			if (oi->area->external_routing == OSPF_AREA_STUB) {
  ------------------
  |  |   77|    473|#define OSPF_AREA_STUB          1
  ------------------
  |  Branch (1183:8): [True: 0, False: 473]
  ------------------
 1184|      0|				flog_warn(
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 1185|      0|					EC_OSPF_PACKET,
 1186|      0|					"Packet [DD:RECV]: LSA[Type%d:%pI4] from %s area.",
 1187|      0|					lsah->type, &lsah->id,
 1188|      0|					(oi->area->external_routing
 1189|      0|					 == OSPF_AREA_STUB)
 1190|      0|						? "STUB"
 1191|      0|						: "NSSA");
 1192|      0|				OSPF_NSM_EVENT_SCHEDULE(nbr,
 1193|      0|							NSM_SeqNumberMismatch);
 1194|      0|				return;
 1195|      0|			}
 1196|    473|			break;
 1197|  8.78k|		default:
  ------------------
  |  Branch (1197:3): [True: 8.78k, False: 473]
  ------------------
 1198|  8.78k|			break;
 1199|  9.25k|		}
 1200|       |
 1201|       |		/* Create LS-request object. */
 1202|  9.25k|		new = ospf_ls_request_new(lsah);
 1203|       |
 1204|       |		/* Lookup received LSA, then add LS request list. */
 1205|  9.25k|		find = ospf_lsa_lookup_by_header(oi->area, lsah);
 1206|       |
 1207|       |		/* ospf_lsa_more_recent is fine with NULL pointers */
 1208|  9.25k|		switch (ospf_lsa_more_recent(find, new)) {
 1209|  8.86k|		case -1:
  ------------------
  |  Branch (1209:3): [True: 8.86k, False: 393]
  ------------------
 1210|       |			/* Neighbour has a more recent LSA, we must request it
 1211|       |			 */
 1212|  8.86k|			ospf_ls_request_add(nbr, new);
 1213|       |		/* fallthru */
 1214|  8.86k|		case 0:
  ------------------
  |  Branch (1214:3): [True: 0, False: 9.25k]
  ------------------
 1215|       |			/* If we have a copy of this LSA, it's either less
 1216|       |			 * recent
 1217|       |			 * and we're requesting it from neighbour (the case
 1218|       |			 * above), or
 1219|       |			 * it's as recent and we both have same copy (this
 1220|       |			 * case).
 1221|       |			 *
 1222|       |			 * In neither of these two cases is there any point in
 1223|       |			 * describing our copy of the LSA to the neighbour in a
 1224|       |			 * DB-Summary packet, if we're still intending to do so.
 1225|       |			 *
 1226|       |			 * See: draft-ogier-ospf-dbex-opt-00.txt, describing the
 1227|       |			 * backward compatible optimisation to OSPF DB Exchange
 1228|       |			 * /
 1229|       |			 * DB Description process implemented here.
 1230|       |			 */
 1231|  8.86k|			if (find)
  ------------------
  |  Branch (1231:8): [True: 373, False: 8.49k]
  ------------------
 1232|    373|				ospf_lsdb_delete(&nbr->db_sum, find);
 1233|  8.86k|			ospf_lsa_discard(new);
 1234|  8.86k|			break;
 1235|    393|		default:
  ------------------
  |  Branch (1235:3): [True: 393, False: 8.86k]
  ------------------
 1236|       |			/* We have the more recent copy, nothing specific to do:
 1237|       |			 * - no need to request neighbours stale copy
 1238|       |			 * - must leave DB summary list copy alone
 1239|       |			 */
 1240|    393|			if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|    393|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|    393|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|    393|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 393]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1241|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1242|    393|					"Packet [DD:RECV]: LSA received Type %d, ID %pI4 is not recent.",
 1243|    393|					lsah->type, &lsah->id);
 1244|    393|			ospf_lsa_discard(new);
 1245|  9.25k|		}
 1246|  9.25k|	}
 1247|       |
 1248|       |	/* Master */
 1249|     94|	if (IS_SET_DD_MS(nbr->dd_flags)) {
  ------------------
  |  |  113|     94|#define IS_SET_DD_MS(X)         ((X) & OSPF_DD_FLAG_MS)
  |  |  ------------------
  |  |  |  |   62|     94|#define OSPF_DD_FLAG_MS                  0x01
  |  |  ------------------
  |  |  |  Branch (113:33): [True: 94, False: 0]
  |  |  ------------------
  ------------------
 1250|     94|		nbr->dd_seqnum++;
 1251|       |
 1252|       |		/* Both sides have no More, then we're done with Exchange */
 1253|     94|		if (!IS_SET_DD_M(dd->flags) && !IS_SET_DD_M(nbr->dd_flags))
  ------------------
  |  |  114|    188|#define IS_SET_DD_M(X)          ((X) & OSPF_DD_FLAG_M)
  |  |  ------------------
  |  |  |  |   63|     94|#define OSPF_DD_FLAG_M                   0x02
  |  |  ------------------
  ------------------
              		if (!IS_SET_DD_M(dd->flags) && !IS_SET_DD_M(nbr->dd_flags))
  ------------------
  |  |  114|     54|#define IS_SET_DD_M(X)          ((X) & OSPF_DD_FLAG_M)
  |  |  ------------------
  |  |  |  |   63|     54|#define OSPF_DD_FLAG_M                   0x02
  |  |  ------------------
  ------------------
  |  Branch (1253:7): [True: 54, False: 40]
  |  Branch (1253:34): [True: 4, False: 50]
  ------------------
 1254|      4|			OSPF_NSM_EVENT_SCHEDULE(nbr, NSM_ExchangeDone);
 1255|     90|		else
 1256|     90|			ospf_db_desc_send(nbr);
 1257|     94|	}
 1258|       |	/* Slave */
 1259|      0|	else {
 1260|      0|		nbr->dd_seqnum = ntohl(dd->dd_seqnum);
 1261|       |
 1262|       |		/* Send DD packet in reply.
 1263|       |		 *
 1264|       |		 * Must be done to acknowledge the Master's DD, regardless of
 1265|       |		 * whether we have more LSAs ourselves to describe.
 1266|       |		 *
 1267|       |		 * This function will clear the 'More' bit, if after this DD
 1268|       |		 * we have no more LSAs to describe to the master..
 1269|       |		 */
 1270|      0|		ospf_db_desc_send(nbr);
 1271|       |
 1272|       |		/* Slave can raise ExchangeDone now, if master is also done */
 1273|      0|		if (!IS_SET_DD_M(dd->flags) && !IS_SET_DD_M(nbr->dd_flags))
  ------------------
  |  |  114|      0|#define IS_SET_DD_M(X)          ((X) & OSPF_DD_FLAG_M)
  |  |  ------------------
  |  |  |  |   63|      0|#define OSPF_DD_FLAG_M                   0x02
  |  |  ------------------
  ------------------
              		if (!IS_SET_DD_M(dd->flags) && !IS_SET_DD_M(nbr->dd_flags))
  ------------------
  |  |  114|      0|#define IS_SET_DD_M(X)          ((X) & OSPF_DD_FLAG_M)
  |  |  ------------------
  |  |  |  |   63|      0|#define OSPF_DD_FLAG_M                   0x02
  |  |  ------------------
  ------------------
  |  Branch (1273:7): [True: 0, False: 0]
  |  Branch (1273:34): [True: 0, False: 0]
  ------------------
 1274|      0|			OSPF_NSM_EVENT_SCHEDULE(nbr, NSM_ExchangeDone);
 1275|      0|	}
 1276|       |
 1277|       |	/* Save received neighbor values from DD. */
 1278|     94|	ospf_db_desc_save_current(nbr, dd);
 1279|       |
 1280|     94|	if (!nbr->t_ls_req)
  ------------------
  |  Branch (1280:6): [True: 94, False: 0]
  ------------------
 1281|     94|		ospf_ls_req_send(nbr);
 1282|     94|}
ospf_packet.c:ospf_db_desc_save_current:
 1139|     94|{
 1140|     94|	nbr->last_recv.flags = dd->flags;
 1141|     94|	nbr->last_recv.options = dd->options;
 1142|       |	nbr->last_recv.dd_seqnum = ntohl(dd->dd_seqnum);
 1143|     94|}
ospf_packet.c:ospf_db_desc_is_dup:
 1286|    267|{
 1287|       |	/* Is DD duplicated? */
 1288|    267|	if (dd->options == nbr->last_recv.options
  ------------------
  |  Branch (1288:6): [True: 246, False: 21]
  ------------------
 1289|    246|	    && dd->flags == nbr->last_recv.flags
  ------------------
  |  Branch (1289:9): [True: 56, False: 190]
  ------------------
 1290|     56|	    && dd->dd_seqnum == htonl(nbr->last_recv.dd_seqnum))
  ------------------
  |  Branch (1290:9): [True: 1, False: 55]
  ------------------
 1291|      1|		return 1;
 1292|       |
 1293|    266|	return 0;
 1294|    267|}
ospf_packet.c:ospf_ls_req:
 1596|    275|{
 1597|    275|	struct ospf_neighbor *nbr;
 1598|    275|	uint32_t ls_type;
 1599|    275|	struct in_addr ls_id;
 1600|    275|	struct in_addr adv_router;
 1601|    275|	struct ospf_lsa *find;
 1602|    275|	struct list *ls_upd;
 1603|    275|	unsigned int length;
 1604|       |
 1605|       |	/* Increment statistics. */
 1606|    275|	oi->ls_req_in++;
 1607|       |
 1608|    275|	nbr = ospf_nbr_lookup(oi, iph, ospfh);
 1609|    275|	if (nbr == NULL) {
  ------------------
  |  Branch (1609:6): [True: 0, False: 275]
  ------------------
 1610|      0|		flog_warn(EC_OSPF_PACKET,
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 1611|      0|			  "Link State Request: Unknown Neighbor %pI4",
 1612|      0|			  &ospfh->router_id);
 1613|      0|		return;
 1614|      0|	}
 1615|       |
 1616|       |	/* Neighbor State should be Exchange or later. */
 1617|    275|	if (nbr->state != NSM_Exchange && nbr->state != NSM_Loading
  ------------------
  |  |   21|    550|#define NSM_Exchange		7
  ------------------
              	if (nbr->state != NSM_Exchange && nbr->state != NSM_Loading
  ------------------
  |  |   22|    275|#define NSM_Loading		8
  ------------------
  |  Branch (1617:6): [True: 0, False: 275]
  |  Branch (1617:36): [True: 0, False: 0]
  ------------------
 1618|      0|	    && nbr->state != NSM_Full) {
  ------------------
  |  |   23|      0|#define NSM_Full		9
  ------------------
  |  Branch (1618:9): [True: 0, False: 0]
  ------------------
 1619|      0|		flog_warn(
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 1620|      0|			EC_OSPF_PACKET,
 1621|      0|			"Link State Request received from %pI4: Neighbor state is %s, packet discarded.",
 1622|      0|			&ospfh->router_id,
 1623|      0|			lookup_msg(ospf_nsm_state_msg, nbr->state, NULL));
 1624|      0|		return;
 1625|      0|	}
 1626|       |
 1627|       |	/* Send Link State Update for ALL requested LSAs. */
 1628|    275|	ls_upd = list_new();
 1629|    275|	length = OSPF_HEADER_SIZE + OSPF_LS_UPD_MIN_SIZE;
  ------------------
  |  |   10|    275|#define OSPF_HEADER_SIZE         24U
  ------------------
              	length = OSPF_HEADER_SIZE + OSPF_LS_UPD_MIN_SIZE;
  ------------------
  |  |   18|    275|#define OSPF_LS_UPD_MIN_SIZE      4U
  ------------------
 1630|       |
 1631|  14.4k|	while (size >= OSPF_LSA_KEY_SIZE) {
  ------------------
  |  | 1590|  14.4k|#define OSPF_LSA_KEY_SIZE       12 /* type(4) + id(4) + ar(4) */
  ------------------
  |  Branch (1631:9): [True: 14.3k, False: 130]
  ------------------
 1632|       |		/* Get one slice of Link State Request. */
 1633|  14.3k|		ls_type = stream_getl(s);
 1634|  14.3k|		ls_id.s_addr = stream_get_ipv4(s);
 1635|  14.3k|		adv_router.s_addr = stream_get_ipv4(s);
 1636|       |
 1637|       |		/* Verify LSA type. */
 1638|  14.3k|		if (ls_type < OSPF_MIN_LSA || ls_type >= OSPF_MAX_LSA) {
  ------------------
  |  |   19|  28.6k|#define OSPF_MIN_LSA		1  /* begin range here */
  ------------------
              		if (ls_type < OSPF_MIN_LSA || ls_type >= OSPF_MAX_LSA) {
  ------------------
  |  |   20|  14.3k|#define OSPF_MAX_LSA           12
  ------------------
  |  Branch (1638:7): [True: 12, False: 14.3k]
  |  Branch (1638:33): [True: 133, False: 14.1k]
  ------------------
 1639|    145|			OSPF_NSM_EVENT_SCHEDULE(nbr, NSM_BadLSReq);
 1640|    145|			list_delete(&ls_upd);
 1641|    145|			return;
 1642|    145|		}
 1643|       |
 1644|       |		/* Search proper LSA in LSDB. */
 1645|  14.1k|		find = ospf_lsa_lookup(oi->ospf, oi->area, ls_type, ls_id,
 1646|  14.1k|				       adv_router);
 1647|       |#ifndef FUZZING
 1648|       |		if (find == NULL) {
 1649|       |			OSPF_NSM_EVENT_SCHEDULE(nbr, NSM_BadLSReq);
 1650|       |			list_delete(&ls_upd);
 1651|       |			return;
 1652|       |		}
 1653|       |
 1654|       |		/* Packet overflows MTU size, send immediately. */
 1655|       |		if (length + ntohs(find->data->length) > ospf_packet_max(oi)) {
 1656|       |			if (oi->type == OSPF_IFTYPE_NBMA)
 1657|       |				ospf_ls_upd_send(nbr, ls_upd,
 1658|       |						 OSPF_SEND_PACKET_DIRECT, 0);
 1659|       |			else
 1660|       |				ospf_ls_upd_send(nbr, ls_upd,
 1661|       |						 OSPF_SEND_PACKET_INDIRECT, 0);
 1662|       |
 1663|       |			/* Only remove list contents.  Keep ls_upd. */
 1664|       |			list_delete_all_node(ls_upd);
 1665|       |
 1666|       |			length = OSPF_HEADER_SIZE + OSPF_LS_UPD_MIN_SIZE;
 1667|       |		}
 1668|       |
 1669|       |		/* Append LSA to update list. */
 1670|       |		listnode_add(ls_upd, find);
 1671|       |		length += ntohs(find->data->length);
 1672|       |#endif
 1673|  14.1k|		size -= OSPF_LSA_KEY_SIZE;
  ------------------
  |  | 1590|  14.1k|#define OSPF_LSA_KEY_SIZE       12 /* type(4) + id(4) + ar(4) */
  ------------------
 1674|  14.1k|	}
 1675|    130|#ifdef FUZZING
 1676|    130|	list_delete(&ls_upd);
 1677|    130|	return;
 1678|      0|#endif
 1679|       |
 1680|       |	/* Send rest of Link State Update. */
 1681|      0|	if (listcount(ls_upd) > 0) {
  ------------------
  |  |   55|      0|#define listcount(X) ((X)->count)
  ------------------
  |  Branch (1681:6): [True: 0, False: 0]
  ------------------
 1682|      0|		if (oi->type == OSPF_IFTYPE_NBMA)
  ------------------
  |  |   46|      0|#define OSPF_IFTYPE_NBMA		3
  ------------------
  |  Branch (1682:7): [True: 0, False: 0]
  ------------------
 1683|      0|			ospf_ls_upd_send(nbr, ls_upd, OSPF_SEND_PACKET_DIRECT,
  ------------------
  |  |   27|      0|#define OSPF_SEND_PACKET_DIRECT         1
  ------------------
 1684|      0|					 0);
 1685|      0|		else
 1686|      0|			ospf_ls_upd_send(nbr, ls_upd, OSPF_SEND_PACKET_INDIRECT,
  ------------------
  |  |   28|      0|#define OSPF_SEND_PACKET_INDIRECT       2
  ------------------
 1687|      0|					 0);
 1688|       |
 1689|      0|		list_delete(&ls_upd);
 1690|      0|	} else
 1691|      0|		list_delete(&ls_upd);
 1692|      0|}
ospf_packet.c:ospf_ls_upd:
 1850|  1.49k|{
 1851|  1.49k|	struct ospf_neighbor *nbr;
 1852|  1.49k|	struct list *lsas;
 1853|  1.49k|	struct listnode *node, *nnode;
 1854|  1.49k|	struct ospf_lsa *lsa = NULL;
 1855|       |	/* unsigned long ls_req_found = 0; */
 1856|       |
 1857|       |	/* Dis-assemble the stream, update each entry, re-encapsulate for
 1858|       |	 * flooding */
 1859|       |
 1860|       |	/* Increment statistics. */
 1861|  1.49k|	oi->ls_upd_in++;
 1862|       |
 1863|       |	/* Check neighbor. */
 1864|  1.49k|	nbr = ospf_nbr_lookup(oi, iph, ospfh);
 1865|  1.49k|	if (nbr == NULL) {
  ------------------
  |  Branch (1865:6): [True: 0, False: 1.49k]
  ------------------
 1866|      0|		flog_warn(EC_OSPF_PACKET,
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 1867|      0|			  "Link State Update: Unknown Neighbor %pI4 on int: %s",
 1868|      0|			  &ospfh->router_id, IF_NAME(oi));
 1869|      0|		return;
 1870|      0|	}
 1871|       |
 1872|       |	/* Check neighbor state. */
 1873|  1.49k|	if (nbr->state < NSM_Exchange) {
  ------------------
  |  |   21|  1.49k|#define NSM_Exchange		7
  ------------------
  |  Branch (1873:6): [True: 0, False: 1.49k]
  ------------------
 1874|      0|		if (IS_DEBUG_OSPF(nsm, NSM_EVENTS))
  ------------------
  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   28|      0|#define OSPF_DEBUG_NSM_EVENTS	0x02
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1875|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1876|      0|				"Link State Update: Neighbor[%pI4] state %s is less than Exchange",
 1877|      0|				&ospfh->router_id,
 1878|      0|				lookup_msg(ospf_nsm_state_msg, nbr->state,
 1879|      0|					   NULL));
 1880|      0|		return;
 1881|      0|	}
 1882|       |
 1883|       |	/* Get list of LSAs from Link State Update packet. - Also performs
 1884|       |	 * Stages 1 (validate LSA checksum) and 2 (check for LSA consistent
 1885|       |	 * type) of section 13.
 1886|       |	 */
 1887|  1.49k|	lsas = ospf_ls_upd_list_lsa(nbr, s, oi, size);
 1888|       |
 1889|  1.49k|	if (lsas == NULL)
  ------------------
  |  Branch (1889:6): [True: 0, False: 1.49k]
  ------------------
 1890|      0|		return;
 1891|  1.49k|#define DISCARD_LSA(L, N)                                                              \
 1892|  1.49k|	{                                                                              \
 1893|  1.49k|		if (IS_DEBUG_OSPF_EVENT)                                               \
 1894|  1.49k|			zlog_debug(                                                    \
 1895|  1.49k|				"ospf_lsa_discard() in ospf_ls_upd() point %d: lsa %p" \
 1896|  1.49k|				" Type-%d",                                            \
 1897|  1.49k|				N, (void *)lsa, (int)lsa->data->type);                 \
 1898|  1.49k|		ospf_lsa_discard(L);                                                   \
 1899|  1.49k|		continue;                                                              \
 1900|  1.49k|	}
 1901|       |
 1902|       |	/* Process each LSA received in the one packet.
 1903|       |	 *
 1904|       |	 * Numbers in parentheses, e.g. (1), (2), etc., and the corresponding
 1905|       |	 * text below are from the steps in RFC 2328, Section 13.
 1906|       |	 */
 1907|  18.2k|	for (ALL_LIST_ELEMENTS(lsas, node, nnode, lsa)) {
  ------------------
  |  |  320|  1.49k|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|  1.49k|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 1.49k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  321|  19.7k|	(node) != NULL                                                         \
  |  |  ------------------
  |  |  |  Branch (321:2): [True: 18.2k, False: 1.48k]
  |  |  ------------------
  |  |  322|  36.4k|		&& ((data) = static_cast(data, listgetdata(node)),             \
  |  |  ------------------
  |  |  |  |  204|   109k|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 18.2k, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 18.2k]
  |  |  |  |  |  Branch (204:28): [True: 18.2k, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 18.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:6): [True: 18.2k, False: 0]
  |  |  ------------------
  |  |  323|  36.4k|		    (nextnode) = node->next, 1);                               \
  |  |  324|  18.2k|	(node) = (nextnode), ((data) = NULL)
  ------------------
 1908|  18.2k|		struct ospf_lsa *ls_ret, *current;
 1909|  18.2k|		int ret = 1;
 1910|       |
 1911|  18.2k|		if (IS_DEBUG_OSPF(lsa, LSA))
  ------------------
  |  |   91|  18.2k|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   36|  18.2k|#define OSPF_DEBUG_LSA		0x0F
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 18.2k]
  |  |  ------------------
  ------------------
 1912|      0|			zlog_debug("LSA Type-%d from %pI4, ID: %pI4, ADV: %pI4",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1913|  18.2k|				   lsa->data->type, &ospfh->router_id,
 1914|  18.2k|				   &lsa->data->id, &lsa->data->adv_router);
 1915|       |
 1916|  18.2k|		listnode_delete(lsas,
 1917|  18.2k|				lsa); /* We don't need it in list anymore */
 1918|       |
 1919|       |		/* (1) Validate Checksum - Done above by ospf_ls_upd_list_lsa()
 1920|       |		 */
 1921|       |
 1922|       |		/* (2) LSA Type  - Done above by ospf_ls_upd_list_lsa() */
 1923|       |
 1924|       |		/* (3) Do not take in AS External LSAs if we are a stub or NSSA.
 1925|       |		 */
 1926|       |
 1927|       |		/* Do not take in AS NSSA if this neighbor and we are not NSSA
 1928|       |		 */
 1929|       |
 1930|       |		/* Do take in Type-7's if we are an NSSA  */
 1931|       |
 1932|       |		/* If we are also an ABR, later translate them to a Type-5
 1933|       |		 * packet */
 1934|       |
 1935|       |		/* Later, an NSSA Re-fresh can Re-fresh Type-7's and an ABR will
 1936|       |		   translate them to a separate Type-5 packet.  */
 1937|       |
 1938|  18.2k|		if (lsa->data->type == OSPF_AS_EXTERNAL_LSA)
  ------------------
  |  |   28|  18.2k|#define OSPF_AS_EXTERNAL_LSA          5
  ------------------
  |  Branch (1938:7): [True: 640, False: 17.5k]
  ------------------
 1939|       |			/* Reject from STUB or NSSA */
 1940|    640|			if (nbr->oi->area->external_routing
  ------------------
  |  Branch (1940:8): [True: 0, False: 640]
  ------------------
 1941|    640|			    != OSPF_AREA_DEFAULT) {
  ------------------
  |  |   76|    640|#define OSPF_AREA_DEFAULT       0
  ------------------
 1942|      0|				if (IS_DEBUG_OSPF_NSSA)
  ------------------
  |  |   94|      0|#define IS_DEBUG_OSPF_NSSA  IS_DEBUG_OSPF(nssa, NSSA)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|      0|#define OSPF_DEBUG_NSSA		0x02
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1943|      0|					zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1944|      0|						"Incoming External LSA Discarded: We are NSSA/STUB Area");
 1945|      0|				DISCARD_LSA(lsa, 1);
  ------------------
  |  | 1892|      0|	{                                                                              \
  |  | 1893|      0|		if (IS_DEBUG_OSPF_EVENT)                                               \
  |  |  ------------------
  |  |  |  |   92|      0|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   43|      0|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1894|      0|			zlog_debug(                                                    \
  |  |  ------------------
  |  |  |  |  134|      0|#define zlog_debug(...) 0
  |  |  ------------------
  |  | 1895|      0|				"ospf_lsa_discard() in ospf_ls_upd() point %d: lsa %p" \
  |  | 1896|      0|				" Type-%d",                                            \
  |  | 1897|      0|				N, (void *)lsa, (int)lsa->data->type);                 \
  |  | 1898|      0|		ospf_lsa_discard(L);                                                   \
  |  | 1899|      0|		continue;                                                              \
  |  | 1900|      0|	}
  ------------------
 1946|      0|			}
 1947|       |
 1948|  18.2k|		if (lsa->data->type == OSPF_AS_NSSA_LSA)
  ------------------
  |  |   30|  18.2k|#define OSPF_AS_NSSA_LSA	              7
  ------------------
  |  Branch (1948:7): [True: 104, False: 18.1k]
  ------------------
 1949|    104|			if (nbr->oi->area->external_routing != OSPF_AREA_NSSA) {
  ------------------
  |  |   78|    104|#define OSPF_AREA_NSSA          2
  ------------------
  |  Branch (1949:8): [True: 104, False: 0]
  ------------------
 1950|    104|				if (IS_DEBUG_OSPF_NSSA)
  ------------------
  |  |   94|    104|#define IS_DEBUG_OSPF_NSSA  IS_DEBUG_OSPF(nssa, NSSA)
  |  |  ------------------
  |  |  |  |   91|    104|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|    104|#define OSPF_DEBUG_NSSA		0x02
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 104]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1951|      0|					zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1952|    104|						"Incoming NSSA LSA Discarded:  Not NSSA Area");
 1953|    104|				DISCARD_LSA(lsa, 2);
  ------------------
  |  | 1892|    104|	{                                                                              \
  |  | 1893|    104|		if (IS_DEBUG_OSPF_EVENT)                                               \
  |  |  ------------------
  |  |  |  |   92|    104|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   91|    104|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   43|    104|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (91:29): [True: 0, False: 104]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1894|    104|			zlog_debug(                                                    \
  |  |  ------------------
  |  |  |  |  134|      0|#define zlog_debug(...) 0
  |  |  ------------------
  |  | 1895|    104|				"ospf_lsa_discard() in ospf_ls_upd() point %d: lsa %p" \
  |  | 1896|    104|				" Type-%d",                                            \
  |  | 1897|    104|				N, (void *)lsa, (int)lsa->data->type);                 \
  |  | 1898|    104|		ospf_lsa_discard(L);                                                   \
  |  | 1899|    104|		continue;                                                              \
  |  | 1900|    104|	}
  ------------------
 1954|      0|			}
 1955|       |
 1956|       |		/* VU229804: Router-LSA Adv-ID must be equal to LS-ID */
 1957|  18.1k|		if (lsa->data->type == OSPF_ROUTER_LSA)
  ------------------
  |  |   24|  18.1k|#define OSPF_ROUTER_LSA               1
  ------------------
  |  Branch (1957:7): [True: 1.44k, False: 16.6k]
  ------------------
 1958|  1.44k|			if (!IPV4_ADDR_SAME(&lsa->data->id,
  ------------------
  |  |  342|  1.44k|#define IPV4_ADDR_SAME(A,B)  ipv4_addr_same((A), (B))
  ------------------
  |  Branch (1958:8): [True: 361, False: 1.08k]
  ------------------
 1959|  1.44k|					    &lsa->data->adv_router)) {
 1960|    361|				flog_err(
  ------------------
  |  |  136|    361|#define flog_err(ferr_id, format, ...) 0
  ------------------
 1961|    361|					EC_OSPF_ROUTER_LSA_MISMATCH,
 1962|    361|					"Incoming Router-LSA from %pI4 with Adv-ID[%pI4] != LS-ID[%pI4]",
 1963|    361|					&ospfh->router_id, &lsa->data->id,
 1964|    361|					&lsa->data->adv_router);
 1965|    361|				flog_err(
  ------------------
  |  |  136|    361|#define flog_err(ferr_id, format, ...) 0
  ------------------
 1966|    361|					EC_OSPF_DOMAIN_CORRUPT,
 1967|    361|					"OSPF domain compromised by attack or corruption. Verify correct operation of -ALL- OSPF routers.");
 1968|    361|				DISCARD_LSA(lsa, 0);
  ------------------
  |  | 1892|    361|	{                                                                              \
  |  | 1893|    361|		if (IS_DEBUG_OSPF_EVENT)                                               \
  |  |  ------------------
  |  |  |  |   92|    361|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   91|    361|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   43|    361|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (91:29): [True: 0, False: 361]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1894|    361|			zlog_debug(                                                    \
  |  |  ------------------
  |  |  |  |  134|      0|#define zlog_debug(...) 0
  |  |  ------------------
  |  | 1895|    361|				"ospf_lsa_discard() in ospf_ls_upd() point %d: lsa %p" \
  |  | 1896|    361|				" Type-%d",                                            \
  |  | 1897|    361|				N, (void *)lsa, (int)lsa->data->type);                 \
  |  | 1898|    361|		ospf_lsa_discard(L);                                                   \
  |  | 1899|    361|		continue;                                                              \
  |  | 1900|    361|	}
  ------------------
 1969|      0|			}
 1970|       |
 1971|       |		/* Find the LSA in the current database. */
 1972|       |
 1973|  17.7k|		current = ospf_lsa_lookup_by_header(oi->area, lsa->data);
 1974|       |
 1975|       |		/* (4) If the LSA's LS age is equal to MaxAge, and there is
 1976|       |		   currently
 1977|       |		   no instance of the LSA in the router's link state database,
 1978|       |		   and none of router's neighbors are in states Exchange or
 1979|       |		   Loading,
 1980|       |		   then take the following actions: */
 1981|       |
 1982|  17.7k|		if (IS_LSA_MAXAGE(lsa) && !current
  ------------------
  |  |  211|  35.5k|#define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |  209|  17.7k|#define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|  17.7k|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |               #define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|      0|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (209:20): [True: 0, False: 17.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |   33|  17.7k|#define OSPF_LSA_MAXAGE                       3600
  |  |  ------------------
  |  |  |  Branch (211:33): [True: 8.96k, False: 8.79k]
  |  |  ------------------
  ------------------
  |  Branch (1982:29): [True: 663, False: 8.30k]
  ------------------
 1983|    663|		    && ospf_check_nbr_status(oi->ospf)) {
  ------------------
  |  Branch (1983:10): [True: 663, False: 0]
  ------------------
 1984|       |			/* (4a) Response Link State Acknowledgment. */
 1985|    663|			ospf_ls_ack_send(nbr, lsa);
 1986|       |
 1987|       |			/* (4b) Discard LSA. */
 1988|    663|			if (IS_DEBUG_OSPF(lsa, LSA)) {
  ------------------
  |  |   91|    663|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   36|    663|#define OSPF_DEBUG_LSA		0x0F
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 663]
  |  |  ------------------
  ------------------
 1989|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1990|      0|					"Link State Update[%s]: LS age is equal to MaxAge.",
 1991|      0|					dump_lsa_key(lsa));
 1992|      0|			}
 1993|    663|			DISCARD_LSA(lsa, 3);
  ------------------
  |  | 1892|    663|	{                                                                              \
  |  | 1893|    663|		if (IS_DEBUG_OSPF_EVENT)                                               \
  |  |  ------------------
  |  |  |  |   92|    663|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   91|    663|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   43|    663|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (91:29): [True: 0, False: 663]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1894|    663|			zlog_debug(                                                    \
  |  |  ------------------
  |  |  |  |  134|      0|#define zlog_debug(...) 0
  |  |  ------------------
  |  | 1895|    663|				"ospf_lsa_discard() in ospf_ls_upd() point %d: lsa %p" \
  |  | 1896|    663|				" Type-%d",                                            \
  |  | 1897|    663|				N, (void *)lsa, (int)lsa->data->type);                 \
  |  | 1898|    663|		ospf_lsa_discard(L);                                                   \
  |  | 1899|    663|		continue;                                                              \
  |  | 1900|    663|	}
  ------------------
 1994|      0|		}
 1995|       |
 1996|  17.0k|		if (IS_OPAQUE_LSA(lsa->data->type)
  ------------------
  |  |   15|  34.1k|	((type) == OSPF_OPAQUE_LINK_LSA || (type) == OSPF_OPAQUE_AREA_LSA      \
  |  |  ------------------
  |  |  |  |   32|  34.1k|#define OSPF_OPAQUE_LINK_LSA	      9
  |  |  ------------------
  |  |               	((type) == OSPF_OPAQUE_LINK_LSA || (type) == OSPF_OPAQUE_AREA_LSA      \
  |  |  ------------------
  |  |  |  |   33|  32.9k|#define OSPF_OPAQUE_AREA_LSA	     10
  |  |  ------------------
  |  |  |  Branch (15:3): [True: 1.27k, False: 15.8k]
  |  |  |  Branch (15:37): [True: 1.13k, False: 14.6k]
  |  |  ------------------
  |  |   16|  34.1k|	 || (type) == OSPF_OPAQUE_AS_LSA)
  |  |  ------------------
  |  |  |  |   34|  14.6k|#define OSPF_OPAQUE_AS_LSA	     11
  |  |  ------------------
  |  |  |  Branch (16:6): [True: 539, False: 14.1k]
  |  |  ------------------
  ------------------
 1997|  2.94k|		    && IPV4_ADDR_SAME(&lsa->data->adv_router,
  ------------------
  |  |  342|  2.94k|#define IPV4_ADDR_SAME(A,B)  ipv4_addr_same((A), (B))
  |  |  ------------------
  |  |  |  Branch (342:30): [True: 1.13k, False: 1.81k]
  |  |  ------------------
  ------------------
 1998|  17.0k|				      &oi->ospf->router_id)) {
 1999|       |			/*
 2000|       |			 * Even if initial flushing seems to be completed, there
 2001|       |			 * might
 2002|       |			 * be a case that self-originated LSA with MaxAge still
 2003|       |			 * remain
 2004|       |			 * in the routing domain.
 2005|       |			 * Just send an LSAck message to cease retransmission.
 2006|       |			 */
 2007|  1.13k|			if (IS_LSA_MAXAGE(lsa)) {
  ------------------
  |  |  211|  1.13k|#define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |  209|  1.13k|#define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|  1.13k|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |               #define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|      0|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (209:20): [True: 0, False: 1.13k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |   33|  1.13k|#define OSPF_LSA_MAXAGE                       3600
  |  |  ------------------
  |  |  |  Branch (211:33): [True: 691, False: 442]
  |  |  ------------------
  ------------------
 2008|    691|				zlog_info("LSA[%s]: Boomerang effect?",
  ------------------
  |  |  132|    691|#define zlog_info(...) 0
  ------------------
 2009|    691|					  dump_lsa_key(lsa));
 2010|    691|				ospf_ls_ack_send(nbr, lsa);
 2011|    691|				ospf_lsa_discard(lsa);
 2012|       |
 2013|    691|				if (current != NULL && !IS_LSA_MAXAGE(current))
  ------------------
  |  |  211|    691|#define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |  209|    691|#define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    691|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |               #define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|      0|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (209:20): [True: 0, False: 691]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |   33|    691|#define OSPF_LSA_MAXAGE                       3600
  |  |  ------------------
  ------------------
  |  Branch (2013:9): [True: 691, False: 0]
  |  Branch (2013:28): [True: 0, False: 691]
  ------------------
 2014|      0|					ospf_opaque_lsa_refresh_schedule(
 2015|      0|						current);
 2016|    691|				continue;
 2017|    691|			}
 2018|       |
 2019|       |			/*
 2020|       |			 * If an instance of self-originated Opaque-LSA is not
 2021|       |			 * found
 2022|       |			 * in the LSDB, there are some possible cases here.
 2023|       |			 *
 2024|       |			 * 1) This node lost opaque-capability after restart.
 2025|       |			 * 2) Else, a part of opaque-type is no more supported.
 2026|       |			 * 3) Else, a part of opaque-id is no more supported.
 2027|       |			 *
 2028|       |			 * Anyway, it is still this node's responsibility to
 2029|       |			 * flush it.
 2030|       |			 * Otherwise, the LSA instance remains in the routing
 2031|       |			 * domain
 2032|       |			 * until its age reaches to MaxAge.
 2033|       |			 */
 2034|       |			/* XXX: We should deal with this for *ALL* LSAs, not
 2035|       |			 * just opaque */
 2036|    442|			if (current == NULL) {
  ------------------
  |  Branch (2036:8): [True: 12, False: 430]
  ------------------
 2037|     12|				if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|     12|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|     12|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|     12|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 12]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2038|      0|					zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 2039|     12|						"LSA[%s]: Previously originated Opaque-LSA, not found in the LSDB.",
 2040|     12|						dump_lsa_key(lsa));
 2041|       |
 2042|     12|				SET_FLAG(lsa->flags, OSPF_LSA_SELF);
  ------------------
  |  |  395|     12|#define SET_FLAG(V,F)        (V) |= (F)
  ------------------
 2043|       |
 2044|     12|				ospf_ls_ack_send(nbr, lsa);
 2045|       |
 2046|     12|				if (!ospf->gr_info.restart_in_progress) {
  ------------------
  |  Branch (2046:9): [True: 12, False: 0]
  ------------------
 2047|     12|					ospf_opaque_self_originated_lsa_received(
 2048|     12|						nbr, lsa);
 2049|     12|					continue;
 2050|     12|				}
 2051|     12|			}
 2052|    442|		}
 2053|       |
 2054|       |		/* It might be happen that received LSA is self-originated
 2055|       |		 * network LSA, but
 2056|       |		 * router ID is changed. So, we should check if LSA is a
 2057|       |		 * network-LSA whose
 2058|       |		 * Link State ID is one of the router's own IP interface
 2059|       |		 * addresses but whose
 2060|       |		 * Advertising Router is not equal to the router's own Router ID
 2061|       |		 * According to RFC 2328 12.4.2 and 13.4 this LSA should be
 2062|       |		 * flushed.
 2063|       |		 */
 2064|       |
 2065|  16.3k|		if (lsa->data->type == OSPF_NETWORK_LSA) {
  ------------------
  |  |   25|  16.3k|#define OSPF_NETWORK_LSA              2
  ------------------
  |  Branch (2065:7): [True: 7.94k, False: 8.44k]
  ------------------
 2066|  7.94k|			struct listnode *oinode, *oinnode;
 2067|  7.94k|			struct ospf_interface *out_if;
 2068|  7.94k|			int Flag = 0;
 2069|       |
 2070|  7.94k|			for (ALL_LIST_ELEMENTS(oi->ospf->oiflist, oinode,
  ------------------
  |  |  320|  7.94k|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|  7.94k|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 7.94k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  321|  14.0k|	(node) != NULL                                                         \
  |  |  ------------------
  |  |  |  Branch (321:2): [True: 7.94k, False: 6.12k]
  |  |  ------------------
  |  |  322|  15.8k|		&& ((data) = static_cast(data, listgetdata(node)),             \
  |  |  ------------------
  |  |  |  |  204|  47.6k|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 7.94k, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 7.94k]
  |  |  |  |  |  Branch (204:28): [True: 7.94k, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 7.94k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:6): [True: 7.94k, False: 0]
  |  |  ------------------
  |  |  323|  15.8k|		    (nextnode) = node->next, 1);                               \
  |  |  324|  7.94k|	(node) = (nextnode), ((data) = NULL)
  ------------------
 2071|  7.94k|					       oinnode, out_if)) {
 2072|  7.94k|				if (out_if == NULL)
  ------------------
  |  Branch (2072:9): [True: 0, False: 7.94k]
  ------------------
 2073|      0|					break;
 2074|       |
 2075|  7.94k|				if ((IPV4_ADDR_SAME(&out_if->address->u.prefix4,
  ------------------
  |  |  342|  7.94k|#define IPV4_ADDR_SAME(A,B)  ipv4_addr_same((A), (B))
  ------------------
  |  Branch (2075:9): [True: 2.84k, False: 5.09k]
  ------------------
 2076|  7.94k|						    &lsa->data->id))
 2077|  2.84k|				    && (!(IPV4_ADDR_SAME(
  ------------------
  |  |  342|  2.84k|#define IPV4_ADDR_SAME(A,B)  ipv4_addr_same((A), (B))
  ------------------
  |  Branch (2077:12): [True: 1.82k, False: 1.02k]
  ------------------
 2078|  2.84k|					       &oi->ospf->router_id,
 2079|  2.84k|					       &lsa->data->adv_router)))) {
 2080|  1.82k|					if (out_if->network_lsa_self) {
  ------------------
  |  Branch (2080:10): [True: 0, False: 1.82k]
  ------------------
 2081|      0|						ospf_lsa_flush_area(
 2082|      0|							lsa, out_if->area);
 2083|      0|						if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|      0|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|      0|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2084|      0|							zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 2085|      0|								"ospf_lsa_discard() in ospf_ls_upd() point 9: lsa %p Type-%d",
 2086|      0|								(void *)lsa,
 2087|      0|								(int)lsa->data
 2088|      0|									->type);
 2089|      0|						ospf_lsa_discard(lsa);
 2090|      0|						Flag = 1;
 2091|      0|					}
 2092|  1.82k|					break;
 2093|  1.82k|				}
 2094|  7.94k|			}
 2095|  7.94k|			if (Flag)
  ------------------
  |  Branch (2095:8): [True: 0, False: 7.94k]
  ------------------
 2096|      0|				continue;
 2097|  7.94k|		}
 2098|       |
 2099|       |		/* (5) Find the instance of this LSA that is currently contained
 2100|       |		   in the router's link state database.  If there is no
 2101|       |		   database copy, or the received LSA is more recent than
 2102|       |		   the database copy the following steps must be performed.
 2103|       |		   (The sub steps from RFC 2328 section 13 step (5) will be
 2104|       |		   performed in
 2105|       |		   ospf_flood() ) */
 2106|       |
 2107|  16.3k|		if (current == NULL
  ------------------
  |  Branch (2107:7): [True: 2.26k, False: 14.1k]
  ------------------
 2108|  14.1k|		    || (ret = ospf_lsa_more_recent(current, lsa)) < 0) {
  ------------------
  |  Branch (2108:10): [True: 8.91k, False: 5.21k]
  ------------------
 2109|       |			/* CVE-2017-3224 */
 2110|  11.1k|			if (current && (IS_LSA_MAX_SEQ(current))
  ------------------
  |  |  213|  8.91k|	((L)->data->ls_seqnum == htonl(OSPF_MAX_SEQUENCE_NUMBER))
  ------------------
  |  Branch (2110:8): [True: 8.91k, False: 2.26k]
  |  Branch (2110:19): [True: 2.55k, False: 6.36k]
  ------------------
 2111|  2.55k|			    && (IS_LSA_MAX_SEQ(lsa)) && !IS_LSA_MAXAGE(lsa)) {
  ------------------
  |  |  213|  2.55k|	((L)->data->ls_seqnum == htonl(OSPF_MAX_SEQUENCE_NUMBER))
  ------------------
              			    && (IS_LSA_MAX_SEQ(lsa)) && !IS_LSA_MAXAGE(lsa)) {
  ------------------
  |  |  211|  2.55k|#define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |  209|  2.55k|#define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|  2.55k|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |               #define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|      0|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (209:20): [True: 0, False: 2.55k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |   33|  2.55k|#define OSPF_LSA_MAXAGE                       3600
  |  |  ------------------
  ------------------
  |  Branch (2111:11): [True: 2.55k, False: 0]
  |  Branch (2111:36): [True: 128, False: 2.42k]
  ------------------
 2112|    128|				zlog_debug(
  ------------------
  |  |  134|    128|#define zlog_debug(...) 0
  ------------------
 2113|    128|					"Link State Update[%s]: has Max Seq and higher checksum but not MaxAge. Dropping it",
 2114|    128|					dump_lsa_key(lsa));
 2115|       |
 2116|    128|				DISCARD_LSA(lsa, 4);
  ------------------
  |  | 1892|    128|	{                                                                              \
  |  | 1893|    128|		if (IS_DEBUG_OSPF_EVENT)                                               \
  |  |  ------------------
  |  |  |  |   92|    128|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   91|    128|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   43|    128|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (91:29): [True: 0, False: 128]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1894|    128|			zlog_debug(                                                    \
  |  |  ------------------
  |  |  |  |  134|      0|#define zlog_debug(...) 0
  |  |  ------------------
  |  | 1895|    128|				"ospf_lsa_discard() in ospf_ls_upd() point %d: lsa %p" \
  |  | 1896|    128|				" Type-%d",                                            \
  |  | 1897|    128|				N, (void *)lsa, (int)lsa->data->type);                 \
  |  | 1898|    128|		ospf_lsa_discard(L);                                                   \
  |  | 1899|    128|		continue;                                                              \
  |  | 1900|    128|	}
  ------------------
 2117|      0|			}
 2118|       |
 2119|       |			/* Actual flooding procedure. */
 2120|  11.0k|			if (ospf_flood(oi->ospf, nbr, current, lsa)
  ------------------
  |  Branch (2120:8): [True: 10.2k, False: 806]
  ------------------
 2121|  11.0k|			    < 0) /* Trap NSSA later. */
 2122|  10.2k|				DISCARD_LSA(lsa, 5);
  ------------------
  |  | 1892|  10.2k|	{                                                                              \
  |  | 1893|  10.2k|		if (IS_DEBUG_OSPF_EVENT)                                               \
  |  |  ------------------
  |  |  |  |   92|  10.2k|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   91|  10.2k|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   43|  10.2k|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (91:29): [True: 0, False: 10.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1894|  10.2k|			zlog_debug(                                                    \
  |  |  ------------------
  |  |  |  |  134|      0|#define zlog_debug(...) 0
  |  |  ------------------
  |  | 1895|  10.2k|				"ospf_lsa_discard() in ospf_ls_upd() point %d: lsa %p" \
  |  | 1896|  10.2k|				" Type-%d",                                            \
  |  | 1897|  10.2k|				N, (void *)lsa, (int)lsa->data->type);                 \
  |  | 1898|  10.2k|		ospf_lsa_discard(L);                                                   \
  |  | 1899|  10.2k|		continue;                                                              \
  |  | 1900|  10.2k|	}
  ------------------
 2123|       |
 2124|       |			/* GR: check for network topology change. */
 2125|    806|			if (ospf->gr_info.restart_in_progress &&
  ------------------
  |  Branch (2125:8): [True: 0, False: 806]
  ------------------
 2126|      0|			    ((lsa->data->type == OSPF_ROUTER_LSA ||
  ------------------
  |  |   24|      0|#define OSPF_ROUTER_LSA               1
  ------------------
  |  Branch (2126:10): [True: 0, False: 0]
  ------------------
 2127|      0|			      lsa->data->type == OSPF_NETWORK_LSA)))
  ------------------
  |  |   25|      0|#define OSPF_NETWORK_LSA              2
  ------------------
  |  Branch (2127:10): [True: 0, False: 0]
  ------------------
 2128|      0|				ospf_gr_check_lsdb_consistency(oi->ospf,
 2129|      0|							       oi->area);
 2130|       |
 2131|    806|			continue;
 2132|  11.0k|		}
 2133|       |
 2134|       |		/* (6) Else, If there is an instance of the LSA on the sending
 2135|       |		   neighbor's Link state request list, an error has occurred in
 2136|       |		   the Database Exchange process.  In this case, restart the
 2137|       |		   Database Exchange process by generating the neighbor event
 2138|       |		   BadLSReq for the sending neighbor and stop processing the
 2139|       |		   Link State Update packet. */
 2140|       |
 2141|  5.21k|		if (ospf_ls_request_lookup(nbr, lsa)) {
  ------------------
  |  Branch (2141:7): [True: 10, False: 5.20k]
  ------------------
 2142|     10|			OSPF_NSM_EVENT_SCHEDULE(nbr, NSM_BadLSReq);
 2143|     10|			flog_warn(
  ------------------
  |  |  137|     10|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 2144|     10|				EC_OSPF_PACKET,
 2145|     10|				"LSA[%s] instance exists on Link state request list",
 2146|     10|				dump_lsa_key(lsa));
 2147|       |
 2148|       |			/* Clean list of LSAs. */
 2149|     10|			ospf_upd_list_clean(lsas);
 2150|       |			/* this lsa is not on lsas list already. */
 2151|     10|			ospf_lsa_discard(lsa);
 2152|     10|			return;
 2153|     10|		}
 2154|       |
 2155|       |		/* If the received LSA is the same instance as the database copy
 2156|       |		   (i.e., neither one is more recent) the following two steps
 2157|       |		   should be performed: */
 2158|       |
 2159|  5.20k|		if (ret == 0) {
  ------------------
  |  Branch (2159:7): [True: 2.31k, False: 2.88k]
  ------------------
 2160|       |			/* If the LSA is listed in the Link state retransmission
 2161|       |			   list
 2162|       |			   for the receiving adjacency, the router itself is
 2163|       |			   expecting
 2164|       |			   an acknowledgment for this LSA.  The router should
 2165|       |			   treat the
 2166|       |			   received LSA as an acknowledgment by removing the LSA
 2167|       |			   from
 2168|       |			   the Link state retransmission list.  This is termed
 2169|       |			   an
 2170|       |			   "implied acknowledgment". */
 2171|       |
 2172|  2.31k|			ls_ret = ospf_ls_retransmit_lookup(nbr, lsa);
 2173|       |
 2174|  2.31k|			if (ls_ret != NULL) {
  ------------------
  |  Branch (2174:8): [True: 0, False: 2.31k]
  ------------------
 2175|      0|				ospf_ls_retransmit_delete(nbr, ls_ret);
 2176|       |
 2177|       |				/* Delayed acknowledgment sent if advertisement
 2178|       |				   received
 2179|       |				   from Designated Router, otherwise do nothing.
 2180|       |				   */
 2181|      0|				if (oi->state == ISM_Backup)
  ------------------
  |  |   20|      0|#define ISM_Backup                        6
  ------------------
  |  Branch (2181:9): [True: 0, False: 0]
  ------------------
 2182|      0|					if (NBR_IS_DR(nbr))
  ------------------
  |  |   83|      0|#define NBR_IS_DR(n)	IPV4_ADDR_SAME (&n->address.u.prefix4, &n->d_router)
  |  |  ------------------
  |  |  |  |  342|      0|#define IPV4_ADDR_SAME(A,B)  ipv4_addr_same((A), (B))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (342:30): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2183|      0|						listnode_add(
 2184|      0|							oi->ls_ack,
 2185|      0|							ospf_lsa_lock(lsa));
 2186|       |
 2187|      0|				DISCARD_LSA(lsa, 6);
  ------------------
  |  | 1892|      0|	{                                                                              \
  |  | 1893|      0|		if (IS_DEBUG_OSPF_EVENT)                                               \
  |  |  ------------------
  |  |  |  |   92|      0|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   43|      0|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1894|      0|			zlog_debug(                                                    \
  |  |  ------------------
  |  |  |  |  134|      0|#define zlog_debug(...) 0
  |  |  ------------------
  |  | 1895|      0|				"ospf_lsa_discard() in ospf_ls_upd() point %d: lsa %p" \
  |  | 1896|      0|				" Type-%d",                                            \
  |  | 1897|      0|				N, (void *)lsa, (int)lsa->data->type);                 \
  |  | 1898|      0|		ospf_lsa_discard(L);                                                   \
  |  | 1899|      0|		continue;                                                              \
  |  | 1900|      0|	}
  ------------------
 2188|      0|			} else
 2189|       |			/* Acknowledge the receipt of the LSA by sending a
 2190|       |			   Link State Acknowledgment packet back out the
 2191|       |			   receiving
 2192|       |			   interface. */
 2193|  2.31k|			{
 2194|  2.31k|				ospf_ls_ack_send(nbr, lsa);
 2195|  2.31k|				DISCARD_LSA(lsa, 7);
  ------------------
  |  | 1892|  2.31k|	{                                                                              \
  |  | 1893|  2.31k|		if (IS_DEBUG_OSPF_EVENT)                                               \
  |  |  ------------------
  |  |  |  |   92|  2.31k|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   91|  2.31k|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   43|  2.31k|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (91:29): [True: 0, False: 2.31k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1894|  2.31k|			zlog_debug(                                                    \
  |  |  ------------------
  |  |  |  |  134|      0|#define zlog_debug(...) 0
  |  |  ------------------
  |  | 1895|  2.31k|				"ospf_lsa_discard() in ospf_ls_upd() point %d: lsa %p" \
  |  | 1896|  2.31k|				" Type-%d",                                            \
  |  | 1897|  2.31k|				N, (void *)lsa, (int)lsa->data->type);                 \
  |  | 1898|  2.31k|		ospf_lsa_discard(L);                                                   \
  |  | 1899|  2.31k|		continue;                                                              \
  |  | 1900|  2.31k|	}
  ------------------
 2196|      0|			}
 2197|  2.31k|		}
 2198|       |
 2199|       |		/* The database copy is more recent.  If the database copy
 2200|       |		   has LS age equal to MaxAge and LS sequence number equal to
 2201|       |		   MaxSequenceNumber, simply discard the received LSA without
 2202|       |		   acknowledging it. (In this case, the LSA's LS sequence number
 2203|       |		   is
 2204|       |		   wrapping, and the MaxSequenceNumber LSA must be completely
 2205|       |		   flushed before any new LSA instance can be introduced). */
 2206|       |
 2207|  2.88k|		else if (ret > 0) /* Database copy is more recent */
  ------------------
  |  Branch (2207:12): [True: 2.88k, False: 0]
  ------------------
 2208|  2.88k|		{
 2209|  2.88k|			if (IS_LSA_MAXAGE(current)
  ------------------
  |  |  211|  5.76k|#define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |  209|  2.88k|#define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|  2.88k|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |               #define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|      0|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (209:20): [True: 0, False: 2.88k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |   33|  2.88k|#define OSPF_LSA_MAXAGE                       3600
  |  |  ------------------
  |  |  |  Branch (211:33): [True: 420, False: 2.46k]
  |  |  ------------------
  ------------------
 2210|    420|			    && current->data->ls_seqnum
  ------------------
  |  Branch (2210:11): [True: 203, False: 217]
  ------------------
 2211|    420|				       == htonl(OSPF_MAX_SEQUENCE_NUMBER)) {
 2212|    203|				DISCARD_LSA(lsa, 8);
  ------------------
  |  | 1892|    203|	{                                                                              \
  |  | 1893|    203|		if (IS_DEBUG_OSPF_EVENT)                                               \
  |  |  ------------------
  |  |  |  |   92|    203|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   91|    203|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   43|    203|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (91:29): [True: 0, False: 203]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1894|    203|			zlog_debug(                                                    \
  |  |  ------------------
  |  |  |  |  134|      0|#define zlog_debug(...) 0
  |  |  ------------------
  |  | 1895|    203|				"ospf_lsa_discard() in ospf_ls_upd() point %d: lsa %p" \
  |  | 1896|    203|				" Type-%d",                                            \
  |  | 1897|    203|				N, (void *)lsa, (int)lsa->data->type);                 \
  |  | 1898|    203|		ospf_lsa_discard(L);                                                   \
  |  | 1899|    203|		continue;                                                              \
  |  | 1900|    203|	}
  ------------------
 2213|      0|			}
 2214|       |			/* Otherwise, as long as the database copy has not been
 2215|       |			   sent in a
 2216|       |			   Link State Update within the last MinLSArrival
 2217|       |			   seconds, send the
 2218|       |			   database copy back to the sending neighbor,
 2219|       |			   encapsulated within
 2220|       |			   a Link State Update Packet. The Link State Update
 2221|       |			   Packet should
 2222|       |			   be sent directly to the neighbor. In so doing, do not
 2223|       |			   put the
 2224|       |			   database copy of the LSA on the neighbor's link state
 2225|       |			   retransmission list, and do not acknowledge the
 2226|       |			   received (less
 2227|       |			   recent) LSA instance. */
 2228|  2.68k|			else {
 2229|  2.68k|				if (monotime_since(&current->tv_orig, NULL)
  ------------------
  |  Branch (2229:9): [True: 0, False: 2.68k]
  ------------------
 2230|  2.68k|				    >= ospf->min_ls_arrival * 1000LL)
 2231|       |					/* Trap NSSA type later.*/
 2232|      0|					ospf_ls_upd_send_lsa(
 2233|      0|						nbr, current,
 2234|      0|						OSPF_SEND_PACKET_DIRECT);
  ------------------
  |  |   27|      0|#define OSPF_SEND_PACKET_DIRECT         1
  ------------------
 2235|  2.68k|				DISCARD_LSA(lsa, 9);
  ------------------
  |  | 1892|  2.68k|	{                                                                              \
  |  | 1893|  2.68k|		if (IS_DEBUG_OSPF_EVENT)                                               \
  |  |  ------------------
  |  |  |  |   92|  2.68k|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   91|  2.68k|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   43|  2.68k|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (91:29): [True: 0, False: 2.68k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1894|  2.68k|			zlog_debug(                                                    \
  |  |  ------------------
  |  |  |  |  134|      0|#define zlog_debug(...) 0
  |  |  ------------------
  |  | 1895|  2.68k|				"ospf_lsa_discard() in ospf_ls_upd() point %d: lsa %p" \
  |  | 1896|  2.68k|				" Type-%d",                                            \
  |  | 1897|  2.68k|				N, (void *)lsa, (int)lsa->data->type);                 \
  |  | 1898|  2.68k|		ospf_lsa_discard(L);                                                   \
  |  | 1899|  2.68k|		continue;                                                              \
  |  | 1900|  2.68k|	}
  ------------------
 2236|      0|			}
 2237|  2.88k|		}
 2238|  5.20k|	}
 2239|  1.48k|#undef DISCARD_LSA
 2240|       |
 2241|  1.49k|	assert(listcount(lsas) == 0);
  ------------------
  |  |   51|  1.49k|	({                                                                     \
  |  |   52|  1.48k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  1.48k|			(used)) = {                                            \
  |  |   54|  1.48k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  1.48k|	{                                                                      \
  |  |  |  |  284|  1.48k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  1.48k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  1.48k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  1.48k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  1.48k|	}                                                                      \
  |  |  ------------------
  |  |   55|  1.48k|			.expr = #expr_,                                        \
  |  |   56|  1.48k|		};                                                             \
  |  |   57|  1.48k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  1.48k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  1.48k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  1.48k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  1.48k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 1.48k]
  |  |  |  Branch (58:24): [True: 1.48k, False: 0]
  |  |  ------------------
  |  |   59|  1.48k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  1.48k|	})
  ------------------
 2242|  1.48k|	list_delete(&lsas);
 2243|  1.48k|}
ospf_packet.c:ospf_ls_upd_list_lsa:
 1699|  1.49k|{
 1700|  1.49k|	uint16_t count, sum;
 1701|  1.49k|	uint32_t length;
 1702|  1.49k|	struct lsa_header *lsah;
 1703|  1.49k|	struct ospf_lsa *lsa;
 1704|  1.49k|	struct list *lsas;
 1705|       |
 1706|  1.49k|	lsas = list_new();
 1707|       |
 1708|  1.49k|	count = stream_getl(s);
 1709|  1.49k|	size -= OSPF_LS_UPD_MIN_SIZE; /* # LSAs */
  ------------------
  |  |   18|  1.49k|#define OSPF_LS_UPD_MIN_SIZE      4U
  ------------------
 1710|       |
 1711|  50.8k|	for (; size >= OSPF_LSA_HEADER_SIZE && count > 0;
  ------------------
  |  |   36|   101k|#define OSPF_LSA_HEADER_SIZE	     20U
  ------------------
  |  Branch (1711:9): [True: 49.4k, False: 1.48k]
  |  Branch (1711:41): [True: 49.4k, False: 2]
  ------------------
 1712|  49.4k|	     size -= length, stream_forward_getp(s, length), count--) {
 1713|  49.4k|		lsah = (struct lsa_header *)stream_pnt(s);
 1714|  49.4k|		length = ntohs(lsah->length);
 1715|       |
 1716|  49.4k|		if (length > size) {
  ------------------
  |  Branch (1716:7): [True: 0, False: 49.4k]
  ------------------
 1717|      0|			flog_warn(
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 1718|      0|				EC_OSPF_PACKET,
 1719|      0|				"Link State Update: LSA length exceeds packet size.");
 1720|      0|			break;
 1721|      0|		}
 1722|       |
 1723|  49.4k|		if (length < OSPF_LSA_HEADER_SIZE) {
  ------------------
  |  |   36|  49.4k|#define OSPF_LSA_HEADER_SIZE	     20U
  ------------------
  |  Branch (1723:7): [True: 0, False: 49.4k]
  ------------------
 1724|      0|			flog_warn(EC_OSPF_PACKET,
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 1725|      0|				  "Link State Update: LSA length too small.");
 1726|      0|			break;
 1727|      0|		}
 1728|       |
 1729|       |		/* Validate the LSA's LS checksum. */
 1730|  49.4k|		sum = lsah->checksum;
 1731|  49.4k|		if (!ospf_lsa_checksum_valid(lsah)) {
  ------------------
  |  Branch (1731:7): [True: 29.7k, False: 19.6k]
  ------------------
 1732|       |			/* (bug #685) more details in a one-line message make it
 1733|       |			 * possible
 1734|       |			 * to identify problem source on the one hand and to
 1735|       |			 * have a better
 1736|       |			 * chance to compress repeated messages in syslog on the
 1737|       |			 * other */
 1738|  29.7k|			flog_warn(
  ------------------
  |  |  137|  29.7k|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 1739|  29.7k|				EC_OSPF_PACKET,
 1740|  29.7k|				"Link State Update: LSA checksum error %x/%x, ID=%pI4 from: nbr %pI4, router ID %pI4, adv router %pI4",
 1741|  29.7k|				sum, lsah->checksum, &lsah->id,
 1742|  29.7k|				&nbr->src, &nbr->router_id,
 1743|  29.7k|				&lsah->adv_router);
 1744|  29.7k|			continue;
 1745|  29.7k|		}
 1746|       |
 1747|       |		/* Examine the LSA's LS type. */
 1748|  19.6k|		if (lsah->type < OSPF_MIN_LSA || lsah->type >= OSPF_MAX_LSA) {
  ------------------
  |  |   19|  39.2k|#define OSPF_MIN_LSA		1  /* begin range here */
  ------------------
              		if (lsah->type < OSPF_MIN_LSA || lsah->type >= OSPF_MAX_LSA) {
  ------------------
  |  |   20|  19.6k|#define OSPF_MAX_LSA           12
  ------------------
  |  Branch (1748:7): [True: 0, False: 19.6k]
  |  Branch (1748:36): [True: 0, False: 19.6k]
  ------------------
 1749|      0|			flog_warn(EC_OSPF_PACKET,
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 1750|      0|				  "Link State Update: Unknown LS type %d",
 1751|      0|				  lsah->type);
 1752|      0|			continue;
 1753|      0|		}
 1754|       |
 1755|       |		/*
 1756|       |		 * What if the received LSA's age is greater than MaxAge?
 1757|       |		 * Treat it as a MaxAge case -- endo.
 1758|       |		 */
 1759|  19.6k|		if (ntohs(lsah->ls_age) > OSPF_LSA_MAXAGE)
  ------------------
  |  |   33|  19.6k|#define OSPF_LSA_MAXAGE                       3600
  ------------------
  |  Branch (1759:7): [True: 10.1k, False: 9.43k]
  ------------------
 1760|  10.1k|			lsah->ls_age = htons(OSPF_LSA_MAXAGE);
 1761|       |
 1762|  19.6k|		if (CHECK_FLAG(nbr->options, OSPF_OPTION_O)) {
  ------------------
  |  |  394|  19.6k|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 8.38k, False: 11.2k]
  |  |  ------------------
  ------------------
 1763|       |#ifdef STRICT_OBIT_USAGE_CHECK
 1764|       |			if ((IS_OPAQUE_LSA(lsah->type)
 1765|       |			     && !CHECK_FLAG(lsah->options, OSPF_OPTION_O))
 1766|       |			    || (!IS_OPAQUE_LSA(lsah->type)
 1767|       |				&& CHECK_FLAG(lsah->options, OSPF_OPTION_O))) {
 1768|       |				/*
 1769|       |				 * This neighbor must know the exact usage of
 1770|       |				 * O-bit;
 1771|       |				 * the bit will be set in Type-9,10,11 LSAs
 1772|       |				 * only.
 1773|       |				 */
 1774|       |				flog_warn(EC_OSPF_PACKET,
 1775|       |					  "LSA[Type%d:%pI4]: O-bit abuse?",
 1776|       |					  lsah->type, &lsah->id);
 1777|       |				continue;
 1778|       |			}
 1779|       |#endif /* STRICT_OBIT_USAGE_CHECK */
 1780|       |
 1781|       |			/* Do not take in AS External Opaque-LSAs if we are a
 1782|       |			 * stub. */
 1783|  8.38k|			if (lsah->type == OSPF_OPAQUE_AS_LSA
  ------------------
  |  |   34|  16.7k|#define OSPF_OPAQUE_AS_LSA	     11
  ------------------
  |  Branch (1783:8): [True: 691, False: 7.69k]
  ------------------
 1784|    691|			    && nbr->oi->area->external_routing
  ------------------
  |  Branch (1784:11): [True: 0, False: 691]
  ------------------
 1785|    691|				       != OSPF_AREA_DEFAULT) {
  ------------------
  |  |   76|    691|#define OSPF_AREA_DEFAULT       0
  ------------------
 1786|      0|				if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|      0|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|      0|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1787|      0|					zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1788|      0|						"LSA[Type%d:%pI4]: We are a stub, don't take this LSA.",
 1789|      0|						lsah->type,
 1790|      0|						&lsah->id);
 1791|      0|				continue;
 1792|      0|			}
 1793|  11.2k|		} else if (IS_OPAQUE_LSA(lsah->type)) {
  ------------------
  |  |   15|  11.2k|	((type) == OSPF_OPAQUE_LINK_LSA || (type) == OSPF_OPAQUE_AREA_LSA      \
  |  |  ------------------
  |  |  |  |   32|  22.4k|#define OSPF_OPAQUE_LINK_LSA	      9
  |  |  ------------------
  |  |               	((type) == OSPF_OPAQUE_LINK_LSA || (type) == OSPF_OPAQUE_AREA_LSA      \
  |  |  ------------------
  |  |  |  |   33|  22.1k|#define OSPF_OPAQUE_AREA_LSA	     10
  |  |  ------------------
  |  |  |  Branch (15:3): [True: 358, False: 10.8k]
  |  |  |  Branch (15:37): [True: 308, False: 10.5k]
  |  |  ------------------
  |  |   16|  11.2k|	 || (type) == OSPF_OPAQUE_AS_LSA)
  |  |  ------------------
  |  |  |  |   34|  10.5k|#define OSPF_OPAQUE_AS_LSA	     11
  |  |  ------------------
  |  |  |  Branch (16:6): [True: 336, False: 10.2k]
  |  |  ------------------
  ------------------
 1794|  1.00k|			flog_warn(
  ------------------
  |  |  137|  1.00k|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 1795|  1.00k|				EC_OSPF_PACKET,
 1796|  1.00k|				"LSA[Type%d:%pI4] from %pI4: Opaque capability mismatch?",
 1797|  1.00k|				lsah->type, &lsah->id, &lsah->adv_router);
 1798|  1.00k|			continue;
 1799|  1.00k|		}
 1800|       |
 1801|       |		/* Create OSPF LSA instance. */
 1802|  18.6k|		lsa = ospf_lsa_new_and_data(length);
 1803|       |
 1804|  18.6k|		lsa->vrf_id = oi->ospf->vrf_id;
 1805|       |		/* We may wish to put some error checking if type NSSA comes in
 1806|       |		   and area not in NSSA mode */
 1807|  18.6k|		switch (lsah->type) {
 1808|    640|		case OSPF_AS_EXTERNAL_LSA:
  ------------------
  |  |   28|    640|#define OSPF_AS_EXTERNAL_LSA          5
  ------------------
  |  Branch (1808:3): [True: 640, False: 17.9k]
  ------------------
 1809|  1.33k|		case OSPF_OPAQUE_AS_LSA:
  ------------------
  |  |   34|  1.33k|#define OSPF_OPAQUE_AS_LSA	     11
  ------------------
  |  Branch (1809:3): [True: 691, False: 17.9k]
  ------------------
 1810|  1.33k|			lsa->area = NULL;
 1811|  1.33k|			break;
 1812|  1.30k|		case OSPF_OPAQUE_LINK_LSA:
  ------------------
  |  |   32|  1.30k|#define OSPF_OPAQUE_LINK_LSA	      9
  ------------------
  |  Branch (1812:3): [True: 1.30k, False: 17.3k]
  ------------------
 1813|  1.30k|			lsa->oi = oi; /* Remember incoming interface for
 1814|       |					 flooding control. */
 1815|       |		/* Fallthrough */
 1816|  17.2k|		default:
  ------------------
  |  Branch (1816:3): [True: 15.9k, False: 2.63k]
  ------------------
 1817|  17.2k|			lsa->area = oi->area;
 1818|  17.2k|			break;
 1819|  18.6k|		}
 1820|       |
 1821|  18.6k|		memcpy(lsa->data, lsah, length);
 1822|       |
 1823|  18.6k|		if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|  18.6k|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|  18.6k|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|  18.6k|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 18.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1824|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1825|  18.6k|				"LSA[Type%d:%pI4]: %p new LSA created with Link State Update",
 1826|  18.6k|				lsa->data->type, &lsa->data->id,
 1827|  18.6k|				(void *)lsa);
 1828|  18.6k|		listnode_add(lsas, lsa);
 1829|  18.6k|	}
 1830|       |
 1831|  1.49k|	return lsas;
 1832|  1.49k|}
ospf_packet.c:ospf_upd_list_clean:
 1836|     10|{
 1837|     10|	struct listnode *node, *nnode;
 1838|     10|	struct ospf_lsa *lsa;
 1839|       |
 1840|     10|	for (ALL_LIST_ELEMENTS(lsas, node, nnode, lsa))
  ------------------
  |  |  320|     10|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|     10|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 10, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  321|    410|	(node) != NULL                                                         \
  |  |  ------------------
  |  |  |  Branch (321:2): [True: 400, False: 10]
  |  |  ------------------
  |  |  322|    800|		&& ((data) = static_cast(data, listgetdata(node)),             \
  |  |  ------------------
  |  |  |  |  204|  2.40k|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 400, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 400]
  |  |  |  |  |  Branch (204:28): [True: 400, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 400]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:6): [True: 400, False: 0]
  |  |  ------------------
  |  |  323|    800|		    (nextnode) = node->next, 1);                               \
  |  |  324|    400|	(node) = (nextnode), ((data) = NULL)
  ------------------
 1841|    400|		ospf_lsa_discard(lsa);
 1842|       |
 1843|     10|	list_delete(&lsas);
 1844|     10|}
ospf_packet.c:ospf_ls_ack:
 2249|     49|{
 2250|     49|	struct ospf_neighbor *nbr;
 2251|       |
 2252|       |	/* increment statistics. */
 2253|     49|	oi->ls_ack_in++;
 2254|       |
 2255|     49|	nbr = ospf_nbr_lookup(oi, iph, ospfh);
 2256|     49|	if (nbr == NULL) {
  ------------------
  |  Branch (2256:6): [True: 0, False: 49]
  ------------------
 2257|      0|		flog_warn(EC_OSPF_PACKET,
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 2258|      0|			  "Link State Acknowledgment: Unknown Neighbor %pI4",
 2259|      0|			  &ospfh->router_id);
 2260|      0|		return;
 2261|      0|	}
 2262|       |
 2263|     49|	if (nbr->state < NSM_Exchange) {
  ------------------
  |  |   21|     49|#define NSM_Exchange		7
  ------------------
  |  Branch (2263:6): [True: 0, False: 49]
  ------------------
 2264|      0|		if (IS_DEBUG_OSPF(nsm, NSM_EVENTS))
  ------------------
  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  ------------------
  |  |  |  |   28|      0|#define OSPF_DEBUG_NSM_EVENTS	0x02
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2265|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 2266|      0|				"Link State Acknowledgment: Neighbor[%pI4] state %s is less than Exchange",
 2267|      0|				&ospfh->router_id,
 2268|      0|				lookup_msg(ospf_nsm_state_msg, nbr->state,
 2269|      0|					   NULL));
 2270|      0|		return;
 2271|      0|	}
 2272|       |
 2273|    199|	while (size >= OSPF_LSA_HEADER_SIZE) {
  ------------------
  |  |   36|    199|#define OSPF_LSA_HEADER_SIZE	     20U
  ------------------
  |  Branch (2273:9): [True: 150, False: 49]
  ------------------
 2274|    150|		struct ospf_lsa *lsa, *lsr;
 2275|       |
 2276|    150|		lsa = ospf_lsa_new();
 2277|    150|		lsa->data = (struct lsa_header *)stream_pnt(s);
 2278|    150|		lsa->vrf_id = oi->ospf->vrf_id;
 2279|       |
 2280|       |		/* lsah = (struct lsa_header *) stream_pnt (s); */
 2281|    150|		size -= OSPF_LSA_HEADER_SIZE;
  ------------------
  |  |   36|    150|#define OSPF_LSA_HEADER_SIZE	     20U
  ------------------
 2282|    150|		stream_forward_getp(s, OSPF_LSA_HEADER_SIZE);
  ------------------
  |  |   36|    150|#define OSPF_LSA_HEADER_SIZE	     20U
  ------------------
 2283|       |
 2284|    150|		if (lsa->data->type < OSPF_MIN_LSA
  ------------------
  |  |   19|    300|#define OSPF_MIN_LSA		1  /* begin range here */
  ------------------
  |  Branch (2284:7): [True: 0, False: 150]
  ------------------
 2285|    150|		    || lsa->data->type >= OSPF_MAX_LSA) {
  ------------------
  |  |   20|    150|#define OSPF_MAX_LSA           12
  ------------------
  |  Branch (2285:10): [True: 0, False: 150]
  ------------------
 2286|      0|			lsa->data = NULL;
 2287|      0|			ospf_lsa_discard(lsa);
 2288|      0|			continue;
 2289|      0|		}
 2290|       |
 2291|    150|		lsr = ospf_ls_retransmit_lookup(nbr, lsa);
 2292|       |
 2293|    150|		if (lsr != NULL && ospf_lsa_more_recent(lsr, lsa) == 0) {
  ------------------
  |  Branch (2293:7): [True: 0, False: 150]
  |  Branch (2293:22): [True: 0, False: 0]
  ------------------
 2294|      0|			ospf_ls_retransmit_delete(nbr, lsr);
 2295|      0|			ospf_check_and_gen_init_seq_lsa(oi, lsa);
 2296|      0|		}
 2297|       |
 2298|    150|		lsa->data = NULL;
 2299|    150|		ospf_lsa_discard(lsa);
 2300|    150|	}
 2301|       |
 2302|     49|	return;
 2303|     49|}
ospf_packet.c:ospf_packet_max:
  283|    337|{
  284|    337|	int max;
  285|       |
  286|    337|	max = oi->ifp->mtu - ospf_packet_authspace(oi);
  287|       |
  288|    337|	max -= (OSPF_HEADER_SIZE + sizeof(struct ip));
  ------------------
  |  |   10|    337|#define OSPF_HEADER_SIZE         24U
  ------------------
  289|       |
  290|    337|	return max;
  291|    337|}
ospf_packet.c:ospf_packet_authspace:
  273|    337|{
  274|    337|	int auth = 0;
  275|       |
  276|    337|	if (ospf_auth_type(oi) == OSPF_AUTH_CRYPTOGRAPHIC)
  ------------------
  |  |   43|    337|#define OSPF_AUTH_CRYPTOGRAPHIC             2
  ------------------
  |  Branch (276:6): [True: 0, False: 337]
  ------------------
  277|      0|		auth = OSPF_AUTH_MD5_SIZE;
  ------------------
  |  |   12|      0|#define OSPF_AUTH_MD5_SIZE       16U
  ------------------
  278|       |
  279|    337|	return auth;
  280|    337|}
ospf_packet.c:ospf_packet_new:
  124|    274|{
  125|    274|	struct ospf_packet *new;
  126|       |
  127|    274|	new = XCALLOC(MTYPE_OSPF_PACKET, sizeof(struct ospf_packet));
  ------------------
  |  |  165|    274|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  128|    274|	new->s = stream_new(size);
  129|       |
  130|    274|	return new;
  131|    274|}
ospf_packet.c:ospf_make_header:
 3268|    184|{
 3269|    184|	struct ospf_header *ospfh;
 3270|       |
 3271|    184|	ospfh = (struct ospf_header *)STREAM_DATA(s);
  ------------------
  |  |  126|    184|#define STREAM_DATA(S)  ((S)->data)
  ------------------
 3272|       |
 3273|    184|	ospfh->version = (uint8_t)OSPF_VERSION;
  ------------------
  |  |   23|    184|#define OSPF_VERSION            2
  ------------------
 3274|    184|	ospfh->type = (uint8_t)type;
 3275|       |
 3276|    184|	ospfh->router_id = oi->ospf->router_id;
 3277|       |
 3278|    184|	ospfh->checksum = 0;
 3279|    184|	ospfh->area_id = oi->area->area_id;
 3280|    184|	ospfh->auth_type = htons(ospf_auth_type(oi));
 3281|       |
 3282|    184|	memset(ospfh->u.auth_data, 0, OSPF_AUTH_SIMPLE_SIZE);
  ------------------
  |  |   11|    184|#define OSPF_AUTH_SIMPLE_SIZE     8U
  ------------------
 3283|       |
 3284|    184|	stream_forward_endp(s, OSPF_HEADER_SIZE);
  ------------------
  |  |   10|    184|#define OSPF_HEADER_SIZE         24U
  ------------------
 3285|    184|}
ospf_packet.c:ospf_make_db_desc:
 3448|     90|{
 3449|     90|	struct ospf_lsa *lsa;
 3450|     90|	uint16_t length = OSPF_DB_DESC_MIN_SIZE;
  ------------------
  |  |   16|     90|#define OSPF_DB_DESC_MIN_SIZE     8U
  ------------------
 3451|     90|	uint8_t options;
 3452|     90|	unsigned long pp;
 3453|     90|	int i;
 3454|     90|	struct ospf_lsdb *lsdb;
 3455|       |
 3456|       |	/* Set Interface MTU. */
 3457|     90|	if (oi->type == OSPF_IFTYPE_VIRTUALLINK)
  ------------------
  |  |   48|     90|#define OSPF_IFTYPE_VIRTUALLINK		5
  ------------------
  |  Branch (3457:6): [True: 0, False: 90]
  ------------------
 3458|      0|		stream_putw(s, 0);
 3459|     90|	else
 3460|     90|		stream_putw(s, oi->ifp->mtu);
 3461|       |
 3462|       |	/* Set Options. */
 3463|     90|	options = OPTIONS(oi);
  ------------------
  |  |  220|     90|#define OPTIONS(I)		((I)->nbr_self->options)
  ------------------
 3464|     90|	if (CHECK_FLAG(oi->ospf->config, OSPF_OPAQUE_CAPABLE))
  ------------------
  |  |  394|     90|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 0, False: 90]
  |  |  ------------------
  ------------------
 3465|      0|		SET_FLAG(options, OSPF_OPTION_O);
  ------------------
  |  |  395|      0|#define SET_FLAG(V,F)        (V) |= (F)
  ------------------
 3466|     90|	if (OSPF_FR_CONFIG(oi->ospf, oi->area))
  ------------------
  |  |  223|     90|	(o->fr_configured || ((a != NULL) ? a->fr_info.configured : 0))
  |  |  ------------------
  |  |  |  Branch (223:3): [True: 0, False: 90]
  |  |  |  Branch (223:23): [True: 0, False: 90]
  |  |  |  Branch (223:24): [True: 90, False: 0]
  |  |  ------------------
  ------------------
 3467|      0|		SET_FLAG(options, OSPF_OPTION_DC);
  ------------------
  |  |  395|      0|#define SET_FLAG(V,F)        (V) |= (F)
  ------------------
 3468|     90|	stream_putc(s, options);
 3469|       |
 3470|       |	/* DD flags */
 3471|     90|	pp = stream_get_endp(s);
 3472|     90|	stream_putc(s, nbr->dd_flags);
 3473|       |
 3474|       |	/* Set DD Sequence Number. */
 3475|     90|	stream_putl(s, nbr->dd_seqnum);
 3476|       |
 3477|       |	/* shortcut unneeded walk of (empty) summary LSDBs */
 3478|     90|	if (ospf_db_summary_isempty(nbr))
  ------------------
  |  Branch (3478:6): [True: 90, False: 0]
  ------------------
 3479|     90|		goto empty;
 3480|       |
 3481|       |	/* Describe LSA Header from Database Summary List. */
 3482|      0|	lsdb = &nbr->db_sum;
 3483|       |
 3484|      0|	for (i = OSPF_MIN_LSA; i < OSPF_MAX_LSA; i++) {
  ------------------
  |  |   19|      0|#define OSPF_MIN_LSA		1  /* begin range here */
  ------------------
              	for (i = OSPF_MIN_LSA; i < OSPF_MAX_LSA; i++) {
  ------------------
  |  |   20|      0|#define OSPF_MAX_LSA           12
  ------------------
  |  Branch (3484:25): [True: 0, False: 0]
  ------------------
 3485|      0|		struct route_table *table = lsdb->type[i].db;
 3486|      0|		struct route_node *rn;
 3487|       |
 3488|      0|		for (rn = route_top(table); rn; rn = route_next(rn))
  ------------------
  |  Branch (3488:31): [True: 0, False: 0]
  ------------------
 3489|      0|			if ((lsa = rn->info) != NULL) {
  ------------------
  |  Branch (3489:8): [True: 0, False: 0]
  ------------------
 3490|      0|				if (IS_OPAQUE_LSA(lsa->data->type)
  ------------------
  |  |   15|      0|	((type) == OSPF_OPAQUE_LINK_LSA || (type) == OSPF_OPAQUE_AREA_LSA      \
  |  |  ------------------
  |  |  |  |   32|      0|#define OSPF_OPAQUE_LINK_LSA	      9
  |  |  ------------------
  |  |               	((type) == OSPF_OPAQUE_LINK_LSA || (type) == OSPF_OPAQUE_AREA_LSA      \
  |  |  ------------------
  |  |  |  |   33|      0|#define OSPF_OPAQUE_AREA_LSA	     10
  |  |  ------------------
  |  |  |  Branch (15:3): [True: 0, False: 0]
  |  |  |  Branch (15:37): [True: 0, False: 0]
  |  |  ------------------
  |  |   16|      0|	 || (type) == OSPF_OPAQUE_AS_LSA)
  |  |  ------------------
  |  |  |  |   34|      0|#define OSPF_OPAQUE_AS_LSA	     11
  |  |  ------------------
  |  |  |  Branch (16:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3491|      0|				    && (!CHECK_FLAG(options, OSPF_OPTION_O))) {
  ------------------
  |  |  394|      0|#define CHECK_FLAG(V,F)      ((V) & (F))
  ------------------
  |  Branch (3491:12): [True: 0, False: 0]
  ------------------
 3492|       |					/* Suppress advertising
 3493|       |					 * opaque-information. */
 3494|       |					/* Remove LSA from DB summary list. */
 3495|      0|					ospf_lsdb_delete(lsdb, lsa);
 3496|      0|					continue;
 3497|      0|				}
 3498|       |
 3499|      0|				if (!CHECK_FLAG(lsa->flags, OSPF_LSA_DISCARD)) {
  ------------------
  |  |  394|      0|#define CHECK_FLAG(V,F)      ((V) & (F))
  ------------------
  |  Branch (3499:9): [True: 0, False: 0]
  ------------------
 3500|      0|					struct lsa_header *lsah;
 3501|      0|					uint16_t ls_age;
 3502|       |
 3503|       |					/* DD packet overflows interface MTU. */
 3504|      0|					if (length + OSPF_LSA_HEADER_SIZE
  ------------------
  |  |   36|      0|#define OSPF_LSA_HEADER_SIZE	     20U
  ------------------
  |  Branch (3504:10): [True: 0, False: 0]
  ------------------
 3505|      0|					    > ospf_packet_max(oi))
 3506|      0|						break;
 3507|       |
 3508|       |					/* Keep pointer to LS age. */
 3509|      0|					lsah = (struct lsa_header
 3510|      0|							*)(STREAM_DATA(s)
  ------------------
  |  |  126|      0|#define STREAM_DATA(S)  ((S)->data)
  ------------------
 3511|      0|							   + stream_get_endp(
 3512|      0|								     s));
 3513|       |
 3514|       |					/* Proceed stream pointer. */
 3515|      0|					stream_put(s, lsa->data,
 3516|      0|						   OSPF_LSA_HEADER_SIZE);
  ------------------
  |  |   36|      0|#define OSPF_LSA_HEADER_SIZE	     20U
  ------------------
 3517|      0|					length += OSPF_LSA_HEADER_SIZE;
  ------------------
  |  |   36|      0|#define OSPF_LSA_HEADER_SIZE	     20U
  ------------------
 3518|       |
 3519|       |					/* Set LS age. */
 3520|      0|					ls_age = LS_AGE(lsa);
  ------------------
  |  |  209|      0|#define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  ------------------
  |  |  |  |   33|      0|#define OSPF_LSA_MAXAGE                       3600
  |  |  ------------------
  |  |               #define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  ------------------
  |  |  |  |   33|      0|#define OSPF_LSA_MAXAGE                       3600
  |  |  ------------------
  |  |  |  Branch (209:20): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3521|      0|					lsah->ls_age = htons(ls_age);
 3522|      0|				}
 3523|       |
 3524|       |				/* Remove LSA from DB summary list. */
 3525|      0|				ospf_lsdb_delete(lsdb, lsa);
 3526|      0|			}
 3527|      0|	}
 3528|       |
 3529|       |	/* Update 'More' bit */
 3530|      0|	if (ospf_db_summary_isempty(nbr)) {
  ------------------
  |  Branch (3530:6): [True: 0, False: 0]
  ------------------
 3531|     90|	empty:
 3532|     90|		if (nbr->state >= NSM_Exchange) {
  ------------------
  |  |   21|     90|#define NSM_Exchange		7
  ------------------
  |  Branch (3532:7): [True: 90, False: 0]
  ------------------
 3533|     90|			UNSET_FLAG(nbr->dd_flags, OSPF_DD_FLAG_M);
  ------------------
  |  |  396|     90|#define UNSET_FLAG(V,F)      (V) &= ~(F)
  ------------------
 3534|       |			/* Rewrite DD flags */
 3535|     90|			stream_putc_at(s, pp, nbr->dd_flags);
 3536|     90|		} else {
 3537|      0|			assert(IS_SET_DD_M(nbr->dd_flags));
  ------------------
  |  |   51|      0|	({                                                                     \
  |  |   52|      0|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|      0|			(used)) = {                                            \
  |  |   54|      0|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|      0|	{                                                                      \
  |  |  |  |  284|      0|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      0|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      0|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      0|		/* .func = */ func_,                                           \
  |  |  |  |  289|      0|	}                                                                      \
  |  |  ------------------
  |  |   55|      0|			.expr = #expr_,                                        \
  |  |   56|      0|		};                                                             \
  |  |   57|      0|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      0|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      0|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      0|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|      0|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 0]
  |  |  |  Branch (58:24): [True: 0, False: 0]
  |  |  ------------------
  |  |   59|      0|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|      0|	})
  ------------------
 3538|      0|		}
 3539|     90|	}
 3540|     90|	return length;
 3541|      0|}
ospf_packet.c:ospf_fill_header:
 3328|    172|{
 3329|    172|	struct ospf_header *ospfh;
 3330|       |
 3331|    172|	ospfh = (struct ospf_header *)STREAM_DATA(s);
  ------------------
  |  |  126|    172|#define STREAM_DATA(S)  ((S)->data)
  ------------------
 3332|       |
 3333|       |	/* Fill length. */
 3334|    172|	ospfh->length = htons(length);
 3335|       |
 3336|       |	/* Calculate checksum. */
 3337|    172|	if (ntohs(ospfh->auth_type) != OSPF_AUTH_CRYPTOGRAPHIC)
  ------------------
  |  |   43|    172|#define OSPF_AUTH_CRYPTOGRAPHIC             2
  ------------------
  |  Branch (3337:6): [True: 172, False: 0]
  ------------------
 3338|    172|		ospfh->checksum = in_cksum(ospfh, length);
 3339|      0|	else
 3340|      0|		ospfh->checksum = 0;
 3341|       |
 3342|       |	/* Add Authentication Data. */
 3343|    172|	ospf_make_auth(oi, ospfh);
 3344|    172|}
ospf_packet.c:ospf_make_auth:
 3289|    172|{
 3290|    172|	struct crypt_key *ck;
 3291|       |
 3292|    172|	switch (ospf_auth_type(oi)) {
 3293|    172|	case OSPF_AUTH_NULL:
  ------------------
  |  |   41|    172|#define OSPF_AUTH_NULL                      0
  ------------------
  |  Branch (3293:2): [True: 172, False: 0]
  ------------------
 3294|       |		/* memset (ospfh->u.auth_data, 0, sizeof(ospfh->u.auth_data));
 3295|       |		 */
 3296|    172|		break;
 3297|      0|	case OSPF_AUTH_SIMPLE:
  ------------------
  |  |   42|      0|#define OSPF_AUTH_SIMPLE                    1
  ------------------
  |  Branch (3297:2): [True: 0, False: 172]
  ------------------
 3298|      0|		memcpy(ospfh->u.auth_data, OSPF_IF_PARAM(oi, auth_simple),
  ------------------
  |  |   32|      0|	(OSPF_IF_PARAM_CONFIGURED((O)->params, P)                              \
  |  |  ------------------
  |  |  |  |   22|      0|#define OSPF_IF_PARAM_CONFIGURED(S, P) ((S) && (S)->P##__config)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (22:41): [True: 0, False: 0]
  |  |  |  |  |  Branch (22:48): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   33|      0|		 ? (O)->params->P                                              \
  |  |   34|      0|		 : IF_DEF_PARAMS((O)->ifp)->P)
  |  |  ------------------
  |  |  |  |   17|      0|#define IF_DEF_PARAMS(I) (IF_OSPF_IF_INFO (I)->def_params)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3299|      0|		       OSPF_AUTH_SIMPLE_SIZE);
  ------------------
  |  |   11|      0|#define OSPF_AUTH_SIMPLE_SIZE     8U
  ------------------
 3300|      0|		break;
 3301|      0|	case OSPF_AUTH_CRYPTOGRAPHIC:
  ------------------
  |  |   43|      0|#define OSPF_AUTH_CRYPTOGRAPHIC             2
  ------------------
  |  Branch (3301:2): [True: 0, False: 172]
  ------------------
 3302|       |		/* If key is not set, then set 0. */
 3303|      0|		if (list_isempty(OSPF_IF_PARAM(oi, auth_crypt))) {
  ------------------
  |  |   56|      0|#define list_isempty(X) ((X)->head == NULL && (X)->tail == NULL)
  |  |  ------------------
  |  |  |  Branch (56:26): [True: 0, False: 0]
  |  |  |  Branch (56:27): [True: 0, False: 0]
  |  |  |  Branch (56:27): [True: 0, False: 0]
  |  |  |  Branch (56:47): [True: 0, False: 0]
  |  |  |  Branch (56:48): [True: 0, False: 0]
  |  |  |  Branch (56:48): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3304|      0|			ospfh->u.crypt.zero = 0;
 3305|      0|			ospfh->u.crypt.key_id = 0;
 3306|      0|			ospfh->u.crypt.auth_data_len = OSPF_AUTH_MD5_SIZE;
  ------------------
  |  |   12|      0|#define OSPF_AUTH_MD5_SIZE       16U
  ------------------
 3307|      0|		} else {
 3308|      0|			ck = listgetdata(
  ------------------
  |  |   58|      0|#define listgetdata(X) (assert(X), assert((X)->data != NULL), (X)->data)
  |  |  ------------------
  |  |  |  |   51|      0|	({                                                                     \
  |  |  |  |   52|      0|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|      0|			(used)) = {                                            \
  |  |  |  |   54|      0|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{                                                                      \
  |  |  |  |  |  |  284|      0|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|      0|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|      0|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|      0|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|      0|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|      0|			.expr = #expr_,                                        \
  |  |  |  |   56|      0|		};                                                             \
  |  |  |  |   57|      0|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|      0|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|      0|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|      0|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|      0|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 0]
  |  |  |  |  |  Branch (58:24): [True: 0, False: 0]
  |  |  |  |  |  Branch (58:25): [True: 0, False: 0]
  |  |  |  |  |  Branch (58:25): [True: 0, False: 0]
  |  |  |  |  |  Branch (58:25): [True: 0, False: 0]
  |  |  |  |  |  Branch (58:25): [True: 0, False: 0]
  |  |  |  |  |  Branch (58:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|      0|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|      0|	})
  |  |  ------------------
  |  |               #define listgetdata(X) (assert(X), assert((X)->data != NULL), (X)->data)
  |  |  ------------------
  |  |  |  |   51|      0|	({                                                                     \
  |  |  |  |   52|      0|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|      0|			(used)) = {                                            \
  |  |  |  |   54|      0|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{                                                                      \
  |  |  |  |  |  |  284|      0|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|      0|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|      0|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|      0|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|      0|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|      0|			.expr = #expr_,                                        \
  |  |  |  |   56|      0|		};                                                             \
  |  |  |  |   57|      0|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|      0|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|      0|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|      0|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|      0|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 0]
  |  |  |  |  |  Branch (58:24): [True: 0, False: 0]
  |  |  |  |  |  Branch (58:25): [True: 0, False: 0]
  |  |  |  |  |  Branch (58:25): [True: 0, False: 0]
  |  |  |  |  |  Branch (58:25): [True: 0, False: 0]
  |  |  |  |  |  Branch (58:25): [True: 0, False: 0]
  |  |  |  |  |  Branch (58:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|      0|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|      0|	})
  |  |  ------------------
  |  |  |  Branch (58:64): [True: 0, False: 0]
  |  |  |  Branch (58:64): [True: 0, False: 0]
  |  |  |  Branch (58:64): [True: 0, False: 0]
  |  |  |  Branch (58:64): [True: 0, False: 0]
  |  |  |  Branch (58:64): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3309|      0|				listtail(OSPF_IF_PARAM(oi, auth_crypt)));
 3310|      0|			ospfh->u.crypt.zero = 0;
 3311|      0|			ospfh->u.crypt.key_id = ck->key_id;
 3312|      0|			ospfh->u.crypt.auth_data_len = OSPF_AUTH_MD5_SIZE;
  ------------------
  |  |   12|      0|#define OSPF_AUTH_MD5_SIZE       16U
  ------------------
 3313|      0|		}
 3314|       |		/* note: the seq is done in ospf_make_md5_digest() */
 3315|      0|		break;
 3316|      0|	default:
  ------------------
  |  Branch (3316:2): [True: 0, False: 172]
  ------------------
 3317|       |		/* memset (ospfh->u.auth_data, 0, sizeof(ospfh->u.auth_data));
 3318|       |		 */
 3319|      0|		break;
 3320|    172|	}
 3321|       |
 3322|    172|	return 0;
 3323|    172|}
ospf_packet.c:ospf_packet_add:
  223|    172|{
  224|       |	/* Add packet to end of queue. */
  225|    172|	ospf_fifo_push(oi->obuf, op);
  226|       |
  227|       |	/* Debug of packet fifo*/
  228|       |	/* ospf_fifo_debug (oi->obuf); */
  229|    172|}
ospf_packet.c:ospf_packet_dup:
  252|     90|{
  253|     90|	struct ospf_packet *new;
  254|       |
  255|     90|	if (stream_get_endp(op->s) != op->length)
  ------------------
  |  Branch (255:6): [True: 0, False: 90]
  ------------------
  256|       |		/* XXX size_t */
  257|      0|		zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  258|     90|			"ospf_packet_dup stream %lu ospf_packet %u size mismatch",
  259|     90|			(unsigned long)STREAM_SIZE(op->s), op->length);
  260|       |
  261|       |	/* Reserve space for MD5 authentication that may be added later. */
  262|     90|	new = ospf_packet_new(stream_get_endp(op->s) + OSPF_AUTH_MD5_SIZE);
  ------------------
  |  |   12|     90|#define OSPF_AUTH_MD5_SIZE       16U
  ------------------
  263|     90|	stream_copy(new->s, op->s);
  264|       |
  265|     90|	new->dst = op->dst;
  266|     90|	new->length = op->length;
  267|       |
  268|     90|	return new;
  269|     90|}
ospf_packet.c:ospf_make_ls_req:
 3574|     94|{
 3575|     94|	struct ospf_lsa *lsa;
 3576|     94|	uint16_t length = OSPF_LS_REQ_MIN_SIZE;
  ------------------
  |  |   17|     94|#define OSPF_LS_REQ_MIN_SIZE      0U
  ------------------
 3577|     94|	unsigned long delta = 12;
 3578|     94|	struct route_table *table;
 3579|     94|	struct route_node *rn;
 3580|     94|	int i;
 3581|     94|	struct ospf_lsdb *lsdb;
 3582|       |
 3583|     94|	lsdb = &nbr->ls_req;
 3584|       |
 3585|  1.12k|	for (i = OSPF_MIN_LSA; i < OSPF_MAX_LSA; i++) {
  ------------------
  |  |   19|     94|#define OSPF_MIN_LSA		1  /* begin range here */
  ------------------
              	for (i = OSPF_MIN_LSA; i < OSPF_MAX_LSA; i++) {
  ------------------
  |  |   20|  1.12k|#define OSPF_MAX_LSA           12
  ------------------
  |  Branch (3585:25): [True: 1.03k, False: 94]
  ------------------
 3586|  1.03k|		table = lsdb->type[i].db;
 3587|  1.67k|		for (rn = route_top(table); rn; rn = route_next(rn))
  ------------------
  |  Branch (3587:31): [True: 818, False: 854]
  ------------------
 3588|    818|			if ((lsa = (rn->info)) != NULL)
  ------------------
  |  Branch (3588:8): [True: 337, False: 481]
  ------------------
 3589|    337|				if (ospf_make_ls_req_func(s, &length, delta,
  ------------------
  |  Branch (3589:9): [True: 180, False: 157]
  ------------------
 3590|    337|							  nbr, lsa)
 3591|    337|				    == 0) {
 3592|    180|					route_unlock_node(rn);
 3593|    180|					break;
 3594|    180|				}
 3595|  1.03k|	}
 3596|     94|	return length;
 3597|     94|}
ospf_packet.c:ospf_make_ls_req_func:
 3546|    337|{
 3547|    337|	struct ospf_interface *oi;
 3548|       |
 3549|    337|	oi = nbr->oi;
 3550|       |
 3551|       |	/* LS Request packet overflows interface MTU
 3552|       |	 * delta is just number of bytes required for 1 LS Req
 3553|       |	 * ospf_packet_max will return the number of bytes can
 3554|       |	 * be accommodated without ospf header. So length+delta
 3555|       |	 * can be compared to ospf_packet_max
 3556|       |	 * to check if it can fit another lsreq in the same packet.
 3557|       |	 */
 3558|       |
 3559|    337|	if (*length + delta > ospf_packet_max(oi))
  ------------------
  |  Branch (3559:6): [True: 180, False: 157]
  ------------------
 3560|    180|		return 0;
 3561|       |
 3562|    157|	stream_putl(s, lsa->data->type);
 3563|    157|	stream_put_ipv4(s, lsa->data->id.s_addr);
 3564|    157|	stream_put_ipv4(s, lsa->data->adv_router.s_addr);
 3565|       |
 3566|    157|	ospf_lsa_unlock(&nbr->ls_req_last);
 3567|    157|	nbr->ls_req_last = ospf_lsa_lock(lsa);
 3568|       |
 3569|    157|	*length += 12;
 3570|    157|	return 1;
 3571|    337|}

ospf_router_info_init:
   74|      1|{
   75|       |
   76|      1|	zlog_info("RI (%s): Initialize Router Information", __func__);
  ------------------
  |  |  132|      1|#define zlog_info(...) 0
  ------------------
   77|       |
   78|      1|	memset(&OspfRI, 0, sizeof(OspfRI));
   79|      1|	OspfRI.enabled = false;
   80|      1|	OspfRI.registered = 0;
   81|      1|	OspfRI.scope = OSPF_OPAQUE_AS_LSA;
  ------------------
  |  |   34|      1|#define OSPF_OPAQUE_AS_LSA	     11
  ------------------
   82|      1|	OspfRI.as_flags = RIFLG_LSA_INACTIVE;
  ------------------
  |  |  165|      1|#define RIFLG_LSA_INACTIVE		0x0
  ------------------
   83|      1|	OspfRI.area_info = list_new();
   84|      1|	OspfRI.area_info->del = del_area_info;
   85|       |
   86|       |	/* Initialize pce domain and neighbor list */
   87|      1|	OspfRI.pce_info.enabled = false;
   88|      1|	OspfRI.pce_info.pce_domain = list_new();
   89|      1|	OspfRI.pce_info.pce_domain->del = del_pce_info;
   90|      1|	OspfRI.pce_info.pce_neighbor = list_new();
   91|      1|	OspfRI.pce_info.pce_neighbor->del = del_pce_info;
   92|       |
   93|       |	/* Initialize Segment Routing information structure */
   94|      1|	OspfRI.sr_info.enabled = false;
   95|       |
   96|      1|	ospf_router_info_register_vty();
   97|       |
   98|      1|	return 0;
   99|      1|}
ospf_ri.c:ospf_router_info_register_vty:
 2105|      1|{
 2106|      1|	install_element(VIEW_NODE, &show_ip_ospf_router_info_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2107|      1|	install_element(VIEW_NODE, &show_ip_ospf_router_info_pce_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2108|       |
 2109|      1|	install_element(OSPF_NODE, &router_info_area_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2110|      1|	install_element(OSPF_NODE, &no_router_info_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2111|      1|	install_element(OSPF_NODE, &pce_address_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2112|      1|	install_element(OSPF_NODE, &no_pce_address_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2113|      1|	install_element(OSPF_NODE, &pce_path_scope_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2114|      1|	install_element(OSPF_NODE, &no_pce_path_scope_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2115|      1|	install_element(OSPF_NODE, &pce_domain_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2116|      1|	install_element(OSPF_NODE, &no_pce_domain_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2117|      1|	install_element(OSPF_NODE, &pce_neighbor_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2118|      1|	install_element(OSPF_NODE, &no_pce_neighbor_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2119|      1|	install_element(OSPF_NODE, &pce_cap_flag_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2120|      1|	install_element(OSPF_NODE, &no_pce_cap_flag_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2121|       |
 2122|      1|	return;
 2123|      1|}

ospf_route_map_init:
  689|      1|{
  690|      1|	route_map_init();
  691|       |
  692|      1|	route_map_add_hook(ospf_route_map_update);
  693|      1|	route_map_delete_hook(ospf_route_map_update);
  694|      1|	route_map_event_hook(ospf_route_map_event);
  695|       |
  696|      1|	route_map_match_ip_next_hop_hook(generic_match_add);
  697|      1|	route_map_no_match_ip_next_hop_hook(generic_match_delete);
  698|       |
  699|      1|	route_map_match_interface_hook(generic_match_add);
  700|      1|	route_map_no_match_interface_hook(generic_match_delete);
  701|       |
  702|      1|	route_map_match_ip_address_hook(generic_match_add);
  703|      1|	route_map_no_match_ip_address_hook(generic_match_delete);
  704|       |
  705|      1|	route_map_match_ip_address_prefix_list_hook(generic_match_add);
  706|      1|	route_map_no_match_ip_address_prefix_list_hook(generic_match_delete);
  707|       |
  708|      1|	route_map_match_ip_next_hop_prefix_list_hook(generic_match_add);
  709|      1|	route_map_no_match_ip_next_hop_prefix_list_hook(generic_match_delete);
  710|       |
  711|      1|	route_map_match_ip_next_hop_type_hook(generic_match_add);
  712|      1|	route_map_no_match_ip_next_hop_type_hook(generic_match_delete);
  713|       |
  714|      1|	route_map_match_tag_hook(generic_match_add);
  715|      1|	route_map_no_match_tag_hook(generic_match_delete);
  716|       |
  717|      1|	route_map_set_metric_hook(generic_set_add);
  718|      1|	route_map_no_set_metric_hook(generic_set_delete);
  719|       |
  720|      1|	route_map_set_min_metric_hook(generic_set_add);
  721|      1|	route_map_no_set_min_metric_hook(generic_set_delete);
  722|       |
  723|      1|	route_map_set_max_metric_hook(generic_set_add);
  724|      1|	route_map_no_set_max_metric_hook(generic_set_delete);
  725|       |
  726|      1|	route_map_set_tag_hook(generic_set_add);
  727|      1|	route_map_no_set_tag_hook(generic_set_delete);
  728|       |
  729|      1|	route_map_install_match(&route_match_ip_nexthop_cmd);
  ------------------
  |  |  450|      1|	do {                                                                   \
  |  |  451|      1|		static struct route_map_rule_cmd_proxy proxy = {.cmd = c};     \
  |  |  452|      1|		_route_map_install_match(&proxy);                              \
  |  |  453|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (453:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  730|      1|	route_map_install_match(&route_match_ip_next_hop_prefix_list_cmd);
  ------------------
  |  |  450|      1|	do {                                                                   \
  |  |  451|      1|		static struct route_map_rule_cmd_proxy proxy = {.cmd = c};     \
  |  |  452|      1|		_route_map_install_match(&proxy);                              \
  |  |  453|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (453:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  731|      1|	route_map_install_match(&route_match_ip_address_cmd);
  ------------------
  |  |  450|      1|	do {                                                                   \
  |  |  451|      1|		static struct route_map_rule_cmd_proxy proxy = {.cmd = c};     \
  |  |  452|      1|		_route_map_install_match(&proxy);                              \
  |  |  453|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (453:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  732|      1|	route_map_install_match(&route_match_ip_address_prefix_list_cmd);
  ------------------
  |  |  450|      1|	do {                                                                   \
  |  |  451|      1|		static struct route_map_rule_cmd_proxy proxy = {.cmd = c};     \
  |  |  452|      1|		_route_map_install_match(&proxy);                              \
  |  |  453|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (453:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  733|      1|	route_map_install_match(&route_match_ip_next_hop_type_cmd);
  ------------------
  |  |  450|      1|	do {                                                                   \
  |  |  451|      1|		static struct route_map_rule_cmd_proxy proxy = {.cmd = c};     \
  |  |  452|      1|		_route_map_install_match(&proxy);                              \
  |  |  453|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (453:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  734|      1|	route_map_install_match(&route_match_interface_cmd);
  ------------------
  |  |  450|      1|	do {                                                                   \
  |  |  451|      1|		static struct route_map_rule_cmd_proxy proxy = {.cmd = c};     \
  |  |  452|      1|		_route_map_install_match(&proxy);                              \
  |  |  453|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (453:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  735|      1|	route_map_install_match(&route_match_tag_cmd);
  ------------------
  |  |  450|      1|	do {                                                                   \
  |  |  451|      1|		static struct route_map_rule_cmd_proxy proxy = {.cmd = c};     \
  |  |  452|      1|		_route_map_install_match(&proxy);                              \
  |  |  453|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (453:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  736|       |
  737|      1|	route_map_install_set(&route_set_metric_cmd);
  ------------------
  |  |  456|      1|	do {                                                                   \
  |  |  457|      1|		static struct route_map_rule_cmd_proxy proxy = {.cmd = c};     \
  |  |  458|      1|		_route_map_install_set(&proxy);                                \
  |  |  459|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (459:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  738|      1|	route_map_install_set(&route_set_min_metric_cmd);
  ------------------
  |  |  456|      1|	do {                                                                   \
  |  |  457|      1|		static struct route_map_rule_cmd_proxy proxy = {.cmd = c};     \
  |  |  458|      1|		_route_map_install_set(&proxy);                                \
  |  |  459|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (459:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  739|      1|	route_map_install_set(&route_set_max_metric_cmd);
  ------------------
  |  |  456|      1|	do {                                                                   \
  |  |  457|      1|		static struct route_map_rule_cmd_proxy proxy = {.cmd = c};     \
  |  |  458|      1|		_route_map_install_set(&proxy);                                \
  |  |  459|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (459:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  740|      1|	route_map_install_set(&route_set_metric_type_cmd);
  ------------------
  |  |  456|      1|	do {                                                                   \
  |  |  457|      1|		static struct route_map_rule_cmd_proxy proxy = {.cmd = c};     \
  |  |  458|      1|		_route_map_install_set(&proxy);                                \
  |  |  459|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (459:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  741|      1|	route_map_install_set(&route_set_tag_cmd);
  ------------------
  |  |  456|      1|	do {                                                                   \
  |  |  457|      1|		static struct route_map_rule_cmd_proxy proxy = {.cmd = c};     \
  |  |  458|      1|		_route_map_install_set(&proxy);                                \
  |  |  459|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (459:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  742|       |
  743|      1|	install_element(RMAP_NODE, &set_metric_type_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  744|      1|	install_element(RMAP_NODE, &no_set_metric_type_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  745|      1|}

ospf_spf_calculate_schedule:
 1994|    451|{
 1995|    451|	unsigned long delay, elapsed, ht;
 1996|       |
 1997|    451|	if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|    451|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|    451|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|    451|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 451]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1998|      0|		zlog_debug("SPF: calculation timer scheduled");
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1999|       |
 2000|       |	/* OSPF instance does not exist. */
 2001|    451|	if (ospf == NULL)
  ------------------
  |  Branch (2001:6): [True: 0, False: 451]
  ------------------
 2002|      0|		return;
 2003|       |
 2004|    451|	ospf_spf_set_reason(reason);
 2005|       |
 2006|       |	/* SPF calculation timer is already scheduled. */
 2007|    451|	if (ospf->t_spf_calc) {
  ------------------
  |  Branch (2007:6): [True: 0, False: 451]
  ------------------
 2008|      0|		if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|      0|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|      0|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2009|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 2010|      0|				"SPF: calculation timer is already scheduled: %p",
 2011|      0|				(void *)ospf->t_spf_calc);
 2012|      0|		return;
 2013|      0|	}
 2014|       |
 2015|    451|	elapsed = monotime_since(&ospf->ts_spf, NULL) / 1000;
 2016|       |
 2017|    451|	ht = ospf->spf_holdtime * ospf->spf_hold_multiplier;
 2018|       |
 2019|    451|	if (ht > ospf->spf_max_holdtime)
  ------------------
  |  Branch (2019:6): [True: 0, False: 451]
  ------------------
 2020|      0|		ht = ospf->spf_max_holdtime;
 2021|       |
 2022|       |	/* Get SPF calculation delay time. */
 2023|    451|	if (elapsed < ht) {
  ------------------
  |  Branch (2023:6): [True: 0, False: 451]
  ------------------
 2024|       |		/*
 2025|       |		 * Got an event within the hold time of last SPF. We need to
 2026|       |		 * increase the hold_multiplier, if it's not already at/past
 2027|       |		 * maximum value, and wasn't already increased.
 2028|       |		 */
 2029|      0|		if (ht < ospf->spf_max_holdtime)
  ------------------
  |  Branch (2029:7): [True: 0, False: 0]
  ------------------
 2030|      0|			ospf->spf_hold_multiplier++;
 2031|       |
 2032|       |		/* always honour the SPF initial delay */
 2033|      0|		if ((ht - elapsed) < ospf->spf_delay)
  ------------------
  |  Branch (2033:7): [True: 0, False: 0]
  ------------------
 2034|      0|			delay = ospf->spf_delay;
 2035|      0|		else
 2036|      0|			delay = ht - elapsed;
 2037|    451|	} else {
 2038|       |		/* Event is past required hold-time of last SPF */
 2039|    451|		delay = ospf->spf_delay;
 2040|    451|		ospf->spf_hold_multiplier = 1;
 2041|    451|	}
 2042|       |
 2043|    451|	if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|    451|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|    451|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|    451|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 451]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2044|      0|		zlog_debug("SPF: calculation timer delay = %ld msec", delay);
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 2045|       |
 2046|    451|	ospf->t_spf_calc = NULL;
 2047|    451|	event_add_timer_msec(master, ospf_spf_calculate_schedule_worker, ospf,
  ------------------
  |  |  217|    451|#define event_add_timer_msec(m, f, a, v, t) 0
  ------------------
 2048|    451|			     delay, &ospf->t_spf_calc);
 2049|    451|}
ospf_spf.c:ospf_spf_set_reason:
   56|    451|{
   57|    451|	spf_reason_flags |= 1 << reason;
   58|    451|}

ospf_sr_init:
  593|      1|{
  594|      1|	int rc = -1;
  595|       |
  596|      1|	osr_debug("SR (%s): Initialize SR Data Base", __func__);
  ------------------
  |  |   42|      1|	do {                                                                   \
  |  |   43|      1|		if (IS_DEBUG_OSPF_SR)                                          \
  |  |  ------------------
  |  |  |  |  100|      1|#define IS_DEBUG_OSPF_SR  IS_DEBUG_OSPF(sr, SR)
  |  |  |  |  ------------------
  |  |  |  |  |  |   91|      1|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|      1|#define OSPF_DEBUG_SR          0x10
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (91:29): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|			zlog_debug(__VA_ARGS__);                               \
  |  |  ------------------
  |  |  |  |  134|      0|#define zlog_debug(...) 0
  |  |  ------------------
  |  |   45|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (45:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  597|       |
  598|      1|	memset(&OspfSR, 0, sizeof(OspfSR));
  599|      1|	OspfSR.status = SR_OFF;
  600|       |	/* Only AREA flooding is supported in this release */
  601|      1|	OspfSR.scope = OSPF_OPAQUE_AREA_LSA;
  ------------------
  |  |   33|      1|#define OSPF_OPAQUE_AREA_LSA	     10
  ------------------
  602|       |
  603|       |	/* Initialize Algorithms, SRGB, SRLB and MSD TLVs */
  604|       |	/* Only Algorithm SPF is supported */
  605|      1|	OspfSR.algo[0] = SR_ALGORITHM_SPF;
  ------------------
  |  |   69|      1|#define SR_ALGORITHM_SPF         0
  ------------------
  606|      4|	for (int i = 1; i < ALGORITHM_COUNT; i++)
  ------------------
  |  |   72|      4|#define ALGORITHM_COUNT          4
  ------------------
  |  Branch (606:18): [True: 3, False: 1]
  ------------------
  607|      3|		OspfSR.algo[i] = SR_ALGORITHM_UNSET;
  ------------------
  |  |   71|      3|#define SR_ALGORITHM_UNSET       255
  ------------------
  608|       |
  609|      1|	OspfSR.srgb.size = DEFAULT_SRGB_SIZE;
  ------------------
  |  |  177|      1|#define DEFAULT_SRGB_SIZE         8000
  ------------------
  610|      1|	OspfSR.srgb.start = DEFAULT_SRGB_LABEL;
  ------------------
  |  |  176|      1|#define DEFAULT_SRGB_LABEL        16000
  ------------------
  611|      1|	OspfSR.srgb.reserved = false;
  612|       |
  613|      1|	OspfSR.srlb.start = DEFAULT_SRLB_LABEL;
  ------------------
  |  |  181|      1|#define DEFAULT_SRLB_LABEL        15000
  ------------------
  614|      1|	OspfSR.srlb.end = DEFAULT_SRLB_END;
  ------------------
  |  |  183|      1|#define DEFAULT_SRLB_END (DEFAULT_SRLB_LABEL + DEFAULT_SRLB_SIZE - 1)
  |  |  ------------------
  |  |  |  |  181|      1|#define DEFAULT_SRLB_LABEL        15000
  |  |  ------------------
  |  |               #define DEFAULT_SRLB_END (DEFAULT_SRLB_LABEL + DEFAULT_SRLB_SIZE - 1)
  |  |  ------------------
  |  |  |  |  182|      1|#define DEFAULT_SRLB_SIZE         1000
  |  |  ------------------
  ------------------
  615|      1|	OspfSR.srlb.reserved = false;
  616|      1|	OspfSR.msd = 0;
  617|       |
  618|       |	/* Initialize Hash table for neighbor SR nodes */
  619|      1|	OspfSR.neighbors = hash_create(sr_hash, sr_cmp, "OSPF_SR");
  620|      1|	if (OspfSR.neighbors == NULL)
  ------------------
  |  Branch (620:6): [True: 0, False: 1]
  ------------------
  621|      0|		return rc;
  622|       |
  623|       |	/* Register Segment Routing VTY command */
  624|      1|	ospf_sr_register_vty();
  625|       |
  626|      1|	rc = 0;
  627|      1|	return rc;
  628|      1|}
ospf_sr.c:ospf_sr_register_vty:
 2950|      1|{
 2951|      1|	install_element(VIEW_NODE, &show_ip_ospf_srdb_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2952|       |
 2953|      1|	install_element(OSPF_NODE, &ospf_sr_enable_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2954|      1|	install_element(OSPF_NODE, &no_ospf_sr_enable_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2955|      1|	install_element(OSPF_NODE, &sr_global_label_range_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2956|      1|	install_element(OSPF_NODE, &no_sr_global_label_range_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2957|      1|	install_element(OSPF_NODE, &sr_node_msd_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2958|      1|	install_element(OSPF_NODE, &no_sr_node_msd_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2959|      1|	install_element(OSPF_NODE, &sr_prefix_sid_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2960|      1|	install_element(OSPF_NODE, &no_sr_prefix_sid_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2961|      1|}

ospf_mpls_te_init:
   88|      1|{
   89|      1|	int rc;
   90|       |
   91|       |	/* Register Opaque AREA LSA Type 1 for Traffic Engineering */
   92|      1|	rc = ospf_register_opaque_functab(
   93|      1|		OSPF_OPAQUE_AREA_LSA,
  ------------------
  |  |   33|      1|#define OSPF_OPAQUE_AREA_LSA	     10
  ------------------
   94|      1|		OPAQUE_TYPE_TRAFFIC_ENGINEERING_LSA,
  ------------------
  |  |   42|      1|#define OPAQUE_TYPE_TRAFFIC_ENGINEERING_LSA		1
  ------------------
   95|      1|		ospf_mpls_te_new_if,
   96|      1|		ospf_mpls_te_del_if,
   97|      1|		ospf_mpls_te_ism_change,
   98|      1|		ospf_mpls_te_nsm_change,
   99|      1|		ospf_mpls_te_config_write_router,
  100|      1|		NULL, /* ospf_mpls_te_config_write_if */
  101|      1|		NULL, /* ospf_mpls_te_config_write_debug */
  102|      1|		ospf_mpls_te_show_info, ospf_mpls_te_lsa_originate_area,
  103|      1|		ospf_mpls_te_lsa_refresh,
  104|      1|		ospf_mpls_te_lsa_update, /* ospf_mpls_te_new_lsa_hook */
  105|      1|		ospf_mpls_te_lsa_delete /* ospf_mpls_te_del_lsa_hook */);
  106|      1|	if (rc != 0) {
  ------------------
  |  Branch (106:6): [True: 0, False: 1]
  ------------------
  107|      0|		flog_warn(
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
  108|      0|			EC_OSPF_OPAQUE_REGISTRATION,
  109|      0|			"MPLS-TE (%s): Failed to register Traffic Engineering functions",
  110|      0|			__func__);
  111|      0|		return rc;
  112|      0|	}
  113|       |
  114|       |	/*
  115|       |	 * Wee need also to register Opaque LSA Type 6 i.e. Inter-AS RFC5392 for
  116|       |	 * both AREA and AS at least to have the possibility to call the show()
  117|       |	 * function when looking to the opaque LSA of the OSPF database.
  118|       |	 */
  119|      1|	rc = ospf_register_opaque_functab(OSPF_OPAQUE_AREA_LSA,
  ------------------
  |  |   33|      1|#define OSPF_OPAQUE_AREA_LSA	     10
  ------------------
  120|      1|					  OPAQUE_TYPE_INTER_AS_LSA, NULL,
  ------------------
  |  |   47|      1|#define OPAQUE_TYPE_INTER_AS_LSA                       6
  ------------------
  121|      1|					  NULL, NULL, NULL, NULL, NULL, NULL,
  122|      1|					  ospf_mpls_te_show_info,
  123|      1|					  ospf_mpls_te_lsa_inter_as_area,
  124|      1|					  ospf_mpls_te_lsa_refresh, NULL, NULL);
  125|      1|	if (rc != 0) {
  ------------------
  |  Branch (125:6): [True: 0, False: 1]
  ------------------
  126|      0|		flog_warn(
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
  127|      0|			EC_OSPF_OPAQUE_REGISTRATION,
  128|      0|			"MPLS-TE (%s): Failed to register Inter-AS with Area scope",
  129|      0|			__func__);
  130|      0|		return rc;
  131|      0|	}
  132|       |
  133|      1|	rc = ospf_register_opaque_functab(OSPF_OPAQUE_AS_LSA,
  ------------------
  |  |   34|      1|#define OSPF_OPAQUE_AS_LSA	     11
  ------------------
  134|      1|					  OPAQUE_TYPE_INTER_AS_LSA, NULL,
  ------------------
  |  |   47|      1|#define OPAQUE_TYPE_INTER_AS_LSA                       6
  ------------------
  135|      1|					  NULL, NULL, NULL, NULL, NULL, NULL,
  136|      1|					  ospf_mpls_te_show_info,
  137|      1|					  ospf_mpls_te_lsa_inter_as_as,
  138|      1|					  ospf_mpls_te_lsa_refresh, NULL, NULL);
  139|      1|	if (rc != 0) {
  ------------------
  |  Branch (139:6): [True: 0, False: 1]
  ------------------
  140|      0|		flog_warn(
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
  141|      0|			EC_OSPF_OPAQUE_REGISTRATION,
  142|      0|			"MPLS-TE (%s): Failed to register Inter-AS with AS scope",
  143|      0|			__func__);
  144|      0|		return rc;
  145|      0|	}
  146|       |
  147|      1|	memset(&OspfMplsTE, 0, sizeof(OspfMplsTE));
  148|      1|	OspfMplsTE.enabled = false;
  149|      1|	OspfMplsTE.export = false;
  150|      1|	OspfMplsTE.inter_as = Off;
  151|      1|	OspfMplsTE.iflist = list_new();
  152|      1|	OspfMplsTE.iflist->del = del_mpls_te_link;
  153|       |
  154|      1|	ospf_mpls_te_register_vty();
  155|       |
  156|      1|	return rc;
  157|      1|}
ospf_te.c:ospf_mpls_te_new_if:
  806|      1|{
  807|      1|	struct mpls_te_link *new;
  808|       |
  809|      1|	ote_debug("MPLS-TE (%s): Add new %s interface %s to MPLS-TE list",
  ------------------
  |  |   81|      1|	do {                                                                   \
  |  |   82|      1|		if (IS_DEBUG_OSPF_TE)                                          \
  |  |  ------------------
  |  |  |  |   96|      1|#define IS_DEBUG_OSPF_TE  IS_DEBUG_OSPF(te, TE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   91|      1|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|      1|#define OSPF_DEBUG_TE          0x04
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (91:29): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      1|			zlog_debug(__VA_ARGS__);                               \
  |  |  ------------------
  |  |  |  |  134|      0|#define zlog_debug(...) 0
  |  |  ------------------
  |  |   84|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (84:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  810|      1|		  __func__, ifp->link_params ? "Active" : "Inactive",
  811|      1|		  ifp->name);
  812|       |
  813|      1|	if (lookup_linkparams_by_ifp(ifp) != NULL)
  ------------------
  |  Branch (813:6): [True: 0, False: 1]
  ------------------
  814|      0|		return 0;
  815|       |
  816|      1|	new = XCALLOC(MTYPE_OSPF_MPLS_TE, sizeof(struct mpls_te_link));
  ------------------
  |  |  165|      1|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  817|       |
  818|      1|	new->instance = get_mpls_te_instance_value();
  819|      1|	new->ifp = ifp;
  820|       |	/* By default TE-Link is RFC3630 compatible flooding in Area and not
  821|       |	 * active */
  822|       |	/* This default behavior will be adapted with call to
  823|       |	 * ospf_mpls_te_update_if() */
  824|      1|	new->type = STD_TE;
  ------------------
  |  |   58|      1|#define STD_TE  	0x01
  ------------------
  825|      1|	new->flags = LPFLG_LSA_INACTIVE;
  ------------------
  |  |   70|      1|#define LPFLG_LSA_INACTIVE		0x00
  ------------------
  826|       |
  827|       |	/* Initialize Link Parameters from Interface */
  828|      1|	initialize_linkparams(new);
  829|       |
  830|       |	/* Set TE Parameters from Interface */
  831|      1|	update_linkparams(new);
  832|       |
  833|       |	/* Add Link Parameters structure to the list */
  834|      1|	listnode_add(OspfMplsTE.iflist, new);
  835|       |
  836|      1|	ote_debug("MPLS-TE (%s): Add new LP context for %s[%d/%d]", __func__,
  ------------------
  |  |   81|      1|	do {                                                                   \
  |  |   82|      1|		if (IS_DEBUG_OSPF_TE)                                          \
  |  |  ------------------
  |  |  |  |   96|      1|#define IS_DEBUG_OSPF_TE  IS_DEBUG_OSPF(te, TE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   91|      1|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|      1|#define OSPF_DEBUG_TE          0x04
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (91:29): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      1|			zlog_debug(__VA_ARGS__);                               \
  |  |  ------------------
  |  |  |  |  134|      0|#define zlog_debug(...) 0
  |  |  ------------------
  |  |   84|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (84:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  837|      1|		  ifp->name, new->flags, new->type);
  838|       |
  839|       |	/* Schedule Opaque-LSA refresh. */ /* XXX */
  840|      1|	return 0;
  841|      1|}
ospf_te.c:get_mpls_te_instance_value:
  194|      1|{
  195|      1|	static uint32_t seqno = 0;
  196|       |
  197|      1|	if (seqno < MAX_LEGAL_TE_INSTANCE_NUM)
  ------------------
  |  |   35|      1|#define	MAX_LEGAL_TE_INSTANCE_NUM (0xffff)
  ------------------
  |  Branch (197:6): [True: 1, False: 0]
  ------------------
  198|      1|		seqno += 1;
  199|      0|	else
  200|      0|		seqno = 1; /* Avoid zero. */
  201|       |
  202|      1|	return seqno;
  203|      1|}
ospf_te.c:initialize_linkparams:
  728|      1|{
  729|      1|	struct interface *ifp = lp->ifp;
  730|      1|	struct ospf_interface *oi = NULL;
  731|      1|	struct route_node *rn;
  732|       |
  733|      1|	ote_debug("MPLS-TE (%s): Initialize Link Parameters for interface %s",
  ------------------
  |  |   81|      1|	do {                                                                   \
  |  |   82|      1|		if (IS_DEBUG_OSPF_TE)                                          \
  |  |  ------------------
  |  |  |  |   96|      1|#define IS_DEBUG_OSPF_TE  IS_DEBUG_OSPF(te, TE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   91|      1|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|      1|#define OSPF_DEBUG_TE          0x04
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (91:29): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      1|			zlog_debug(__VA_ARGS__);                               \
  |  |  ------------------
  |  |  |  |  134|      0|#define zlog_debug(...) 0
  |  |  ------------------
  |  |   84|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (84:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  734|      1|		  __func__, ifp->name);
  735|       |
  736|       |	/* Search OSPF Interface parameters for this interface */
  737|      1|	for (rn = route_top(IF_OIFS(ifp)); rn; rn = route_next(rn)) {
  ------------------
  |  |   18|      1|#define IF_OIFS(I)  (IF_OSPF_IF_INFO (I)->oifs)
  |  |  ------------------
  |  |  |  |   16|      1|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  ------------------
  ------------------
  |  Branch (737:37): [True: 0, False: 1]
  ------------------
  738|       |
  739|      0|		if ((oi = rn->info) == NULL)
  ------------------
  |  Branch (739:7): [True: 0, False: 0]
  ------------------
  740|      0|			continue;
  741|       |
  742|      0|		if (oi->ifp == ifp)
  ------------------
  |  Branch (742:7): [True: 0, False: 0]
  ------------------
  743|      0|			break;
  744|      0|	}
  745|       |
  746|      1|	if ((oi == NULL) || (oi->ifp != ifp)) {
  ------------------
  |  Branch (746:6): [True: 1, False: 0]
  |  Branch (746:22): [True: 0, False: 0]
  ------------------
  747|      1|		ote_debug(
  ------------------
  |  |   81|      1|	do {                                                                   \
  |  |   82|      1|		if (IS_DEBUG_OSPF_TE)                                          \
  |  |  ------------------
  |  |  |  |   96|      1|#define IS_DEBUG_OSPF_TE  IS_DEBUG_OSPF(te, TE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   91|      1|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|      1|#define OSPF_DEBUG_TE          0x04
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (91:29): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      1|			zlog_debug(__VA_ARGS__);                               \
  |  |  ------------------
  |  |  |  |  134|      0|#define zlog_debug(...) 0
  |  |  ------------------
  |  |   84|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (84:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  748|      1|			"MPLS-TE (%s): Could not find corresponding OSPF Interface for %s",
  749|      1|			__func__, ifp->name);
  750|      1|		return;
  751|      1|	}
  752|       |
  753|       |	/*
  754|       |	 * Try to set initial values those can be derived from
  755|       |	 * zebra-interface information.
  756|       |	 */
  757|      0|	set_linkparams_link_type(oi, lp);
  758|       |
  759|       |	/* Set local IP addr */
  760|      0|	set_linkparams_lclif_ipaddr(lp, oi->address->u.prefix4);
  761|       |
  762|       |	/* Set Remote IP addr if Point to Point Interface */
  763|      0|	if (oi->type == OSPF_IFTYPE_POINTOPOINT) {
  ------------------
  |  |   44|      0|#define OSPF_IFTYPE_POINTOPOINT		1
  ------------------
  |  Branch (763:6): [True: 0, False: 0]
  ------------------
  764|      0|		struct prefix *pref = CONNECTED_PREFIX(oi->connected);
  ------------------
  |  |  456|      0|	(CONNECTED_PEER(C) ? (C)->destination : (C)->address)
  |  |  ------------------
  |  |  |  |  452|      0|#define CONNECTED_PEER(C) CHECK_FLAG((C)->flags, ZEBRA_IFA_PEER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  394|      0|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (394:30): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  765|      0|		if (pref != NULL)
  ------------------
  |  Branch (765:7): [True: 0, False: 0]
  ------------------
  766|      0|			set_linkparams_rmtif_ipaddr(lp, pref->u.prefix4);
  767|      0|	}
  768|       |
  769|       |	/* Keep Area information in combination with link parameters. */
  770|      0|	lp->area = oi->area;
  771|       |
  772|      0|	return;
  773|      1|}
ospf_te.c:lookup_linkparams_by_ifp:
  206|      1|{
  207|      1|	struct listnode *node, *nnode;
  208|      1|	struct mpls_te_link *lp;
  209|       |
  210|      1|	for (ALL_LIST_ELEMENTS(OspfMplsTE.iflist, node, nnode, lp))
  ------------------
  |  |  320|      1|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|      1|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  321|      1|	(node) != NULL                                                         \
  |  |  ------------------
  |  |  |  Branch (321:2): [True: 0, False: 1]
  |  |  ------------------
  |  |  322|      1|		&& ((data) = static_cast(data, listgetdata(node)),             \
  |  |  ------------------
  |  |  |  |  204|      0|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  323|      0|		    (nextnode) = node->next, 1);                               \
  |  |  324|      1|	(node) = (nextnode), ((data) = NULL)
  ------------------
  211|      0|		if (lp->ifp == ifp)
  ------------------
  |  Branch (211:7): [True: 0, False: 0]
  ------------------
  212|      0|			return lp;
  213|       |
  214|      1|	return NULL;
  215|      1|}
ospf_te.c:update_linkparams:
  602|      1|{
  603|      1|	int i;
  604|      1|	struct interface *ifp;
  605|       |
  606|       |	/* Get the Interface structure */
  607|      1|	if ((ifp = lp->ifp) == NULL) {
  ------------------
  |  Branch (607:6): [True: 0, False: 1]
  ------------------
  608|      0|		ote_debug(
  ------------------
  |  |   81|      0|	do {                                                                   \
  |  |   82|      0|		if (IS_DEBUG_OSPF_TE)                                          \
  |  |  ------------------
  |  |  |  |   96|      0|#define IS_DEBUG_OSPF_TE  IS_DEBUG_OSPF(te, TE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|      0|#define OSPF_DEBUG_TE          0x04
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|			zlog_debug(__VA_ARGS__);                               \
  |  |  ------------------
  |  |  |  |  134|      0|#define zlog_debug(...) 0
  |  |  ------------------
  |  |   84|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (84:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  609|      0|			"MPLS-TE (%s): Abort update TE parameters: no interface associated to Link Parameters",
  610|      0|			__func__);
  611|      0|		return;
  612|      0|	}
  613|      1|	if (!HAS_LINK_PARAMS(ifp)) {
  ------------------
  |  |  207|      1|#define HAS_LINK_PARAMS(ifp)  ((ifp)->link_params != NULL)
  ------------------
  |  Branch (613:6): [True: 1, False: 0]
  ------------------
  614|      1|		ote_debug(
  ------------------
  |  |   81|      1|	do {                                                                   \
  |  |   82|      1|		if (IS_DEBUG_OSPF_TE)                                          \
  |  |  ------------------
  |  |  |  |   96|      1|#define IS_DEBUG_OSPF_TE  IS_DEBUG_OSPF(te, TE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   91|      1|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|      1|#define OSPF_DEBUG_TE          0x04
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (91:29): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      1|			zlog_debug(__VA_ARGS__);                               \
  |  |  ------------------
  |  |  |  |  134|      0|#define zlog_debug(...) 0
  |  |  ------------------
  |  |   84|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (84:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  615|      1|			"MPLS-TE (%s): Abort update TE parameters: no Link Parameters for interface",
  616|      1|			__func__);
  617|      1|		return;
  618|      1|	}
  619|       |
  620|       |	/* RFC3630 metrics */
  621|      0|	if (IS_PARAM_SET(ifp->link_params, LP_ADM_GRP))
  ------------------
  |  |  173|      0|#define IS_PARAM_SET(lp, st) (lp->lp_status & st)
  |  |  ------------------
  |  |  |  Branch (173:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  622|      0|		set_linkparams_rsc_clsclr(lp, ifp->link_params->admin_grp);
  623|      0|	else
  624|      0|		TLV_TYPE(lp->rsc_clsclr) = 0;
  ------------------
  |  |   98|      0|#define TLV_TYPE(tlvh)	tlvh.header.type
  ------------------
  625|       |
  626|      0|	if (IS_PARAM_SET(ifp->link_params, LP_MAX_BW))
  ------------------
  |  |  173|      0|#define IS_PARAM_SET(lp, st) (lp->lp_status & st)
  |  |  ------------------
  |  |  |  Branch (173:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  627|      0|		set_linkparams_max_bw(lp, ifp->link_params->max_bw);
  628|      0|	else
  629|      0|		TLV_TYPE(lp->max_bw) = 0;
  ------------------
  |  |   98|      0|#define TLV_TYPE(tlvh)	tlvh.header.type
  ------------------
  630|       |
  631|      0|	if (IS_PARAM_SET(ifp->link_params, LP_MAX_RSV_BW))
  ------------------
  |  |  173|      0|#define IS_PARAM_SET(lp, st) (lp->lp_status & st)
  |  |  ------------------
  |  |  |  Branch (173:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  632|      0|		set_linkparams_max_rsv_bw(lp, ifp->link_params->max_rsv_bw);
  633|      0|	else
  634|      0|		TLV_TYPE(lp->max_rsv_bw) = 0;
  ------------------
  |  |   98|      0|#define TLV_TYPE(tlvh)	tlvh.header.type
  ------------------
  635|       |
  636|      0|	if (IS_PARAM_SET(ifp->link_params, LP_UNRSV_BW))
  ------------------
  |  |  173|      0|#define IS_PARAM_SET(lp, st) (lp->lp_status & st)
  |  |  ------------------
  |  |  |  Branch (173:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  637|      0|		for (i = 0; i < MAX_CLASS_TYPE; i++)
  ------------------
  |  |  139|      0|#define MAX_CLASS_TYPE          8
  ------------------
  |  Branch (637:15): [True: 0, False: 0]
  ------------------
  638|      0|			set_linkparams_unrsv_bw(lp, i,
  639|      0|						ifp->link_params->unrsv_bw[i]);
  640|      0|	else
  641|      0|		TLV_TYPE(lp->unrsv_bw) = 0;
  ------------------
  |  |   98|      0|#define TLV_TYPE(tlvh)	tlvh.header.type
  ------------------
  642|       |
  643|      0|	if (IS_PARAM_SET(ifp->link_params, LP_TE_METRIC))
  ------------------
  |  |  173|      0|#define IS_PARAM_SET(lp, st) (lp->lp_status & st)
  |  |  ------------------
  |  |  |  Branch (173:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  644|      0|		set_linkparams_te_metric(lp, ifp->link_params->te_metric);
  645|      0|	else
  646|      0|		TLV_TYPE(lp->te_metric) = 0;
  ------------------
  |  |   98|      0|#define TLV_TYPE(tlvh)	tlvh.header.type
  ------------------
  647|       |
  648|       |	/* TE metric Extensions */
  649|      0|	if (IS_PARAM_SET(ifp->link_params, LP_DELAY))
  ------------------
  |  |  173|      0|#define IS_PARAM_SET(lp, st) (lp->lp_status & st)
  |  |  ------------------
  |  |  |  Branch (173:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  650|      0|		set_linkparams_av_delay(lp, ifp->link_params->av_delay, 0);
  651|      0|	else
  652|      0|		TLV_TYPE(lp->av_delay) = 0;
  ------------------
  |  |   98|      0|#define TLV_TYPE(tlvh)	tlvh.header.type
  ------------------
  653|       |
  654|      0|	if (IS_PARAM_SET(ifp->link_params, LP_MM_DELAY))
  ------------------
  |  |  173|      0|#define IS_PARAM_SET(lp, st) (lp->lp_status & st)
  |  |  ------------------
  |  |  |  Branch (173:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  655|      0|		set_linkparams_mm_delay(lp, ifp->link_params->min_delay,
  656|      0|					ifp->link_params->max_delay, 0);
  657|      0|	else
  658|      0|		TLV_TYPE(lp->mm_delay) = 0;
  ------------------
  |  |   98|      0|#define TLV_TYPE(tlvh)	tlvh.header.type
  ------------------
  659|       |
  660|      0|	if (IS_PARAM_SET(ifp->link_params, LP_DELAY_VAR))
  ------------------
  |  |  173|      0|#define IS_PARAM_SET(lp, st) (lp->lp_status & st)
  |  |  ------------------
  |  |  |  Branch (173:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  661|      0|		set_linkparams_delay_var(lp, ifp->link_params->delay_var);
  662|      0|	else
  663|      0|		TLV_TYPE(lp->delay_var) = 0;
  ------------------
  |  |   98|      0|#define TLV_TYPE(tlvh)	tlvh.header.type
  ------------------
  664|       |
  665|      0|	if (IS_PARAM_SET(ifp->link_params, LP_PKT_LOSS))
  ------------------
  |  |  173|      0|#define IS_PARAM_SET(lp, st) (lp->lp_status & st)
  |  |  ------------------
  |  |  |  Branch (173:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  666|      0|		set_linkparams_pkt_loss(lp, ifp->link_params->pkt_loss, 0);
  667|      0|	else
  668|      0|		TLV_TYPE(lp->pkt_loss) = 0;
  ------------------
  |  |   98|      0|#define TLV_TYPE(tlvh)	tlvh.header.type
  ------------------
  669|       |
  670|      0|	if (IS_PARAM_SET(ifp->link_params, LP_RES_BW))
  ------------------
  |  |  173|      0|#define IS_PARAM_SET(lp, st) (lp->lp_status & st)
  |  |  ------------------
  |  |  |  Branch (173:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  671|      0|		set_linkparams_res_bw(lp, ifp->link_params->res_bw);
  672|      0|	else
  673|      0|		TLV_TYPE(lp->res_bw) = 0;
  ------------------
  |  |   98|      0|#define TLV_TYPE(tlvh)	tlvh.header.type
  ------------------
  674|       |
  675|      0|	if (IS_PARAM_SET(ifp->link_params, LP_AVA_BW))
  ------------------
  |  |  173|      0|#define IS_PARAM_SET(lp, st) (lp->lp_status & st)
  |  |  ------------------
  |  |  |  Branch (173:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  676|      0|		set_linkparams_ava_bw(lp, ifp->link_params->ava_bw);
  677|      0|	else
  678|      0|		TLV_TYPE(lp->ava_bw) = 0;
  ------------------
  |  |   98|      0|#define TLV_TYPE(tlvh)	tlvh.header.type
  ------------------
  679|       |
  680|      0|	if (IS_PARAM_SET(ifp->link_params, LP_USE_BW))
  ------------------
  |  |  173|      0|#define IS_PARAM_SET(lp, st) (lp->lp_status & st)
  |  |  ------------------
  |  |  |  Branch (173:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  681|      0|		set_linkparams_use_bw(lp, ifp->link_params->use_bw);
  682|      0|	else
  683|      0|		TLV_TYPE(lp->use_bw) = 0;
  ------------------
  |  |   98|      0|#define TLV_TYPE(tlvh)	tlvh.header.type
  ------------------
  684|       |
  685|       |	/* RFC5392 */
  686|      0|	if (IS_PARAM_SET(ifp->link_params, LP_RMT_AS)) {
  ------------------
  |  |  173|      0|#define IS_PARAM_SET(lp, st) (lp->lp_status & st)
  |  |  ------------------
  |  |  |  Branch (173:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  687|       |		/* Flush LSA if it engaged and was previously a STD_TE one */
  688|      0|		if (IS_STD_TE(lp->type)
  ------------------
  |  |   64|      0|#define IS_STD_TE(x)		(x & STD_TE)
  |  |  ------------------
  |  |  |  |   58|      0|#define STD_TE  	0x01
  |  |  ------------------
  |  |  |  Branch (64:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  689|      0|		    && CHECK_FLAG(lp->flags, LPFLG_LSA_ENGAGED)) {
  ------------------
  |  |  394|      0|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  690|      0|			ote_debug(
  ------------------
  |  |   81|      0|	do {                                                                   \
  |  |   82|      0|		if (IS_DEBUG_OSPF_TE)                                          \
  |  |  ------------------
  |  |  |  |   96|      0|#define IS_DEBUG_OSPF_TE  IS_DEBUG_OSPF(te, TE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|      0|#define OSPF_DEBUG_TE          0x04
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|			zlog_debug(__VA_ARGS__);                               \
  |  |  ------------------
  |  |  |  |  134|      0|#define zlog_debug(...) 0
  |  |  ------------------
  |  |   84|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (84:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  691|      0|				"MPLS-TE (%s): Update IF: Switch from Standard LSA to INTER-AS for %s[%d/%d]",
  692|      0|				__func__, ifp->name, lp->flags, lp->type);
  693|       |
  694|      0|			ospf_mpls_te_lsa_schedule(lp, FLUSH_THIS_LSA);
  695|       |			/* Then, switch it to INTER-AS */
  696|      0|			if (OspfMplsTE.inter_as == AS) {
  ------------------
  |  Branch (696:8): [True: 0, False: 0]
  ------------------
  697|      0|				lp->type = INTER_AS;
  ------------------
  |  |   60|      0|#define INTER_AS	0x04
  ------------------
  698|      0|				SET_FLAG(lp->flags, LPFLG_LSA_FLOOD_AS);
  ------------------
  |  |  395|      0|#define SET_FLAG(V,F)        (V) |= (F)
  ------------------
  699|      0|			} else {
  700|      0|				lp->type = INTER_AS;
  ------------------
  |  |   60|      0|#define INTER_AS	0x04
  ------------------
  701|      0|				UNSET_FLAG(lp->flags, LPFLG_LSA_FLOOD_AS);
  ------------------
  |  |  396|      0|#define UNSET_FLAG(V,F)      (V) &= ~(F)
  ------------------
  702|      0|				lp->area = ospf_area_lookup_by_area_id(
  703|      0|					ospf_lookup_by_vrf_id(VRF_DEFAULT),
  ------------------
  |  |  254|      0|#define VRF_DEFAULT 0
  ------------------
  704|      0|					OspfMplsTE.interas_areaid);
  705|      0|			}
  706|      0|		}
  707|      0|		set_linkparams_inter_as(lp, ifp->link_params->rmt_ip,
  708|      0|					ifp->link_params->rmt_as);
  709|      0|	} else {
  710|      0|		ote_debug(
  ------------------
  |  |   81|      0|	do {                                                                   \
  |  |   82|      0|		if (IS_DEBUG_OSPF_TE)                                          \
  |  |  ------------------
  |  |  |  |   96|      0|#define IS_DEBUG_OSPF_TE  IS_DEBUG_OSPF(te, TE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|      0|#define OSPF_DEBUG_TE          0x04
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|			zlog_debug(__VA_ARGS__);                               \
  |  |  ------------------
  |  |  |  |  134|      0|#define zlog_debug(...) 0
  |  |  ------------------
  |  |   84|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (84:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  711|      0|			"MPLS-TE (%s): Update IF: Switch from INTER-AS LSA to Standard for %s[%d/%d]",
  712|      0|			__func__, ifp->name, lp->flags, lp->type);
  713|       |
  714|       |		/* reset inter-as TE params */
  715|       |		/* Flush LSA if it engaged and was previously an INTER_AS one */
  716|      0|		if (IS_INTER_AS(lp->type)
  ------------------
  |  |   66|      0|#define IS_INTER_AS(x) 		(x & INTER_AS)
  |  |  ------------------
  |  |  |  |   60|      0|#define INTER_AS	0x04
  |  |  ------------------
  |  |  |  Branch (66:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  717|      0|		    && CHECK_FLAG(lp->flags, LPFLG_LSA_ENGAGED)) {
  ------------------
  |  |  394|      0|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  718|      0|			ospf_mpls_te_lsa_schedule(lp, FLUSH_THIS_LSA);
  719|       |			/* Then, switch it to Standard TE */
  720|      0|			lp->flags = STD_TE;
  ------------------
  |  |   58|      0|#define STD_TE  	0x01
  ------------------
  721|      0|			UNSET_FLAG(lp->flags, LPFLG_LSA_FLOOD_AS);
  ------------------
  |  |  396|      0|#define UNSET_FLAG(V,F)      (V) &= ~(F)
  ------------------
  722|      0|		}
  723|      0|		unset_linkparams_inter_as(lp);
  724|      0|	}
  725|      0|}
ospf_te.c:ospf_mpls_te_lsa_update:
 2980|    818|{
 2981|       |
 2982|    818|	uint8_t rc;
 2983|       |
 2984|       |	/* Check that MPLS-TE is active */
 2985|    818|	if (!OspfMplsTE.enabled || !OspfMplsTE.ted)
  ------------------
  |  Branch (2985:6): [True: 818, False: 0]
  |  Branch (2985:29): [True: 0, False: 0]
  ------------------
 2986|    818|		return 0;
 2987|       |
 2988|       |	/* Sanity Check */
 2989|      0|	if (lsa == NULL) {
  ------------------
  |  Branch (2989:6): [True: 0, False: 0]
  ------------------
 2990|      0|		flog_warn(EC_OSPF_LSA_NULL, "TE (%s): Abort! LSA is NULL",
  ------------------
  |  |  137|      0|#define flog_warn(ferr_id, format, ...) 0
  ------------------
 2991|      0|			  __func__);
 2992|      0|		return -1;
 2993|      0|	}
 2994|       |
 2995|       |	/* If LSA is MAX_AGE, remove corresponding Link State element */
 2996|      0|	if (IS_LSA_MAXAGE(lsa)) {
  ------------------
  |  |  211|      0|#define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |  209|      0|#define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|      0|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |               #define LS_AGE(x) (OSPF_LSA_MAXAGE < get_age(x) ? OSPF_LSA_MAXAGE : get_age(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|      0|#define OSPF_LSA_MAXAGE                       3600
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (209:20): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define IS_LSA_MAXAGE(L)        (LS_AGE ((L)) == OSPF_LSA_MAXAGE)
  |  |  ------------------
  |  |  |  |   33|      0|#define OSPF_LSA_MAXAGE                       3600
  |  |  ------------------
  |  |  |  Branch (211:33): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2997|      0|		switch (lsa->data->type) {
 2998|      0|		case OSPF_ROUTER_LSA:
  ------------------
  |  |   24|      0|#define OSPF_ROUTER_LSA               1
  ------------------
  |  Branch (2998:3): [True: 0, False: 0]
  ------------------
 2999|      0|			rc = ospf_te_delete_router_lsa(OspfMplsTE.ted, lsa);
 3000|      0|			break;
 3001|      0|		case OSPF_OPAQUE_AREA_LSA:
  ------------------
  |  |   33|      0|#define OSPF_OPAQUE_AREA_LSA	     10
  ------------------
  |  Branch (3001:3): [True: 0, False: 0]
  ------------------
 3002|      0|		case OSPF_OPAQUE_AS_LSA:
  ------------------
  |  |   34|      0|#define OSPF_OPAQUE_AS_LSA	     11
  ------------------
  |  Branch (3002:3): [True: 0, False: 0]
  ------------------
 3003|      0|			rc = ospf_te_delete_opaque_lsa(OspfMplsTE.ted, lsa);
 3004|      0|			break;
 3005|      0|		default:
  ------------------
  |  Branch (3005:3): [True: 0, False: 0]
  ------------------
 3006|      0|			rc = 0;
 3007|      0|			break;
 3008|      0|		}
 3009|      0|	} else {
 3010|       |		/* Parse LSA to Update corresponding Link State element */
 3011|      0|		switch (lsa->data->type) {
 3012|      0|		case OSPF_ROUTER_LSA:
  ------------------
  |  |   24|      0|#define OSPF_ROUTER_LSA               1
  ------------------
  |  Branch (3012:3): [True: 0, False: 0]
  ------------------
 3013|      0|			rc = ospf_te_parse_router_lsa(OspfMplsTE.ted, lsa);
 3014|      0|			break;
 3015|      0|		case OSPF_OPAQUE_AREA_LSA:
  ------------------
  |  |   33|      0|#define OSPF_OPAQUE_AREA_LSA	     10
  ------------------
  |  Branch (3015:3): [True: 0, False: 0]
  ------------------
 3016|      0|		case OSPF_OPAQUE_AS_LSA:
  ------------------
  |  |   34|      0|#define OSPF_OPAQUE_AS_LSA	     11
  ------------------
  |  Branch (3016:3): [True: 0, False: 0]
  ------------------
 3017|      0|			rc = ospf_te_parse_opaque_lsa(OspfMplsTE.ted, lsa);
 3018|      0|			break;
 3019|      0|		default:
  ------------------
  |  Branch (3019:3): [True: 0, False: 0]
  ------------------
 3020|      0|			rc = 0;
 3021|      0|			break;
 3022|      0|		}
 3023|      0|	}
 3024|       |
 3025|      0|	return rc;
 3026|      0|}
ospf_te.c:ospf_mpls_te_register_vty:
 4408|      1|{
 4409|      1|	install_element(VIEW_NODE, &show_ip_ospf_mpls_te_router_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4410|      1|	install_element(VIEW_NODE, &show_ip_ospf_mpls_te_link_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4411|      1|	install_element(VIEW_NODE, &show_ip_ospf_mpls_te_db_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4412|       |
 4413|      1|	install_element(OSPF_NODE, &ospf_mpls_te_on_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4414|      1|	install_element(OSPF_NODE, &no_ospf_mpls_te_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4415|      1|	install_element(OSPF_NODE, &ospf_mpls_te_router_addr_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4416|      1|	install_element(OSPF_NODE, &ospf_mpls_te_inter_as_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4417|      1|	install_element(OSPF_NODE, &ospf_mpls_te_inter_as_area_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4418|      1|	install_element(OSPF_NODE, &no_ospf_mpls_te_inter_as_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4419|      1|	install_element(OSPF_NODE, &ospf_mpls_te_export_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4420|      1|	install_element(OSPF_NODE, &no_ospf_mpls_te_export_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4421|       |
 4422|      1|	return;
 4423|      1|}

ospf_zebra_vrf_register:
 1995|      1|{
 1996|      1|	if (!zclient || zclient->sock < 0 || !ospf)
  ------------------
  |  Branch (1996:6): [True: 0, False: 1]
  |  Branch (1996:18): [True: 1, False: 0]
  |  Branch (1996:39): [True: 0, False: 0]
  ------------------
 1997|      1|		return;
 1998|       |
 1999|      0|	if (ospf->vrf_id != VRF_UNKNOWN) {
  ------------------
  |  |   21|      0|#define VRF_UNKNOWN UINT32_MAX
  ------------------
  |  Branch (1999:6): [True: 0, False: 0]
  ------------------
 2000|      0|		if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|      0|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|      0|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2001|      0|			zlog_debug("%s: Register VRF %s id %u", __func__,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 2002|      0|				   ospf_vrf_id_to_name(ospf->vrf_id),
 2003|      0|				   ospf->vrf_id);
 2004|      0|		zclient_send_reg_requests(zclient, ospf->vrf_id);
 2005|      0|	}
 2006|      0|}
ospf_zebra_init:
 2218|      1|{
 2219|       |	/* Allocate zebra structure. */
 2220|      1|	zclient = zclient_new(master, &zclient_options_default, ospf_handlers,
 2221|      1|			      array_size(ospf_handlers));
  ------------------
  |  |  311|      1|#define array_size(ar) (sizeof(ar) / sizeof(ar[0]))
  ------------------
 2222|      1|	zclient_init(zclient, ZEBRA_ROUTE_OSPF, instance, &ospfd_privs);
  ------------------
  |  |   14|      1|#define ZEBRA_ROUTE_OSPF                 6
  ------------------
 2223|      1|	zclient->zebra_connected = ospf_zebra_connected;
 2224|       |
 2225|       |	/* Initialize special zclient for synchronous message exchanges. */
 2226|      1|	struct zclient_options options = zclient_options_default;
 2227|      1|	options.synchronous = true;
 2228|      1|	zclient_sync = zclient_new(master, &options, NULL, 0);
 2229|      1|	zclient_sync->sock = -1;
 2230|      1|	zclient_sync->redist_default = ZEBRA_ROUTE_OSPF;
  ------------------
  |  |   14|      1|#define ZEBRA_ROUTE_OSPF                 6
  ------------------
 2231|      1|	zclient_sync->instance = instance;
 2232|       |	/*
 2233|       |	 * session_id must be different from default value (0) to distinguish
 2234|       |	 * the asynchronous socket from the synchronous one
 2235|       |	 */
 2236|      1|	zclient_sync->session_id = 1;
 2237|      1|	zclient_sync->privs = &ospfd_privs;
 2238|       |
 2239|      1|	access_list_add_hook(ospf_filter_update);
 2240|      1|	access_list_delete_hook(ospf_filter_update);
 2241|      1|	prefix_list_add_hook(ospf_prefix_list_update);
 2242|      1|	prefix_list_delete_hook(ospf_prefix_list_update);
 2243|      1|}

ospf_process_refresh_data:
  123|      1|{
  124|      1|	struct vrf *vrf = vrf_lookup_by_id(ospf->vrf_id);
  125|      1|	struct in_addr router_id, router_id_old;
  126|      1|	struct ospf_interface *oi;
  127|      1|	struct interface *ifp;
  128|      1|	struct listnode *node, *nnode;
  129|      1|	struct ospf_area *area;
  130|      1|	bool rid_change = false;
  131|       |
  132|      1|	if (!ospf->oi_running) {
  ------------------
  |  Branch (132:6): [True: 0, False: 1]
  ------------------
  133|      0|		if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|      0|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|      0|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  134|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  135|      0|				"Router ospf not configured -- Router-ID update postponed");
  136|      0|		return;
  137|      0|	}
  138|       |
  139|      1|	if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|      1|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|      1|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|      1|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  140|      0|		zlog_debug("Router-ID[OLD:%pI4]: Update",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  141|      1|			   &ospf->router_id);
  142|       |
  143|      1|	router_id_old = ospf->router_id;
  144|       |
  145|       |	/* Select the router ID based on these priorities:
  146|       |	     1. Statically assigned router ID is always the first choice.
  147|       |	     2. If there is no statically assigned router ID, then try to stick
  148|       |		with the most recent value, since changing router ID's is very
  149|       |		disruptive.
  150|       |	     3. Last choice: just go with whatever the zebra daemon recommends.
  151|       |	*/
  152|      1|	if (ospf->router_id_static.s_addr != INADDR_ANY)
  ------------------
  |  Branch (152:6): [True: 0, False: 1]
  ------------------
  153|      0|		router_id = ospf->router_id_static;
  154|      1|	else if (ospf->router_id.s_addr != INADDR_ANY)
  ------------------
  |  Branch (154:11): [True: 0, False: 1]
  ------------------
  155|      0|		router_id = ospf->router_id;
  156|      1|	else
  157|      1|		router_id = ospf->router_id_zebra;
  158|       |
  159|      1|	if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|      1|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|      1|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|      1|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  160|      0|		zlog_debug("Router-ID[OLD:%pI4]: Update to %pI4",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  161|      1|			   &ospf->router_id, &router_id);
  162|       |
  163|      1|	rid_change = !(IPV4_ADDR_SAME(&router_id_old, &router_id));
  ------------------
  |  |  342|      1|#define IPV4_ADDR_SAME(A,B)  ipv4_addr_same((A), (B))
  ------------------
  164|      1|	if (rid_change || (reset)) {
  ------------------
  |  Branch (164:6): [True: 0, False: 1]
  |  Branch (164:20): [True: 0, False: 1]
  ------------------
  165|      0|		for (ALL_LIST_ELEMENTS_RO(ospf->oiflist, node, oi)) {
  ------------------
  |  |  333|      0|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|      0|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|      0|	(node) != NULL && ((data) = static_cast(data, listgetdata(node)), 1);  \
  |  |  ------------------
  |  |  |  |  204|      0|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (334:2): [True: 0, False: 0]
  |  |  |  Branch (334:20): [True: 0, False: 0]
  |  |  ------------------
  |  |  335|      0|	(node) = listnextnode(node), ((data) = NULL)
  |  |  ------------------
  |  |  |  |   49|      0|#define listnextnode(X) ((X) ? ((X)->next) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  166|       |			/* Some nbrs are identified by router_id, these needs
  167|       |			 * to be rebuilt. Possible optimization would be to do
  168|       |			 * oi->nbr_self->router_id = router_id for
  169|       |			 * !(virtual | ptop) links
  170|       |			 */
  171|      0|			ospf_nbr_self_reset(oi, router_id);
  172|       |
  173|       |			/*
  174|       |			 * If the old router id was not set, but now it
  175|       |			 * is and the interface is operative and the
  176|       |			 * state is ISM_Down we should kick the state
  177|       |			 * machine as that we processed the interfaces
  178|       |			 * based upon the network statement( or intf config )
  179|       |			 * but could not start it at that time.
  180|       |			 */
  181|      0|			if (if_is_operative(oi->ifp) && oi->state == ISM_Down
  ------------------
  |  |   15|      0|#define ISM_Down                          1
  ------------------
  |  Branch (181:8): [True: 0, False: 0]
  |  Branch (181:36): [True: 0, False: 0]
  ------------------
  182|      0|			    && router_id_old.s_addr == INADDR_ANY)
  ------------------
  |  Branch (182:11): [True: 0, False: 0]
  ------------------
  183|      0|				ospf_if_up(oi);
  184|      0|		}
  185|       |
  186|       |		/* Flush (inline) all the self originated LSAs */
  187|      0|		ospf_flush_self_originated_lsas_now(ospf);
  188|       |
  189|      0|		ospf->router_id = router_id;
  190|      0|		if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|      0|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|      0|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  191|      0|			zlog_debug("Router-ID[NEW:%pI4]: Update",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  192|      0|				   &ospf->router_id);
  193|       |
  194|       |		/* Flush (inline) all external LSAs which now match the new
  195|       |		   router-id,
  196|       |		   need to adjust the OSPF_LSA_SELF flag, so the flush doesn't
  197|       |		   hit
  198|       |		   asserts in ospf_refresher_unregister_lsa(). This step is
  199|       |		   needed
  200|       |		   because the current frr code does look-up for
  201|       |		   self-originated LSAs
  202|       |		   based on the self router-id alone but expects OSPF_LSA_SELF
  203|       |		   to be
  204|       |		   properly set */
  205|      0|		if (ospf->lsdb) {
  ------------------
  |  Branch (205:7): [True: 0, False: 0]
  ------------------
  206|      0|			struct route_node *rn;
  207|      0|			struct ospf_lsa *lsa;
  208|       |
  209|      0|			LSDB_LOOP (EXTERNAL_LSDB(ospf), rn, lsa) {
  ------------------
  |  |   29|      0|	if ((T) != NULL)                                                       \
  |  |  ------------------
  |  |  |  Branch (29:6): [True: 0, False: 0]
  |  |  ------------------
  |  |   30|      0|		for ((N) = route_top((T)); ((N)); ((N)) = route_next((N)))     \
  |  |  ------------------
  |  |  |  Branch (30:30): [True: 0, False: 0]
  |  |  ------------------
  |  |   31|      0|			if (((L) = (N)->info))
  |  |  ------------------
  |  |  |  Branch (31:8): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  210|       |				/* AdvRouter and Router ID is the same. */
  211|      0|				if (IPV4_ADDR_SAME(&lsa->data->adv_router,
  ------------------
  |  |  342|      0|#define IPV4_ADDR_SAME(A,B)  ipv4_addr_same((A), (B))
  |  |  ------------------
  |  |  |  Branch (342:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  212|      0|					&ospf->router_id) && rid_change) {
  ------------------
  |  Branch (212:27): [True: 0, False: 0]
  ------------------
  213|      0|					SET_FLAG(lsa->flags,
  ------------------
  |  |  395|      0|#define SET_FLAG(V,F)        (V) |= (F)
  ------------------
  214|      0|						 OSPF_LSA_SELF_CHECKED);
  215|      0|					SET_FLAG(lsa->flags, OSPF_LSA_SELF);
  ------------------
  |  |  395|      0|#define SET_FLAG(V,F)        (V) |= (F)
  ------------------
  216|      0|					ospf_lsa_flush_schedule(ospf, lsa);
  217|      0|				}
  218|       |				/* The above flush will send immediately
  219|       |				 * So discard the LSA to originate new
  220|       |				 */
  221|      0|				ospf_discard_from_db(ospf, ospf->lsdb, lsa);
  222|      0|			}
  223|       |
  224|      0|			LSDB_LOOP (OPAQUE_AS_LSDB(ospf), rn, lsa)
  ------------------
  |  |   29|      0|	if ((T) != NULL)                                                       \
  |  |  ------------------
  |  |  |  Branch (29:6): [True: 0, False: 0]
  |  |  ------------------
  |  |   30|      0|		for ((N) = route_top((T)); ((N)); ((N)) = route_next((N)))     \
  |  |  ------------------
  |  |  |  Branch (30:30): [True: 0, False: 0]
  |  |  ------------------
  |  |   31|      0|			if (((L) = (N)->info))
  |  |  ------------------
  |  |  |  Branch (31:8): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  225|      0|				ospf_discard_from_db(ospf, ospf->lsdb, lsa);
  226|       |
  227|      0|			ospf_lsdb_delete_all(ospf->lsdb);
  228|      0|		}
  229|       |
  230|       |		/* Since the LSAs are deleted, need reset the aggr flag */
  231|      0|		ospf_unset_all_aggr_flag(ospf);
  232|       |
  233|       |		/* Delete the LSDB */
  234|      0|		for (ALL_LIST_ELEMENTS(ospf->areas, node, nnode, area))
  ------------------
  |  |  320|      0|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|      0|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  321|      0|	(node) != NULL                                                         \
  |  |  ------------------
  |  |  |  Branch (321:2): [True: 0, False: 0]
  |  |  ------------------
  |  |  322|      0|		&& ((data) = static_cast(data, listgetdata(node)),             \
  |  |  ------------------
  |  |  |  |  204|      0|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  323|      0|		    (nextnode) = node->next, 1);                               \
  |  |  324|      0|	(node) = (nextnode), ((data) = NULL)
  ------------------
  235|      0|			ospf_area_lsdb_discard_delete(area);
  236|       |
  237|       |		/* update router-lsa's for each area */
  238|      0|		ospf_router_lsa_update(ospf);
  239|       |
  240|       |		/* update ospf_interface's */
  241|      0|		FOR_ALL_INTERFACES (vrf, ifp) {
  ------------------
  |  |  372|      0|	if (vrf)                                                               \
  |  |  ------------------
  |  |  |  Branch (372:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  373|      0|		RB_FOREACH (ifp, if_name_head, &vrf->ifaces_by_name)
  |  |  ------------------
  |  |  |  |  529|      0|	for ((_e) = RB_MIN(_name, (_head)); (_e) != NULL;                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  515|      0|#define RB_MIN(_name, _head)		_name##_RB_MIN(_head)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (529:38): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  530|      0|	     (_e) = RB_NEXT(_name, (_e)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  517|      0|#define RB_NEXT(_name, _elm)		_name##_RB_NEXT(_elm)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  242|      0|			if (reset)
  ------------------
  |  Branch (242:8): [True: 0, False: 0]
  ------------------
  243|      0|				ospf_if_reset(ifp);
  244|      0|			else
  245|      0|				ospf_if_update(ospf, ifp);
  246|      0|		}
  247|       |
  248|      0|		ospf_external_lsa_rid_change(ospf);
  249|       |
  250|      0|#ifdef SUPPORT_OSPF_API
  251|      0|		ospf_apiserver_clients_notify_router_id_change(router_id);
  252|      0|#endif
  253|      0|	}
  254|       |
  255|      1|	ospf->inst_shutdown = 0;
  256|      1|}
ospf_router_id_update:
  259|      1|{
  260|       |	ospf_process_refresh_data(ospf, false);
  261|      1|}
ospf_new_alloc:
  317|      1|{
  318|      1|	int i;
  319|      1|	struct vrf *vrf = NULL;
  320|       |
  321|      1|	struct ospf *new = XCALLOC(MTYPE_OSPF_TOP, sizeof(struct ospf));
  ------------------
  |  |  165|      1|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  322|       |
  323|      1|	new->instance = instance;
  324|      1|	new->router_id.s_addr = htonl(0);
  325|      1|	new->router_id_static.s_addr = htonl(0);
  326|       |
  327|      1|	vrf = vrf_lookup_by_name(name);
  328|      1|	if (vrf)
  ------------------
  |  Branch (328:6): [True: 1, False: 0]
  ------------------
  329|      1|		new->vrf_id = vrf->vrf_id;
  330|      0|	else
  331|      0|		new->vrf_id = VRF_UNKNOWN;
  ------------------
  |  |   21|      0|#define VRF_UNKNOWN UINT32_MAX
  ------------------
  332|       |
  333|       |	/* Freed in ospf_finish_final */
  334|      1|	new->name = XSTRDUP(MTYPE_OSPF_TOP, name);
  ------------------
  |  |  167|      1|#define XSTRDUP(mtype, str)		qstrdup(mtype, str)
  ------------------
  335|      1|	if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|      1|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|      1|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|      1|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  336|      0|		zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  337|      1|			"%s: Create new ospf instance with vrf_name %s vrf_id %u",
  338|      1|			__func__, name, new->vrf_id);
  339|       |
  340|      1|	if (vrf)
  ------------------
  |  Branch (340:6): [True: 1, False: 0]
  ------------------
  341|      1|		ospf_vrf_link(new, vrf);
  342|       |
  343|      1|	ospf_zebra_vrf_register(new);
  344|       |
  345|      1|	new->abr_type = OSPF_ABR_DEFAULT;
  ------------------
  |  |  189|      1|#define OSPF_ABR_DEFAULT	OSPF_ABR_CISCO
  |  |  ------------------
  |  |  |  |  187|      1|#define OSPF_ABR_CISCO          3
  |  |  ------------------
  ------------------
  346|      1|	new->oiflist = list_new();
  347|      1|	new->vlinks = list_new();
  348|      1|	new->areas = list_new();
  349|      1|	new->areas->cmp = (int (*)(void *, void *))ospf_area_id_cmp;
  350|      1|	new->networks = route_table_init();
  351|      1|	new->nbr_nbma = route_table_init();
  352|       |
  353|      1|	new->lsdb = ospf_lsdb_new();
  354|       |
  355|      1|	new->default_originate = DEFAULT_ORIGINATE_NONE;
  ------------------
  |  |  224|      1|#define DEFAULT_ORIGINATE_NONE		0
  ------------------
  356|       |
  357|      1|	new->passive_interface_default = OSPF_IF_ACTIVE;
  ------------------
  |  |   60|      1|#define OSPF_IF_ACTIVE                  0
  ------------------
  358|       |
  359|      1|	new->new_external_route = route_table_init();
  360|      1|	new->old_external_route = route_table_init();
  361|      1|	new->external_lsas = route_table_init();
  362|       |
  363|      1|	new->stub_router_startup_time = OSPF_STUB_ROUTER_UNCONFIGURED;
  ------------------
  |  |  204|      1|#define OSPF_STUB_ROUTER_UNCONFIGURED	  0
  ------------------
  364|      1|	new->stub_router_shutdown_time = OSPF_STUB_ROUTER_UNCONFIGURED;
  ------------------
  |  |  204|      1|#define OSPF_STUB_ROUTER_UNCONFIGURED	  0
  ------------------
  365|      1|	new->stub_router_admin_set = OSPF_STUB_ROUTER_ADMINISTRATIVE_UNSET;
  ------------------
  |  |  207|      1|#define OSPF_STUB_ROUTER_ADMINISTRATIVE_UNSET   0
  ------------------
  366|       |
  367|       |	/* Distribute parameter init. */
  368|     33|	for (i = 0; i <= ZEBRA_ROUTE_MAX; i++) {
  ------------------
  |  |   39|     33|#define ZEBRA_ROUTE_MAX                  31
  ------------------
  |  Branch (368:14): [True: 32, False: 1]
  ------------------
  369|     32|		new->dtag[i] = 0;
  370|     32|	}
  371|      1|	new->default_metric = -1;
  372|      1|	new->ref_bandwidth = OSPF_DEFAULT_REF_BANDWIDTH;
  ------------------
  |  |   64|      1|#define OSPF_DEFAULT_REF_BANDWIDTH	100000  /* Mbps */
  ------------------
  373|       |
  374|       |	/* LSA timers */
  375|      1|	new->min_ls_interval = OSPF_MIN_LS_INTERVAL;
  ------------------
  |  |   30|      1|#define OSPF_MIN_LS_INTERVAL                  5000     /* msec */
  ------------------
  376|      1|	new->min_ls_arrival = OSPF_MIN_LS_ARRIVAL;
  ------------------
  |  |   31|      1|#define OSPF_MIN_LS_ARRIVAL                   1000     /* in milliseconds */
  ------------------
  377|       |
  378|       |	/* SPF timer value init. */
  379|      1|	new->spf_delay = OSPF_SPF_DELAY_DEFAULT;
  ------------------
  |  |   82|      1|#define OSPF_SPF_DELAY_DEFAULT              0
  ------------------
  380|      1|	new->spf_holdtime = OSPF_SPF_HOLDTIME_DEFAULT;
  ------------------
  |  |   83|      1|#define OSPF_SPF_HOLDTIME_DEFAULT           50
  ------------------
  381|      1|	new->spf_max_holdtime = OSPF_SPF_MAX_HOLDTIME_DEFAULT;
  ------------------
  |  |   84|      1|#define OSPF_SPF_MAX_HOLDTIME_DEFAULT	    5000
  ------------------
  382|      1|	new->spf_hold_multiplier = 1;
  383|       |
  384|       |	/* MaxAge init. */
  385|      1|	new->maxage_delay = OSPF_LSA_MAXAGE_REMOVE_DELAY_DEFAULT;
  ------------------
  |  |   87|      1|#define OSPF_LSA_MAXAGE_REMOVE_DELAY_DEFAULT	60
  ------------------
  386|      1|	new->maxage_lsa = route_table_init();
  387|      1|	new->t_maxage_walker = NULL;
  388|      1|	event_add_timer(master, ospf_lsa_maxage_walker, new,
  ------------------
  |  |  216|      1|#define event_add_timer(m, f, a, v, t) 0
  ------------------
  389|      1|			OSPF_LSA_MAXAGE_CHECK_INTERVAL, &new->t_maxage_walker);
  390|       |
  391|       |	/* Max paths initialization */
  392|      1|	new->max_multipath = MULTIPATH_NUM;
  ------------------
  |  |  670|      1|#define MULTIPATH_NUM 16
  ------------------
  393|       |
  394|       |	/* Distance table init. */
  395|      1|	new->distance_table = route_table_init();
  396|       |
  397|      1|	new->lsa_refresh_queue.index = 0;
  398|      1|	new->lsa_refresh_interval = OSPF_LSA_REFRESH_INTERVAL_DEFAULT;
  ------------------
  |  |  338|      1|#define OSPF_LSA_REFRESH_INTERVAL_DEFAULT 10
  ------------------
  399|      1|	new->lsa_refresh_timer = OSPF_LS_REFRESH_TIME;
  ------------------
  |  |   28|      1|#define OSPF_LS_REFRESH_TIME                  1800
  ------------------
  400|      1|	new->t_lsa_refresher = NULL;
  401|      1|	event_add_timer(master, ospf_lsa_refresh_walker, new,
  ------------------
  |  |  216|      1|#define event_add_timer(m, f, a, v, t) 0
  ------------------
  402|      1|			new->lsa_refresh_interval, &new->t_lsa_refresher);
  403|      1|	new->lsa_refresher_started = monotime(NULL);
  404|       |
  405|      1|	new->ibuf = stream_new(OSPF_MAX_PACKET_SIZE + 1);
  ------------------
  |  |   14|      1|#define OSPF_MAX_PACKET_SIZE  65535U   /* includes IP Header size. */
  ------------------
  406|       |
  407|      1|	new->t_read = NULL;
  408|      1|	new->oi_write_q = list_new();
  409|      1|	new->write_oi_count = OSPF_WRITE_INTERFACE_COUNT_DEFAULT;
  ------------------
  |  |  288|      1|#define OSPF_WRITE_INTERFACE_COUNT_DEFAULT    20
  ------------------
  410|       |
  411|      1|	new->proactive_arp = OSPF_PROACTIVE_ARP_DEFAULT;
  ------------------
  |  |  362|      1|#define OSPF_PROACTIVE_ARP_DEFAULT true
  ------------------
  412|       |
  413|      1|	ospf_gr_helper_instance_init(new);
  414|       |
  415|      1|	ospf_asbr_external_aggregator_init(new);
  416|       |
  417|      1|	ospf_opaque_type11_lsa_init(new);
  418|       |
  419|      1|	QOBJ_REG(new, ospf);
  ------------------
  |  |   88|      1|#define QOBJ_REG(n, structname) qobj_reg(&n->qobj_node, &qobj_t_##structname)
  ------------------
  420|       |
  421|      1|	new->fd = -1;
  422|      1|	new->intf_socket_enabled = true;
  423|       |
  424|      1|	new->recv_sock_bufsize = OSPF_DEFAULT_SOCK_BUFSIZE;
  ------------------
  |  |   71|      1|#define OSPF_DEFAULT_SOCK_BUFSIZE   (8 * 1024 * 1024)
  ------------------
  425|      1|	new->send_sock_bufsize = OSPF_DEFAULT_SOCK_BUFSIZE;
  ------------------
  |  |   71|      1|#define OSPF_DEFAULT_SOCK_BUFSIZE   (8 * 1024 * 1024)
  ------------------
  426|       |
  427|      1|	return new;
  428|      1|}
ospf_lookup_by_inst_name:
  491|      1|{
  492|      1|	struct ospf *ospf = NULL;
  493|      1|	struct listnode *node, *nnode;
  494|       |
  495|      1|	for (ALL_LIST_ELEMENTS(om->ospf, node, nnode, ospf)) {
  ------------------
  |  |  320|      1|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|      1|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  321|      1|	(node) != NULL                                                         \
  |  |  ------------------
  |  |  |  Branch (321:2): [True: 0, False: 1]
  |  |  ------------------
  |  |  322|      1|		&& ((data) = static_cast(data, listgetdata(node)),             \
  |  |  ------------------
  |  |  |  |  204|      0|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  323|      0|		    (nextnode) = node->next, 1);                               \
  |  |  324|      1|	(node) = (nextnode), ((data) = NULL)
  ------------------
  496|      0|		if ((ospf->instance == instance)
  ------------------
  |  Branch (496:7): [True: 0, False: 0]
  ------------------
  497|      0|		    && ((ospf->name == NULL && name == NULL)
  ------------------
  |  Branch (497:12): [True: 0, False: 0]
  |  Branch (497:34): [True: 0, False: 0]
  ------------------
  498|      0|			|| (ospf->name && name
  ------------------
  |  Branch (498:8): [True: 0, False: 0]
  |  Branch (498:22): [True: 0, False: 0]
  ------------------
  499|      0|			    && strcmp(ospf->name, name) == 0)))
  ------------------
  |  Branch (499:11): [True: 0, False: 0]
  ------------------
  500|      0|			return ospf;
  501|      0|	}
  502|      1|	return NULL;
  503|      1|}
ospf_lookup:
  506|      1|{
  507|      1|	struct ospf *ospf;
  508|       |
  509|      1|	if (ospf_instance) {
  ------------------
  |  Branch (509:6): [True: 0, False: 1]
  ------------------
  510|      0|		ospf = ospf_lookup_instance(instance);
  511|      1|	} else {
  512|      1|		ospf = ospf_lookup_by_inst_name(instance, name);
  513|      1|	}
  514|       |
  515|      1|	return ospf;
  516|      1|}
ospf_get:
  519|      1|{
  520|      1|	struct ospf *ospf;
  521|       |
  522|      1|	ospf = ospf_lookup(instance, name);
  523|       |
  524|      1|	*created = (ospf == NULL);
  525|      1|	if (ospf == NULL)
  ------------------
  |  Branch (525:6): [True: 1, False: 0]
  ------------------
  526|      1|		ospf = ospf_new(instance, name);
  527|       |
  528|      1|	return ospf;
  529|      1|}
ospf_lookup_by_vrf_id:
  532|      3|{
  533|      3|	struct vrf *vrf = NULL;
  534|       |
  535|      3|	vrf = vrf_lookup_by_id(vrf_id);
  536|      3|	if (!vrf)
  ------------------
  |  Branch (536:6): [True: 0, False: 3]
  ------------------
  537|      0|		return NULL;
  538|      3|	return (vrf->info) ? (struct ospf *)vrf->info : NULL;
  ------------------
  |  Branch (538:9): [True: 3, False: 0]
  ------------------
  539|      3|}
ospf_area_new:
  936|      1|{
  937|      1|	struct ospf_area *new;
  938|       |
  939|       |	/* Allocate new config_network. */
  940|      1|	new = XCALLOC(MTYPE_OSPF_AREA, sizeof(struct ospf_area));
  ------------------
  |  |  165|      1|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  941|       |
  942|      1|	new->ospf = ospf;
  943|       |
  944|      1|	new->area_id = area_id;
  945|      1|	new->area_id_fmt = OSPF_AREA_ID_FMT_DOTTEDQUAD;
  ------------------
  |  |  517|      1|#define OSPF_AREA_ID_FMT_DOTTEDQUAD     1
  ------------------
  946|       |
  947|      1|	new->external_routing = OSPF_AREA_DEFAULT;
  ------------------
  |  |   76|      1|#define OSPF_AREA_DEFAULT       0
  ------------------
  948|      1|	new->default_cost = 1;
  949|      1|	new->auth_type = OSPF_AUTH_NULL;
  ------------------
  |  |   41|      1|#define OSPF_AUTH_NULL                      0
  ------------------
  950|       |
  951|       |	/* New LSDB init. */
  952|      1|	new->lsdb = ospf_lsdb_new();
  953|       |
  954|       |	/* Self-originated LSAs initialize. */
  955|      1|	new->router_lsa_self = NULL;
  956|       |
  957|       |	/* Initialize FR field */
  958|      1|	new->fr_info.enabled = false;
  959|      1|	new->fr_info.configured = false;
  960|      1|	new->fr_info.state_changed = false;
  961|      1|	new->fr_info.router_lsas_recv_dc_bit = 0;
  962|      1|	new->fr_info.indication_lsa_self = NULL;
  963|      1|	new->fr_info.area_ind_lsa_recvd = false;
  964|      1|	new->fr_info.area_dc_clear = false;
  965|       |
  966|      1|	ospf_opaque_type10_lsa_init(new);
  967|       |
  968|      1|	new->oiflist = list_new();
  969|      1|	new->ranges = route_table_init();
  970|      1|	new->nssa_ranges = route_table_init();
  971|       |
  972|      1|	if (area_id.s_addr == OSPF_AREA_BACKBONE)
  ------------------
  |  |   73|      1|#define OSPF_AREA_BACKBONE              0x00000000      /* 0.0.0.0 */
  ------------------
  |  Branch (972:6): [True: 1, False: 0]
  ------------------
  973|      1|		ospf->backbone = new;
  974|       |
  975|      1|	return new;
  976|      1|}
ospf_area_add_if:
 1084|      1|{
 1085|      1|	listnode_add(area->oiflist, oi);
 1086|      1|}
add_ospf_interface:
 1096|      1|{
 1097|      1|	struct ospf_interface *oi;
 1098|       |
 1099|      1|	oi = ospf_if_new(area->ospf, co->ifp, co->address);
 1100|      1|	oi->connected = co;
 1101|       |
 1102|      1|	oi->area = area;
 1103|       |
 1104|      1|	oi->params = ospf_lookup_if_params(co->ifp, oi->address->u.prefix4);
 1105|      1|	oi->output_cost = ospf_if_get_output_cost(oi);
 1106|       |
 1107|       |	/* Relate ospf interface to ospf instance. */
 1108|      1|	oi->ospf = area->ospf;
 1109|       |
 1110|       |	/* update network type as interface flag */
 1111|       |	/* If network type is specified previously,
 1112|       |	   skip network type setting. */
 1113|      1|	oi->type = IF_DEF_PARAMS(co->ifp)->type;
  ------------------
  |  |   17|      1|#define IF_DEF_PARAMS(I) (IF_OSPF_IF_INFO (I)->def_params)
  |  |  ------------------
  |  |  |  |   16|      1|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  ------------------
  ------------------
 1114|      1|	oi->ptp_dmvpn = IF_DEF_PARAMS(co->ifp)->ptp_dmvpn;
  ------------------
  |  |   17|      1|#define IF_DEF_PARAMS(I) (IF_OSPF_IF_INFO (I)->def_params)
  |  |  ------------------
  |  |  |  |   16|      1|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  ------------------
  ------------------
 1115|      1|	oi->p2mp_delay_reflood = IF_DEF_PARAMS(co->ifp)->p2mp_delay_reflood;
  ------------------
  |  |   17|      1|#define IF_DEF_PARAMS(I) (IF_OSPF_IF_INFO (I)->def_params)
  |  |  ------------------
  |  |  |  |   16|      1|#define IF_OSPF_IF_INFO(I) ((struct ospf_if_info *)((I)->info))
  |  |  ------------------
  ------------------
 1116|       |
 1117|       |	/* Add pseudo neighbor. */
 1118|      1|	ospf_nbr_self_reset(oi, oi->ospf->router_id);
 1119|       |
 1120|      1|	ospf_area_add_if(oi->area, oi);
 1121|       |
 1122|       |	/* if LDP-IGP Sync is configured globally inherit config */
 1123|      1|	ospf_ldp_sync_if_init(oi);
 1124|       |
 1125|       |	/*
 1126|       |	 * if router_id is not configured, don't bring up
 1127|       |	 * interfaces.
 1128|       |	 * ospf_router_id_update() will call ospf_if_update
 1129|       |	 * whenever r-id is configured instead.
 1130|       |	 */
 1131|      1|	if ((area->ospf->router_id.s_addr != INADDR_ANY)
  ------------------
  |  Branch (1131:6): [True: 0, False: 1]
  ------------------
 1132|      0|	    && if_is_operative(co->ifp))
  ------------------
  |  Branch (1132:9): [True: 0, False: 0]
  ------------------
 1133|      0|		ospf_if_up(oi);
 1134|       |
 1135|       |	/*
 1136|       |	 * RFC 3623 - Section 5 ("Unplanned Outages"):
 1137|       |	 * "The grace-LSAs are encapsulated in Link State Update Packets
 1138|       |	 * and sent out to all interfaces, even though the restarted
 1139|       |	 * router has no adjacencies and no knowledge of previous
 1140|       |	 * adjacencies".
 1141|       |	 */
 1142|      1|	if (oi->ospf->gr_info.restart_in_progress &&
  ------------------
  |  Branch (1142:6): [True: 0, False: 1]
  ------------------
 1143|      0|	    oi->ospf->gr_info.reason == OSPF_GR_UNKNOWN_RESTART)
  ------------------
  |  Branch (1143:6): [True: 0, False: 0]
  ------------------
 1144|      0|		ospf_gr_unplanned_start_interface(oi);
 1145|       |
 1146|      1|	return oi;
 1147|      1|}
ospf_master_init:
 2226|      1|{
 2227|      1|	memset(&ospf_master, 0, sizeof(ospf_master));
 2228|       |
 2229|      1|	om = &ospf_master;
 2230|      1|	om->ospf = list_new();
 2231|      1|	om->master = master;
 2232|      1|}
ospf_vrf_link:
 2236|      1|{
 2237|      1|	ospf->vrf_id = vrf->vrf_id;
 2238|      1|	if (vrf->info != (void *)ospf)
  ------------------
  |  Branch (2238:6): [True: 1, False: 0]
  ------------------
 2239|      1|		vrf->info = (void *)ospf;
 2240|      1|}
ospf_vrf_init:
 2381|      1|{
 2382|      1|	vrf_init(ospf_vrf_new, ospf_vrf_enable, ospf_vrf_disable,
 2383|      1|		 ospf_vrf_delete);
 2384|      1|}
ospf_get_name:
 2399|      1|{
 2400|      1|	if (ospf->name)
  ------------------
  |  Branch (2400:6): [True: 1, False: 0]
  ------------------
 2401|      1|		return ospf->name;
 2402|      0|	else
 2403|      0|		return VRF_DEFAULT_NAME;
  ------------------
  |  |  260|      0|#define VRF_DEFAULT_NAME    vrf_get_default_name()
  ------------------
 2404|      1|}
ospfd.c:ospf_new:
  432|      1|{
  433|      1|	struct ospf *new;
  434|       |
  435|      1|	new = ospf_new_alloc(instance, name);
  436|      1|	ospf_add(new);
  437|       |
  438|      1|	if (new->vrf_id == VRF_UNKNOWN)
  ------------------
  |  |   21|      1|#define VRF_UNKNOWN UINT32_MAX
  ------------------
  |  Branch (438:6): [True: 0, False: 1]
  ------------------
  439|      0|		return new;
  440|       |
  441|      1|	if ((ospf_sock_init(new)) < 0) {
  ------------------
  |  Branch (441:6): [True: 0, False: 1]
  ------------------
  442|      0|		flog_err(EC_LIB_SOCKET,
  ------------------
  |  |  136|      0|#define flog_err(ferr_id, format, ...) 0
  ------------------
  443|      0|			 "%s: ospf_sock_init is unable to open a socket",
  444|      0|			 __func__);
  445|      0|		return new;
  446|      0|	}
  447|       |
  448|      1|	event_add_read(master, ospf_read, new, new->fd, &new->t_read);
  ------------------
  |  |  214|      1|#define event_add_read(m, f, a, v, t) 0
  ------------------
  449|       |
  450|      1|	new->oi_running = 1;
  451|      1|	ospf_router_id_update(new);
  452|       |
  453|       |	/*
  454|       |	 * Read from non-volatile memory whether this instance is performing a
  455|       |	 * graceful restart or not.
  456|       |	 */
  457|      1|	ospf_gr_nvm_read(new);
  458|       |
  459|      1|	new->fr_configured = false;
  460|       |
  461|      1|	return new;
  462|      1|}
ospfd.c:ospf_add:
  307|      1|{
  308|      1|	listnode_add(om->ospf, ospf);
  309|      1|}
ospfd.c:ospf_vrf_new:
 2252|      1|{
 2253|      1|	if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|      1|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|      1|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|      1|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2254|      0|		zlog_debug("%s: VRF Created: %s(%u)", __func__, vrf->name,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 2255|      1|			   vrf->vrf_id);
 2256|       |
 2257|      1|	return 0;
 2258|      1|}
ospfd.c:ospf_vrf_enable:
 2304|      1|{
 2305|      1|	struct ospf *ospf = NULL;
 2306|      1|	vrf_id_t old_vrf_id;
 2307|      1|	int ret = 0;
 2308|       |
 2309|      1|	if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|      1|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|      1|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|      1|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2310|      0|		zlog_debug("%s: VRF %s id %u enabled", __func__, vrf->name,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 2311|      1|			   vrf->vrf_id);
 2312|       |
 2313|      1|	ospf = ospf_lookup_by_name(vrf->name);
 2314|      1|	if (ospf) {
  ------------------
  |  Branch (2314:6): [True: 0, False: 1]
  ------------------
 2315|      0|		old_vrf_id = ospf->vrf_id;
 2316|       |		/* We have instance configured, link to VRF and make it "up". */
 2317|      0|		ospf_vrf_link(ospf, vrf);
 2318|      0|		if (IS_DEBUG_OSPF_EVENT)
  ------------------
  |  |   92|      0|#define IS_DEBUG_OSPF_EVENT IS_DEBUG_OSPF(event, EVENT)
  |  |  ------------------
  |  |  |  |   91|      0|#define IS_DEBUG_OSPF(a, b) (term_debug_ospf_##a & OSPF_DEBUG_##b)
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|      0|#define OSPF_DEBUG_EVENT        0x01
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2319|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 2320|      0|				"%s: ospf linked to vrf %s vrf_id %u (old id %u)",
 2321|      0|				__func__, vrf->name, ospf->vrf_id, old_vrf_id);
 2322|       |
 2323|      0|		if (old_vrf_id != ospf->vrf_id) {
  ------------------
  |  Branch (2323:7): [True: 0, False: 0]
  ------------------
 2324|      0|			ospf_set_redist_vrf_bitmaps(ospf, true);
 2325|       |
 2326|       |			/* start zebra redist to us for new vrf */
 2327|      0|			ospf_zebra_vrf_register(ospf);
 2328|       |
 2329|      0|			ret = ospf_sock_init(ospf);
 2330|      0|			if (ret < 0 || ospf->fd <= 0)
  ------------------
  |  Branch (2330:8): [True: 0, False: 0]
  |  Branch (2330:19): [True: 0, False: 0]
  ------------------
 2331|      0|				return 0;
 2332|      0|			event_add_read(master, ospf_read, ospf, ospf->fd,
  ------------------
  |  |  214|      0|#define event_add_read(m, f, a, v, t) 0
  ------------------
 2333|      0|				       &ospf->t_read);
 2334|      0|			ospf->oi_running = 1;
 2335|      0|			ospf_router_id_update(ospf);
 2336|      0|		}
 2337|      0|	}
 2338|       |
 2339|      1|	return 0;
 2340|      1|}
ospfd.c:ospf_lookup_by_name:
  563|      1|{
  564|      1|	struct ospf *ospf = NULL;
  565|      1|	struct listnode *node, *nnode;
  566|       |
  567|      1|	for (ALL_LIST_ELEMENTS(om->ospf, node, nnode, ospf))
  ------------------
  |  |  320|      1|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|      1|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  321|      1|	(node) != NULL                                                         \
  |  |  ------------------
  |  |  |  Branch (321:2): [True: 0, False: 1]
  |  |  ------------------
  |  |  322|      1|		&& ((data) = static_cast(data, listgetdata(node)),             \
  |  |  ------------------
  |  |  |  |  204|      0|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  323|      0|		    (nextnode) = node->next, 1);                               \
  |  |  324|      1|	(node) = (nextnode), ((data) = NULL)
  ------------------
  568|      0|		if ((ospf->name == NULL && vrf_name == NULL)
  ------------------
  |  Branch (568:8): [True: 0, False: 0]
  |  Branch (568:30): [True: 0, False: 0]
  ------------------
  569|      0|		    || (ospf->name && vrf_name
  ------------------
  |  Branch (569:11): [True: 0, False: 0]
  |  Branch (569:25): [True: 0, False: 0]
  ------------------
  570|      0|			&& strcmp(ospf->name, vrf_name) == 0))
  ------------------
  |  Branch (570:7): [True: 0, False: 0]
  ------------------
  571|      0|			return ospf;
  572|      1|	return NULL;
  573|      1|}

frr-affinity-map.yang.c:embed_register:
  101|      2|{
  102|      2|	yang_module_embed(&embed);
  103|      2|}

frr-filter.yang.c:embed_register:
  377|      2|{
  378|      2|	yang_module_embed(&embed);
  379|      2|}

frr-if-rmap.yang.c:embed_register:
  100|      2|{
  101|      2|	yang_module_embed(&embed);
  102|      2|}

frr-interface.yang.c:embed_register:
  340|      2|{
  341|      2|	yang_module_embed(&embed);
  342|      2|}

frr-module-translator.yang.c:embed_register:
  114|      2|{
  115|      2|	yang_module_embed(&embed);
  116|      2|}

frr-nexthop.yang.c:embed_register:
  337|      2|{
  338|      2|	yang_module_embed(&embed);
  339|      2|}

frr-ospf-route-map.yang.c:embed_register:
   72|      2|{
   73|      2|	yang_module_embed(&embed);
   74|      2|}

frr-route-map.yang.c:embed_register:
  562|      2|{
  563|      2|	yang_module_embed(&embed);
  564|      2|}

frr-route-types.yang.c:embed_register:
  202|      2|{
  203|      2|	yang_module_embed(&embed);
  204|      2|}

frr-routing.yang.c:embed_register:
  280|      2|{
  281|      2|	yang_module_embed(&embed);
  282|      2|}

frr-vrf.yang.c:embed_register:
  106|      2|{
  107|      2|	yang_module_embed(&embed);
  108|      2|}

ietf-bgp-types.yang.c:embed_register:
  545|      2|{
  546|      2|	yang_module_embed(&embed);
  547|      2|}

ietf-interfaces.yang.c:embed_register:
 1143|      2|{
 1144|      2|	yang_module_embed(&embed);
 1145|      2|}

ietf-routing-types.yang.c:embed_register:
  771|      2|{
  772|      2|	yang_module_embed(&embed);
  773|      2|}

