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|     68|{
  549|     68|	if (*bsp == NULL)
  ------------------
  |  Branch (549:6): [True: 68, False: 0]
  ------------------
  550|     68|		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|  3.93k|{
   22|  3.93k|	const struct iovec *iov_end;
   23|  3.93k|	uint32_t sum = 0;
   24|  3.93k|	register unsigned short answer; /* assumes unsigned short == 16 bits */
   25|       |
   26|  3.93k|	union {
   27|  3.93k|		uint8_t bytes[2];
   28|  3.93k|		uint16_t word;
   29|  3.93k|	} wordbuf;
   30|  3.93k|	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|  7.86k|	for (iov_end = iov + iov_len; iov < iov_end; iov++) {
  ------------------
  |  Branch (38:32): [True: 3.93k, False: 3.93k]
  ------------------
   39|  3.93k|		const uint8_t *ptr, *end;
   40|       |
   41|  3.93k|		ptr = (const uint8_t *)iov->iov_base;
   42|  3.93k|		end = ptr + iov->iov_len;
   43|  3.93k|		if (ptr == end)
  ------------------
  |  Branch (43:7): [True: 0, False: 3.93k]
  ------------------
   44|      0|			continue;
   45|       |
   46|  3.93k|		if (have_oddbyte) {
  ------------------
  |  Branch (46:7): [True: 0, False: 3.93k]
  ------------------
   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|  3.99M|		while (ptr + 8 <= end) {
  ------------------
  |  Branch (53:10): [True: 3.99M, False: 3.93k]
  ------------------
   54|  3.99M|			add_carry(sum, *(const uint32_t *)(ptr + 0));
  ------------------
  |  |   13|  3.99M|	do {                                                                   \
  |  |   14|  3.99M|		typeof(dst) _add = (add);                                      \
  |  |   15|  3.99M|		dst += _add;                                                   \
  |  |   16|  3.99M|		if (dst < _add)                                                \
  |  |  ------------------
  |  |  |  Branch (16:7): [True: 511k, False: 3.48M]
  |  |  ------------------
  |  |   17|  3.99M|			dst++;                                                 \
  |  |   18|  3.99M|	} while (0)
  |  |  ------------------
  |  |  |  Branch (18:11): [Folded, False: 3.99M]
  |  |  ------------------
  ------------------
   55|  3.99M|			add_carry(sum, *(const uint32_t *)(ptr + 4));
  ------------------
  |  |   13|  3.99M|	do {                                                                   \
  |  |   14|  3.99M|		typeof(dst) _add = (add);                                      \
  |  |   15|  3.99M|		dst += _add;                                                   \
  |  |   16|  3.99M|		if (dst < _add)                                                \
  |  |  ------------------
  |  |  |  Branch (16:7): [True: 528k, False: 3.46M]
  |  |  ------------------
  |  |   17|  3.99M|			dst++;                                                 \
  |  |   18|  3.99M|	} while (0)
  |  |  ------------------
  |  |  |  Branch (18:11): [Folded, False: 3.99M]
  |  |  ------------------
  ------------------
   56|  3.99M|			ptr += 8;
   57|  3.99M|		}
   58|       |
   59|  9.61k|		while (ptr + 2 <= end) {
  ------------------
  |  Branch (59:10): [True: 5.68k, False: 3.93k]
  ------------------
   60|  5.68k|			add_carry(sum, *(const uint16_t *)ptr);
  ------------------
  |  |   13|  5.68k|	do {                                                                   \
  |  |   14|  5.68k|		typeof(dst) _add = (add);                                      \
  |  |   15|  5.68k|		dst += _add;                                                   \
  |  |   16|  5.68k|		if (dst < _add)                                                \
  |  |  ------------------
  |  |  |  Branch (16:7): [True: 4, False: 5.67k]
  |  |  ------------------
  |  |   17|  5.68k|			dst++;                                                 \
  |  |   18|  5.68k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (18:11): [Folded, False: 5.68k]
  |  |  ------------------
  ------------------
   61|  5.68k|			ptr += 2;
   62|  5.68k|		}
   63|       |
   64|  3.93k|		if (ptr + 1 <= end) {
  ------------------
  |  Branch (64:7): [True: 770, False: 3.16k]
  ------------------
   65|    770|			wordbuf.bytes[0] = *ptr++;
   66|    770|			have_oddbyte = true;
   67|    770|		}
   68|  3.93k|	}
   69|       |
   70|       |	/* mop up an odd byte, if necessary */
   71|  3.93k|	if (have_oddbyte) {
  ------------------
  |  Branch (71:6): [True: 770, False: 3.16k]
  ------------------
   72|    770|		wordbuf.bytes[1] = 0;
   73|    770|		add_carry(sum, wordbuf.word);
  ------------------
  |  |   13|    770|	do {                                                                   \
  |  |   14|    770|		typeof(dst) _add = (add);                                      \
  |  |   15|    770|		dst += _add;                                                   \
  |  |   16|    770|		if (dst < _add)                                                \
  |  |  ------------------
  |  |  |  Branch (16:7): [True: 1, False: 769]
  |  |  ------------------
  |  |   17|    770|			dst++;                                                 \
  |  |   18|    770|	} while (0)
  |  |  ------------------
  |  |  |  Branch (18:11): [Folded, False: 770]
  |  |  ------------------
  ------------------
   74|    770|	}
   75|       |
   76|       |	/*
   77|       |	 * Add back carry outs from top 16 bits to low 16 bits.
   78|       |	 */
   79|       |
   80|  3.93k|	sum = (sum >> 16) + (sum & 0xffff); /* add high-16 to low-16 */
   81|  3.93k|	sum += (sum >> 16);		    /* add carry */
   82|       |	/* ones-complement, then truncate to 16 bits */
   83|  3.93k|	answer = (unsigned short)~sum;
   84|  3.93k|	return (answer);
   85|  3.93k|}

install_node:
  254|     17|{
  255|     17|#define CMD_HASH_STR_SIZE 256
  256|     17|	char hash_name[CMD_HASH_STR_SIZE];
  257|       |
  258|     17|	vector_set_index(cmdvec, node->node, node);
  259|     17|	node->cmdgraph = graph_new();
  260|     17|	node->cmd_vector = vector_init(VECTOR_MIN_SIZE);
  ------------------
  |  |   25|     17|#define VECTOR_MIN_SIZE 1
  ------------------
  261|       |	// add start node
  262|     17|	struct cmd_token *token = cmd_token_new(START_TKN, 0, NULL, NULL);
  263|     17|	graph_new_node(node->cmdgraph, token,
  264|     17|		       (void (*)(void *)) & cmd_token_del);
  265|       |
  266|     17|	snprintf(hash_name, sizeof(hash_name), "Command Hash: %s", node->name);
  267|     17|	node->cmd_hash =
  268|     17|		hash_create_size(16, cmd_hash_key, cmd_hash_cmp, hash_name);
  269|     17|}
_install_element:
  287|    568|{
  288|    568|#ifdef FUZZING
  289|    568|	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|      6|{
  766|      6|	if (!varhandlers)
  ------------------
  |  Branch (766:6): [True: 0, False: 6]
  ------------------
  767|      0|		return;
  768|       |
  769|     22|	for (; cvh->completions; cvh++)
  ------------------
  |  Branch (769:9): [True: 16, False: 6]
  ------------------
  770|     16|		listnode_add(varhandlers, (void *)cvh);
  771|      6|}
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|      5|{
 2467|      5|	_install_element(node, &config_exit_cmd);
 2468|      5|	_install_element(node, &config_quit_cmd);
 2469|      5|	_install_element(node, &config_end_cmd);
 2470|      5|	_install_element(node, &config_help_cmd);
 2471|      5|	_install_element(node, &config_list_cmd);
 2472|      5|	_install_element(node, &show_cli_graph_cmd);
 2473|      5|	_install_element(node, &find_cmd);
 2474|       |
 2475|      5|	_install_element(node, &config_write_cmd);
 2476|      5|	_install_element(node, &show_running_config_cmd);
 2477|       |
 2478|      5|	_install_element(node, &autocomplete_cmd);
 2479|       |
 2480|      5|	nb_cli_install_default(node);
 2481|      5|}
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|     17|{
   25|     17|	struct cmd_token *token =
   26|     17|		XCALLOC(MTYPE_CMD_TOKENS, sizeof(struct cmd_token));
  ------------------
  |  |  165|     17|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
   27|     17|	token->type = type;
   28|     17|	token->attr = attr;
   29|     17|	token->text = text ? XSTRDUP(MTYPE_CMD_TEXT, text) : NULL;
  ------------------
  |  |  167|      0|#define XSTRDUP(mtype, str)		qstrdup(mtype, str)
  ------------------
  |  Branch (29:16): [True: 0, False: 17]
  ------------------
   30|     17|	token->desc = desc ? XSTRDUP(MTYPE_CMD_DESC, desc) : NULL;
  ------------------
  |  |  167|      0|#define XSTRDUP(mtype, str)		qstrdup(mtype, str)
  ------------------
  |  Branch (30:16): [True: 0, False: 17]
  ------------------
   31|     17|	token->refcnt = 1;
   32|     17|	token->arg = NULL;
   33|     17|	token->allowrepeat = false;
   34|     17|	token->varname = NULL;
   35|       |
   36|     17|	return token;
   37|     17|}

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|      3|{
   74|      3|	uint32_t i = 0;
   75|       |
   76|      3|	frr_with_mutex (&refs_mtx) {
  ------------------
  |  |  223|      3|	for (pthread_mutex_t MACRO_REPEAT(_frr_with_mutex, ##__VA_ARGS__)      \
  |  |  ------------------
  |  |  |  |  173|      3|	MACRO_VARIANT(_MACRO_REPEAT, ##__VA_ARGS__)(NAME, ##__VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      3|	_CONCAT(NAME, _MACRO_VARIANT(0, ##__VA_ARGS__, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  141|      3|#define _CONCAT(a, b) _CONCAT2(a,b)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  140|      3|#define _CONCAT2(a, b) a ## b
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  156|      3|	NAME(A1)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  223|      3|	for (pthread_mutex_t MACRO_REPEAT(_frr_with_mutex, ##__VA_ARGS__)      \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  218|      3|	*NAMECTR(_mtx_) __attribute__((                                        \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  219|      3|		unused, cleanup(_frr_mtx_unlock))) = _frr_mtx_lock(mutex),     \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  145|      3|			_10, _9, _8, _7, _6, _5, _4, _3, _2, _1, _0))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  224|      6|	     *_once = NULL; _once == NULL; _once = (void *)1)                  \
  |  |  ------------------
  |  |  |  Branch (224:22): [True: 3, False: 3]
  |  |  ------------------
  ------------------
   77|     63|		while (ref[i].code != END_FERR) {
  ------------------
  |  |  128|     63|#define END_FERR            0xFFFFFFFF
  ------------------
  |  Branch (77:10): [True: 60, False: 3]
  ------------------
   78|     60|			(void)hash_get(refs, &ref[i], hash_alloc_intern);
   79|     60|			i++;
   80|     60|		}
   81|      3|	}
   82|      3|}
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|     60|{
   67|     60|	const struct log_ref *f = a;
   68|       |
   69|     60|	return f->code;
   70|     60|}

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|      4|{
  241|      4|	pthread_mutex_lock(mutex);
  242|      4|	return mutex;
  243|      4|}
ferr.c:_frr_mtx_unlock:
  246|      4|{
  247|      4|	if (!*mutex)
  ------------------
  |  Branch (247:6): [True: 0, False: 4]
  ------------------
  248|      0|		return;
  249|      4|	pthread_mutex_unlock(*mutex);
  250|       |	*mutex = NULL;
  251|      4|}
hash.c:_frr_mtx_lock:
  240|  60.4k|{
  241|  60.4k|	pthread_mutex_lock(mutex);
  242|  60.4k|	return mutex;
  243|  60.4k|}
hash.c:_frr_mtx_unlock:
  246|  60.4k|{
  247|  60.4k|	if (!*mutex)
  ------------------
  |  Branch (247:6): [True: 0, False: 60.4k]
  ------------------
  248|      0|		return;
  249|  60.4k|	pthread_mutex_unlock(*mutex);
  250|       |	*mutex = NULL;
  251|  60.4k|}
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|     17|{
   17|     17|	struct graph *graph = XCALLOC(MTYPE_GRAPH, sizeof(struct graph));
  ------------------
  |  |  165|     17|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
   18|     17|	graph->nodes = vector_init(VECTOR_MIN_SIZE);
  ------------------
  |  |   25|     17|#define VECTOR_MIN_SIZE 1
  ------------------
   19|       |
   20|     17|	return graph;
   21|     17|}
graph_new_node:
   35|     17|{
   36|     17|	struct graph_node *node =
   37|     17|		XCALLOC(MTYPE_GRAPH_NODE, sizeof(struct graph_node));
  ------------------
  |  |  165|     17|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
   38|       |
   39|     17|	node->from = vector_init(VECTOR_MIN_SIZE);
  ------------------
  |  |   25|     17|#define VECTOR_MIN_SIZE 1
  ------------------
   40|     17|	node->to = vector_init(VECTOR_MIN_SIZE);
  ------------------
  |  |   25|     17|#define VECTOR_MIN_SIZE 1
  ------------------
   41|     17|	node->data = data;
   42|     17|	node->del = del;
   43|       |
   44|     17|	vector_set(graph->nodes, node);
   45|       |
   46|     17|	return node;
   47|     17|}

hash_create_size:
   30|  30.4k|{
   31|  30.4k|	struct hash *hash;
   32|       |
   33|  30.4k|	assert((size & (size - 1)) == 0);
  ------------------
  |  |   51|  30.4k|	({                                                                     \
  |  |   52|  30.4k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  30.4k|			(used)) = {                                            \
  |  |   54|  30.4k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  30.4k|	{                                                                      \
  |  |  |  |  284|  30.4k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  30.4k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  30.4k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  30.4k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  30.4k|	}                                                                      \
  |  |  ------------------
  |  |   55|  30.4k|			.expr = #expr_,                                        \
  |  |   56|  30.4k|		};                                                             \
  |  |   57|  30.4k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  30.4k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  30.4k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  30.4k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  30.4k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 30.4k]
  |  |  |  Branch (58:24): [True: 30.4k, False: 0]
  |  |  ------------------
  |  |   59|  30.4k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  30.4k|	})
  ------------------
   34|  30.4k|	hash = XCALLOC(MTYPE_HASH, sizeof(struct hash));
  ------------------
  |  |  165|  30.4k|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
   35|  30.4k|	hash->index =
   36|  30.4k|		XCALLOC(MTYPE_HASH_INDEX, sizeof(struct hash_bucket *) * size);
  ------------------
  |  |  165|  30.4k|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
   37|  30.4k|	hash->size = size;
   38|  30.4k|	hash->hash_key = hash_key;
   39|  30.4k|	hash->hash_cmp = hash_cmp;
   40|  30.4k|	hash->count = 0;
   41|  30.4k|	hash->name = name ? XSTRDUP(MTYPE_HASH, name) : NULL;
  ------------------
  |  |  167|  30.4k|#define XSTRDUP(mtype, str)		qstrdup(mtype, str)
  ------------------
  |  Branch (41:15): [True: 30.4k, False: 0]
  ------------------
   42|  30.4k|	hash->stats.empty = hash->size;
   43|       |
   44|  30.4k|	frr_with_mutex (&_hashes_mtx) {
  ------------------
  |  |  223|  30.4k|	for (pthread_mutex_t MACRO_REPEAT(_frr_with_mutex, ##__VA_ARGS__)      \
  |  |  ------------------
  |  |  |  |  173|  30.4k|	MACRO_VARIANT(_MACRO_REPEAT, ##__VA_ARGS__)(NAME, ##__VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  30.4k|	_CONCAT(NAME, _MACRO_VARIANT(0, ##__VA_ARGS__, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  141|  30.4k|#define _CONCAT(a, b) _CONCAT2(a,b)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  140|  30.4k|#define _CONCAT2(a, b) a ## b
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  156|  30.4k|	NAME(A1)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  223|  30.4k|	for (pthread_mutex_t MACRO_REPEAT(_frr_with_mutex, ##__VA_ARGS__)      \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  218|  30.4k|	*NAMECTR(_mtx_) __attribute__((                                        \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  219|  30.4k|		unused, cleanup(_frr_mtx_unlock))) = _frr_mtx_lock(mutex),     \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  145|  30.4k|			_10, _9, _8, _7, _6, _5, _4, _3, _2, _1, _0))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  224|  60.8k|	     *_once = NULL; _once == NULL; _once = (void *)1)                  \
  |  |  ------------------
  |  |  |  Branch (224:22): [True: 30.4k, False: 30.4k]
  |  |  ------------------
  ------------------
   45|  30.4k|		if (!_hashes)
  ------------------
  |  Branch (45:7): [True: 1, False: 30.4k]
  ------------------
   46|      1|			_hashes = list_new();
   47|       |
   48|  30.4k|		listnode_add(_hashes, hash);
   49|  30.4k|	}
   50|       |
   51|  30.4k|	return hash;
   52|  30.4k|}
hash_create:
   57|      6|{
   58|      6|	return hash_create_size(HASH_INITIAL_SIZE, hash_key, hash_cmp, name);
  ------------------
  |  |   17|      6|#define HASH_INITIAL_SIZE 256
  ------------------
   59|      6|}
hash_alloc_intern:
   62|  90.8k|{
   63|  90.8k|	return arg;
   64|  90.8k|}
hash_get:
  126|   469k|{
  127|   469k|	frrtrace(2, frr_libfrr, hash_get, hash, data);
  ------------------
  |  |   61|   469k|#define frrtrace(nargs, provider, name, ...) (void)0
  ------------------
  128|       |
  129|   469k|	unsigned int key;
  130|   469k|	unsigned int index;
  131|   469k|	void *newdata;
  132|   469k|	struct hash_bucket *bucket;
  133|       |
  134|   469k|	if (!alloc_func && !hash->count)
  ------------------
  |  Branch (134:6): [True: 370k, False: 98.3k]
  |  Branch (134:21): [True: 42.5k, False: 328k]
  ------------------
  135|  42.5k|		return NULL;
  136|       |
  137|   426k|	key = (*hash->hash_key)(data);
  138|   426k|	index = key & (hash->size - 1);
  139|       |
  140|   645k|	for (bucket = hash->index[index]; bucket != NULL;
  ------------------
  |  Branch (140:36): [True: 511k, False: 133k]
  ------------------
  141|   511k|	     bucket = bucket->next) {
  142|   511k|		if (bucket->key == key && (*hash->hash_cmp)(bucket->data, data))
  ------------------
  |  Branch (142:7): [True: 293k, False: 218k]
  |  Branch (142:29): [True: 293k, False: 0]
  ------------------
  143|   293k|			return bucket->data;
  144|   511k|	}
  145|       |
  146|   133k|	if (alloc_func) {
  ------------------
  |  Branch (146:6): [True: 90.8k, False: 42.7k]
  ------------------
  147|  90.8k|		newdata = (*alloc_func)(data);
  148|  90.8k|		if (newdata == NULL)
  ------------------
  |  Branch (148:7): [True: 0, False: 90.8k]
  ------------------
  149|      0|			return NULL;
  150|       |
  151|  90.8k|		if (HASH_THRESHOLD(hash->count + 1, hash->size)) {
  ------------------
  |  |   19|  90.8k|#define HASH_THRESHOLD(used, size) ((used) > (size))
  |  |  ------------------
  |  |  |  Branch (19:36): [True: 1, False: 90.8k]
  |  |  ------------------
  ------------------
  152|      1|			hash_expand(hash);
  153|      1|			index = key & (hash->size - 1);
  154|      1|		}
  155|       |
  156|  90.8k|		bucket = XCALLOC(MTYPE_HASH_BUCKET, sizeof(struct hash_bucket));
  ------------------
  |  |  165|  90.8k|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  157|  90.8k|		bucket->data = newdata;
  158|  90.8k|		bucket->key = key;
  159|  90.8k|		bucket->next = hash->index[index];
  160|  90.8k|		hash->index[index] = bucket;
  161|  90.8k|		hash->count++;
  162|       |
  163|  90.8k|		frrtrace(3, frr_libfrr, hash_insert, hash, data, key);
  ------------------
  |  |   61|  90.8k|#define frrtrace(nargs, provider, name, ...) (void)0
  ------------------
  164|       |
  165|  90.8k|		int oldlen = bucket->next ? bucket->next->len : 0;
  ------------------
  |  Branch (165:16): [True: 13.6k, False: 77.2k]
  ------------------
  166|  90.8k|		int newlen = oldlen + 1;
  167|       |
  168|  90.8k|		if (newlen == 1)
  ------------------
  |  Branch (168:7): [True: 77.2k, False: 13.6k]
  ------------------
  169|  77.2k|			hash->stats.empty--;
  170|  13.6k|		else
  171|  13.6k|			bucket->next->len = 0;
  172|       |
  173|  90.8k|		bucket->len = newlen;
  174|       |
  175|  90.8k|		hash_update_ssq(hash, oldlen, newlen);
  ------------------
  |  |   71|  90.8k|	do {                                                                   \
  |  |   72|  90.8k|		int _adjust = (new + old) * (new - old);                       \
  |  |   73|  90.8k|		if (_adjust < 0)                                               \
  |  |  ------------------
  |  |  |  Branch (73:7): [True: 0, False: 90.8k]
  |  |  ------------------
  |  |   74|  90.8k|			atomic_fetch_sub_explicit(&hz->stats.ssq, -_adjust,    \
  |  |   75|      0|						  memory_order_relaxed);       \
  |  |   76|  90.8k|		else                                                           \
  |  |   77|  90.8k|			atomic_fetch_add_explicit(&hz->stats.ssq, _adjust,     \
  |  |   78|  90.8k|						  memory_order_relaxed);       \
  |  |   79|  90.8k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (79:11): [Folded, False: 90.8k]
  |  |  ------------------
  ------------------
  176|       |
  177|  90.8k|		return bucket->data;
  178|  90.8k|	}
  179|  42.7k|	return NULL;
  180|   133k|}
hash_lookup:
  183|   370k|{
  184|       |	return hash_get(hash, data, NULL);
  185|   370k|}
hash_release:
  198|   102k|{
  199|   102k|	void *ret = NULL;
  200|   102k|	unsigned int key;
  201|   102k|	unsigned int index;
  202|   102k|	struct hash_bucket *bucket;
  203|   102k|	struct hash_bucket *pp;
  204|       |
  205|   102k|	key = (*hash->hash_key)(data);
  206|   102k|	index = key & (hash->size - 1);
  207|       |
  208|   104k|	for (bucket = pp = hash->index[index]; bucket; bucket = bucket->next) {
  ------------------
  |  Branch (208:41): [True: 92.0k, False: 12.6k]
  ------------------
  209|  92.0k|		if (bucket->key == key
  ------------------
  |  Branch (209:7): [True: 90.2k, False: 1.80k]
  ------------------
  210|  90.2k|		    && (*hash->hash_cmp)(bucket->data, data)) {
  ------------------
  |  Branch (210:10): [True: 90.2k, False: 0]
  ------------------
  211|  90.2k|			int oldlen = hash->index[index]->len;
  212|  90.2k|			int newlen = oldlen - 1;
  213|       |
  214|  90.2k|			if (bucket == pp)
  ------------------
  |  Branch (214:8): [True: 88.4k, False: 1.78k]
  ------------------
  215|  88.4k|				hash->index[index] = bucket->next;
  216|  1.78k|			else
  217|  1.78k|				pp->next = bucket->next;
  218|       |
  219|  90.2k|			if (hash->index[index])
  ------------------
  |  Branch (219:8): [True: 13.5k, False: 76.6k]
  ------------------
  220|  13.5k|				hash->index[index]->len = newlen;
  221|  76.6k|			else
  222|  76.6k|				hash->stats.empty++;
  223|       |
  224|  90.2k|			hash_update_ssq(hash, oldlen, newlen);
  ------------------
  |  |   71|  90.2k|	do {                                                                   \
  |  |   72|  90.2k|		int _adjust = (new + old) * (new - old);                       \
  |  |   73|  90.2k|		if (_adjust < 0)                                               \
  |  |  ------------------
  |  |  |  Branch (73:7): [True: 90.2k, False: 0]
  |  |  ------------------
  |  |   74|  90.2k|			atomic_fetch_sub_explicit(&hz->stats.ssq, -_adjust,    \
  |  |   75|  90.2k|						  memory_order_relaxed);       \
  |  |   76|  90.2k|		else                                                           \
  |  |   77|  90.2k|			atomic_fetch_add_explicit(&hz->stats.ssq, _adjust,     \
  |  |   78|      0|						  memory_order_relaxed);       \
  |  |   79|  90.2k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (79:11): [Folded, False: 90.2k]
  |  |  ------------------
  ------------------
  225|       |
  226|  90.2k|			ret = bucket->data;
  227|  90.2k|			XFREE(MTYPE_HASH_BUCKET, bucket);
  ------------------
  |  |  170|  90.2k|	do {                                                                   \
  |  |  171|  90.2k|		qfree(mtype, ptr);                                             \
  |  |  172|  90.2k|		ptr = NULL;                                                    \
  |  |  173|  90.2k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 90.2k]
  |  |  ------------------
  ------------------
  228|  90.2k|			hash->count--;
  229|  90.2k|			break;
  230|  90.2k|		}
  231|  1.80k|		pp = bucket;
  232|  1.80k|	}
  233|       |
  234|   102k|	frrtrace(3, frr_libfrr, hash_release, hash, data, ret);
  ------------------
  |  |   61|   102k|#define frrtrace(nargs, provider, name, ...) (void)0
  ------------------
  235|       |
  236|   102k|	return ret;
  237|   102k|}
hash_free:
  326|  30.0k|{
  327|  30.0k|	frr_with_mutex (&_hashes_mtx) {
  ------------------
  |  |  223|  30.0k|	for (pthread_mutex_t MACRO_REPEAT(_frr_with_mutex, ##__VA_ARGS__)      \
  |  |  ------------------
  |  |  |  |  173|  30.0k|	MACRO_VARIANT(_MACRO_REPEAT, ##__VA_ARGS__)(NAME, ##__VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  30.0k|	_CONCAT(NAME, _MACRO_VARIANT(0, ##__VA_ARGS__, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  141|  30.0k|#define _CONCAT(a, b) _CONCAT2(a,b)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  140|  30.0k|#define _CONCAT2(a, b) a ## b
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  156|  30.0k|	NAME(A1)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  223|  30.0k|	for (pthread_mutex_t MACRO_REPEAT(_frr_with_mutex, ##__VA_ARGS__)      \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  218|  30.0k|	*NAMECTR(_mtx_) __attribute__((                                        \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  219|  30.0k|		unused, cleanup(_frr_mtx_unlock))) = _frr_mtx_lock(mutex),     \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  145|  30.0k|			_10, _9, _8, _7, _6, _5, _4, _3, _2, _1, _0))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  224|  60.0k|	     *_once = NULL; _once == NULL; _once = (void *)1)                  \
  |  |  ------------------
  |  |  |  Branch (224:22): [True: 30.0k, False: 30.0k]
  |  |  ------------------
  ------------------
  328|  30.0k|		if (_hashes) {
  ------------------
  |  Branch (328:7): [True: 30.0k, False: 0]
  ------------------
  329|  30.0k|			listnode_delete(_hashes, hash);
  330|  30.0k|			if (_hashes->count == 0) {
  ------------------
  |  Branch (330:8): [True: 0, False: 30.0k]
  ------------------
  331|      0|				list_delete(&_hashes);
  332|      0|			}
  333|  30.0k|		}
  334|  30.0k|	}
  335|       |
  336|  30.0k|	XFREE(MTYPE_HASH, hash->name);
  ------------------
  |  |  170|  30.0k|	do {                                                                   \
  |  |  171|  30.0k|		qfree(mtype, ptr);                                             \
  |  |  172|  30.0k|		ptr = NULL;                                                    \
  |  |  173|  30.0k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 30.0k]
  |  |  ------------------
  ------------------
  337|       |
  338|  30.0k|	XFREE(MTYPE_HASH_INDEX, hash->index);
  ------------------
  |  |  170|  30.0k|	do {                                                                   \
  |  |  171|  30.0k|		qfree(mtype, ptr);                                             \
  |  |  172|  30.0k|		ptr = NULL;                                                    \
  |  |  173|  30.0k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 30.0k]
  |  |  ------------------
  ------------------
  339|       |	XFREE(MTYPE_HASH, hash);
  ------------------
  |  |  170|  30.0k|	do {                                                                   \
  |  |  171|  30.0k|		qfree(mtype, ptr);                                             \
  |  |  172|  30.0k|		ptr = NULL;                                                    \
  |  |  173|  30.0k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 30.0k]
  |  |  ------------------
  ------------------
  340|  30.0k|}
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|}
hash.c:hash_expand:
   83|      1|{
   84|      1|	unsigned int i, new_size;
   85|      1|	struct hash_bucket *hb, *hbnext, **new_index;
   86|       |
   87|      1|	new_size = hash->size * 2;
   88|       |
   89|      1|	if (hash->max_size && new_size > hash->max_size)
  ------------------
  |  Branch (89:6): [True: 0, False: 1]
  |  Branch (89:24): [True: 0, False: 0]
  ------------------
   90|      0|		return;
   91|       |
   92|      1|	new_index = XCALLOC(MTYPE_HASH_INDEX,
  ------------------
  |  |  165|      1|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
   93|      1|			    sizeof(struct hash_bucket *) * new_size);
   94|       |
   95|      1|	hash->stats.empty = new_size;
   96|       |
   97|    257|	for (i = 0; i < hash->size; i++)
  ------------------
  |  Branch (97:14): [True: 256, False: 1]
  ------------------
   98|    512|		for (hb = hash->index[i]; hb; hb = hbnext) {
  ------------------
  |  Branch (98:29): [True: 256, False: 256]
  ------------------
   99|    256|			unsigned int h = hb->key & (new_size - 1);
  100|       |
  101|    256|			hbnext = hb->next;
  102|    256|			hb->next = new_index[h];
  103|       |
  104|    256|			int oldlen = hb->next ? hb->next->len : 0;
  ------------------
  |  Branch (104:17): [True: 52, False: 204]
  ------------------
  105|    256|			int newlen = oldlen + 1;
  106|       |
  107|    256|			if (newlen == 1)
  ------------------
  |  Branch (107:8): [True: 204, False: 52]
  ------------------
  108|    204|				hash->stats.empty--;
  109|     52|			else
  110|     52|				hb->next->len = 0;
  111|       |
  112|    256|			hb->len = newlen;
  113|       |
  114|    256|			hash_update_ssq(hash, oldlen, newlen);
  ------------------
  |  |   71|    256|	do {                                                                   \
  |  |   72|    256|		int _adjust = (new + old) * (new - old);                       \
  |  |   73|    256|		if (_adjust < 0)                                               \
  |  |  ------------------
  |  |  |  Branch (73:7): [True: 0, False: 256]
  |  |  ------------------
  |  |   74|    256|			atomic_fetch_sub_explicit(&hz->stats.ssq, -_adjust,    \
  |  |   75|      0|						  memory_order_relaxed);       \
  |  |   76|    256|		else                                                           \
  |  |   77|    256|			atomic_fetch_add_explicit(&hz->stats.ssq, _adjust,     \
  |  |   78|    256|						  memory_order_relaxed);       \
  |  |   79|    256|	} while (0)
  |  |  ------------------
  |  |  |  Branch (79:11): [Folded, False: 256]
  |  |  ------------------
  ------------------
  115|       |
  116|    256|			new_index[h] = hb;
  117|    256|		}
  118|       |
  119|       |	/* Switch to new table */
  120|       |	XFREE(MTYPE_HASH_INDEX, hash->index);
  ------------------
  |  |  170|      1|	do {                                                                   \
  |  |  171|      1|		qfree(mtype, ptr);                                             \
  |  |  172|      1|		ptr = NULL;                                                    \
  |  |  173|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  121|      1|	hash->size = new_size;
  122|      1|	hash->index = new_index;
  123|      1|}

_hook_register:
   20|     18|{
   21|     18|	struct hookent *he, **pos;
   22|       |
   23|     18|	if (!stackent->ent_used)
  ------------------
  |  Branch (23:6): [True: 18, False: 0]
  ------------------
   24|     18|		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|     18|	he->ent_used = true;
   30|     18|	he->hookfn = funcptr;
   31|     18|	he->hookarg = arg;
   32|     18|	he->has_arg = has_arg;
   33|     18|	he->module = module;
   34|     18|	he->fnname = funcname;
   35|     18|	he->priority = priority;
   36|       |
   37|     19|	for (pos = &hook->entries; *pos; pos = &(*pos)->next)
  ------------------
  |  Branch (37:29): [True: 3, False: 16]
  ------------------
   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|     18|	he->next = *pos;
   43|     18|	*pos = he;
   44|     18|}

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|      2|	{                                                                      \
  214|      2|		int hooksum = 0;                                               \
  215|      2|		struct hookent *he = _hook_##hookname.entries;                 \
  216|      2|		void *hookarg;                                                 \
  217|      2|		union {                                                        \
  218|      2|			void *voidptr;                                         \
  219|      2|			int(*fptr) HOOK_VOIDIFY arglist;                       \
  220|      2|			int(*farg) HOOK_ADDDEF arglist;                        \
  221|      2|		} hookp;                                                       \
  222|      2|		for (; he; he = he->next) {                                    \
  ------------------
  |  Branch (222:10): [True: 0, False: 2]
  ------------------
  223|      0|			hookarg = he->hookarg;                                 \
  224|      0|			hookp.voidptr = he->hookfn;                            \
  225|      0|			if (!he->has_arg)                                      \
  ------------------
  |  Branch (225:8): [True: 0, False: 0]
  ------------------
  226|      0|				hooksum += hookp.fptr passlist;                \
  227|      0|			else                                                   \
  228|      0|				hooksum += hookp.farg HOOK_ADDARG passlist;    \
  ------------------
  |  |  173|      0|#define HOOK_ADDARG(...) (hookarg , ## __VA_ARGS__)
  ------------------
  229|      0|		}                                                              \
  230|      2|		return hooksum;                                                \
  231|      2|	}                                                                      \
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|      4|{
   65|      4|	unsigned int l1, l2;
   66|      4|	long int x1, x2;
   67|      4|	int res;
   68|       |
   69|      4|	while (*p1 && *p2) {
  ------------------
  |  Branch (69:9): [True: 2, False: 2]
  |  Branch (69:16): [True: 2, False: 0]
  ------------------
   70|      2|		char *tmp1, *tmp2;
   71|       |
   72|       |		/* look up to any number */
   73|      2|		l1 = strcspn(p1, "0123456789");
   74|      2|		l2 = strcspn(p2, "0123456789");
   75|       |
   76|       |		/* name lengths are different -> compare names */
   77|      2|		if (l1 != l2)
  ------------------
  |  Branch (77:7): [True: 2, False: 0]
  ------------------
   78|      2|			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|      2|	if (*p1)
  ------------------
  |  Branch (123:6): [True: 0, False: 2]
  ------------------
  124|      0|		return 1;
  125|      2|	if (*p2)
  ------------------
  |  Branch (125:6): [True: 2, False: 0]
  ------------------
  126|      2|		return -1;
  127|      0|	return 0;
  128|      2|}
if_create_name:
  215|      2|{
  216|      2|	struct interface *ifp;
  217|       |
  218|      2|	ifp = if_new(vrf);
  219|       |
  220|      2|	if_set_name(ifp, name);
  221|       |
  222|      2|	hook_call(if_add, ifp);
  ------------------
  |  |  169|      2|#define hook_call(hookname, ...) hook_call_##hookname(__VA_ARGS__)
  ------------------
  223|      2|	return ifp;
  224|      2|}
if_lookup_by_name_vrf:
  382|      2|{
  383|      2|	struct interface if_tmp;
  384|       |
  385|      2|	if (!name || strnlen(name, INTERFACE_NAMSIZ) == INTERFACE_NAMSIZ)
  ------------------
  |  |   92|      2|#define INTERFACE_NAMSIZ      IFNAMSIZ
  ------------------
              	if (!name || strnlen(name, INTERFACE_NAMSIZ) == INTERFACE_NAMSIZ)
  ------------------
  |  |   92|      2|#define INTERFACE_NAMSIZ      IFNAMSIZ
  ------------------
  |  Branch (385:6): [True: 0, False: 2]
  |  Branch (385:15): [True: 0, False: 2]
  ------------------
  386|      0|		return NULL;
  387|       |
  388|      2|	strlcpy(if_tmp.name, name, sizeof(if_tmp.name));
  389|      2|	return RB_FIND(if_name_head, &vrf->ifaces_by_name, &if_tmp);
  ------------------
  |  |  511|      2|#define RB_FIND(_name, _head, _key)	_name##_RB_FIND(_head, _key)
  ------------------
  390|      2|}
if_lookup_address_local:
  437|  1.12k|{
  438|  1.12k|	struct vrf *vrf = vrf_lookup_by_id(vrf_id);
  439|  1.12k|	struct listnode *cnode;
  440|  1.12k|	struct interface *ifp, *best_down = NULL;
  441|  1.12k|	struct prefix *p;
  442|  1.12k|	struct connected *c;
  443|       |
  444|  1.12k|	if (family != AF_INET && family != AF_INET6)
  ------------------
  |  Branch (444:6): [True: 0, False: 1.12k]
  |  Branch (444:27): [True: 0, False: 0]
  ------------------
  445|      0|		return NULL;
  446|       |
  447|  2.24k|	FOR_ALL_INTERFACES (vrf, ifp) {
  ------------------
  |  |  372|  1.12k|	if (vrf)                                                               \
  |  |  ------------------
  |  |  |  Branch (372:6): [True: 1.12k, False: 0]
  |  |  ------------------
  |  |  373|  1.12k|		RB_FOREACH (ifp, if_name_head, &vrf->ifaces_by_name)
  |  |  ------------------
  |  |  |  |  529|  3.36k|	for ((_e) = RB_MIN(_name, (_head)); (_e) != NULL;                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  515|  1.12k|#define RB_MIN(_name, _head)		_name##_RB_MIN(_head)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (529:38): [True: 2.24k, False: 1.12k]
  |  |  |  |  ------------------
  |  |  |  |  530|  2.24k|	     (_e) = RB_NEXT(_name, (_e)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  517|  2.24k|#define RB_NEXT(_name, _elm)		_name##_RB_NEXT(_elm)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  448|  2.24k|		for (ALL_LIST_ELEMENTS_RO(ifp->connected, cnode, c)) {
  ------------------
  |  |  333|  2.24k|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|  2.24k|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 2.24k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|  3.36k|	(node) != NULL && ((data) = static_cast(data, listgetdata(node)), 1);  \
  |  |  ------------------
  |  |  |  |  204|  6.72k|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 1.12k, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 1.12k]
  |  |  |  |  |  Branch (204:28): [True: 1.12k, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 1.12k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (334:2): [True: 1.12k, False: 2.24k]
  |  |  |  Branch (334:20): [True: 1.12k, False: 0]
  |  |  ------------------
  |  |  335|  2.24k|	(node) = listnextnode(node), ((data) = NULL)
  |  |  ------------------
  |  |  |  |   49|  1.12k|#define listnextnode(X) ((X) ? ((X)->next) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:26): [True: 1.12k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  449|  1.12k|			p = c->address;
  450|       |
  451|  1.12k|			if (!p || p->family != family)
  ------------------
  |  Branch (451:8): [True: 0, False: 1.12k]
  |  Branch (451:14): [True: 0, False: 1.12k]
  ------------------
  452|      0|				continue;
  453|       |
  454|  1.12k|			if (family == AF_INET) {
  ------------------
  |  Branch (454:8): [True: 1.12k, False: 0]
  ------------------
  455|  1.12k|				if (!IPV4_ADDR_SAME(&p->u.prefix4,
  ------------------
  |  |  342|  1.12k|#define IPV4_ADDR_SAME(A,B)  ipv4_addr_same((A), (B))
  ------------------
  |  Branch (455:9): [True: 72, False: 1.04k]
  ------------------
  456|  1.12k|						    (struct in_addr *)src))
  457|     72|					continue;
  458|  1.12k|			} else if (family == AF_INET6) {
  ------------------
  |  Branch (458:15): [True: 0, False: 0]
  ------------------
  459|      0|				if (!IPV6_ADDR_SAME(&p->u.prefix6,
  ------------------
  |  |  363|      0|#define IPV6_ADDR_SAME(D,S)  (memcmp ((D), (S), IPV6_MAX_BYTELEN) == 0)
  |  |  ------------------
  |  |  |  |  360|      0|#define IPV6_MAX_BYTELEN    16
  |  |  ------------------
  ------------------
  |  Branch (459:9): [True: 0, False: 0]
  ------------------
  460|      0|						    (struct in6_addr *)src))
  461|      0|					continue;
  462|      0|			}
  463|       |
  464|  1.04k|			if (if_is_up(ifp))
  ------------------
  |  Branch (464:8): [True: 0, False: 1.04k]
  ------------------
  465|      0|				return ifp;
  466|  1.04k|			if (!best_down)
  ------------------
  |  Branch (466:8): [True: 1.04k, False: 0]
  ------------------
  467|  1.04k|				best_down = ifp;
  468|  1.04k|		}
  469|  2.24k|	}
  470|  1.12k|	return best_down;
  471|  1.12k|}
if_get_by_name:
  575|      2|{
  576|      2|	struct interface *ifp = NULL;
  577|      2|	struct vrf *vrf;
  578|       |
  579|      2|	switch (vrf_get_backend()) {
  580|      0|	case VRF_BACKEND_UNKNOWN:
  ------------------
  |  Branch (580:2): [True: 0, False: 2]
  ------------------
  581|      0|	case VRF_BACKEND_NETNS:
  ------------------
  |  Branch (581:2): [True: 0, False: 2]
  ------------------
  582|      0|		vrf = vrf_get(vrf_id, vrf_name);
  583|      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|	})
  ------------------
  584|       |
  585|      0|		ifp = if_lookup_by_name_vrf(name, vrf);
  586|      0|		if (ifp) {
  ------------------
  |  Branch (586:7): [True: 0, False: 0]
  ------------------
  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|      0|		break;
  597|      2|	case VRF_BACKEND_VRF_LITE:
  ------------------
  |  Branch (597:2): [True: 2, False: 0]
  ------------------
  598|      2|		ifp = if_lookup_by_name_all_vrf(name);
  599|      2|		if (ifp) {
  ------------------
  |  Branch (599:7): [True: 0, False: 2]
  ------------------
  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|      2|		vrf = vrf_get(vrf_id, vrf_name);
  610|      2|		assert(vrf);
  ------------------
  |  |   51|      2|	({                                                                     \
  |  |   52|      2|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|      2|			(used)) = {                                            \
  |  |   54|      2|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|      2|	{                                                                      \
  |  |  |  |  284|      2|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      2|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      2|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      2|		/* .func = */ func_,                                           \
  |  |  |  |  289|      2|	}                                                                      \
  |  |  ------------------
  |  |   55|      2|			.expr = #expr_,                                        \
  |  |   56|      2|		};                                                             \
  |  |   57|      2|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      2|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      2|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      2|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|      2|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 2]
  |  |  |  Branch (58:24): [True: 2, False: 0]
  |  |  ------------------
  |  |   59|      2|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|      2|	})
  ------------------
  611|       |
  612|      2|		break;
  613|      2|	default:
  ------------------
  |  Branch (613:2): [True: 0, False: 2]
  ------------------
  614|      0|		return NULL;
  615|      2|	}
  616|       |
  617|      2|	return if_create_name(name, vrf);
  618|      2|}
if_set_index:
  621|      1|{
  622|      1|	if (ifp->ifindex == ifindex)
  ------------------
  |  Branch (622:6): [True: 0, False: 1]
  ------------------
  623|      0|		return 0;
  624|       |
  625|       |	/*
  626|       |	 * If there is already an interface with this ifindex, we will collide
  627|       |	 * on insertion, so don't even try.
  628|       |	 */
  629|      1|	if (if_lookup_by_ifindex(ifindex, ifp->vrf->vrf_id))
  ------------------
  |  Branch (629:6): [True: 0, False: 1]
  ------------------
  630|      0|		return -1;
  631|       |
  632|      1|	if (ifp->ifindex != IFINDEX_INTERNAL)
  ------------------
  |  |  237|      1|#define IFINDEX_INTERNAL	0
  ------------------
  |  Branch (632:6): [True: 0, False: 1]
  ------------------
  633|      0|		IFINDEX_RB_REMOVE(ifp->vrf, ifp);
  ------------------
  |  |  359|      0|	({                                                                            \
  |  |  360|      0|		struct interface *_iz =                                               \
  |  |  361|      0|			RB_REMOVE(if_index_head, &v->ifaces_by_index, (ifp));         \
  |  |  ------------------
  |  |  |  |  510|      0|#define RB_REMOVE(_name, _head, _elm)	_name##_RB_REMOVE(_head, _elm)
  |  |  ------------------
  |  |  362|      0|		if (_iz == NULL)                                                      \
  |  |  ------------------
  |  |  |  Branch (362:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  363|      0|			flog_err(                                                     \
  |  |  ------------------
  |  |  |  |  136|      0|#define flog_err(ferr_id, format, ...) 0
  |  |  ------------------
  |  |  364|      0|				EC_LIB_INTERFACE,                                     \
  |  |  365|      0|				"%s(%u): corruption detected -- interface with this " \
  |  |  366|      0|				"ifindex doesn't exist in VRF %s!",                   \
  |  |  367|      0|				__func__, (ifp)->ifindex, (ifp)->vrf->name);          \
  |  |  368|      0|		_iz;                                                                  \
  |  |  369|      0|	})
  ------------------
  634|       |
  635|      1|	ifp->ifindex = ifindex;
  636|       |
  637|      1|	if (ifp->ifindex != IFINDEX_INTERNAL) {
  ------------------
  |  |  237|      1|#define IFINDEX_INTERNAL	0
  ------------------
  |  Branch (637:6): [True: 1, False: 0]
  ------------------
  638|       |		/*
  639|       |		 * This should never happen, since we checked if there was
  640|       |		 * already an interface with the desired ifindex at the top of
  641|       |		 * the function. Nevertheless.
  642|       |		 */
  643|      1|		if (IFINDEX_RB_INSERT(ifp->vrf, ifp))
  ------------------
  |  |  346|      1|	({                                                                            \
  |  |  ------------------
  |  |  |  Branch (346:2): [True: 0, False: 1]
  |  |  ------------------
  |  |  347|      1|		struct interface *_iz =                                               \
  |  |  348|      1|			RB_INSERT(if_index_head, &v->ifaces_by_index, (ifp));         \
  |  |  ------------------
  |  |  |  |  509|      1|#define RB_INSERT(_name, _head, _elm)	_name##_RB_INSERT(_head, _elm)
  |  |  ------------------
  |  |  349|      1|		if (_iz)                                                              \
  |  |  ------------------
  |  |  |  Branch (349:7): [True: 0, False: 1]
  |  |  ------------------
  |  |  350|      1|			flog_err(                                                     \
  |  |  ------------------
  |  |  |  |  136|      0|#define flog_err(ferr_id, format, ...) 0
  |  |  ------------------
  |  |  351|      1|				EC_LIB_INTERFACE,                                     \
  |  |  352|      1|				"%s(%u): corruption detected -- interface with this " \
  |  |  353|      1|				"ifindex exists already in VRF %s!",                  \
  |  |  354|      1|				__func__, (ifp)->ifindex, (ifp)->vrf->name);          \
  |  |  355|      1|		_iz;                                                                  \
  |  |  356|      1|	})
  ------------------
  644|      0|			return -1;
  645|      1|	}
  646|       |
  647|      1|	return 0;
  648|      1|}
if_is_up:
  666|  1.04k|{
  667|       |	return ifp->flags & IFF_UP;
  668|  1.04k|}
if_is_loopback_exact:
  700|    300|{
  701|       |	/* XXX: Do this better, eg what if IFF_WHATEVER means X on platform M
  702|       |	 * but Y on platform N?
  703|       |	 */
  704|    300|	return (ifp->flags & (IFF_LOOPBACK | IFF_NOXMIT | IFF_VIRTUAL));
  ------------------
  |  |  487|    300|#define IFF_NOXMIT 0x0
  ------------------
              	return (ifp->flags & (IFF_LOOPBACK | IFF_NOXMIT | IFF_VIRTUAL));
  ------------------
  |  |  499|    300|#define IFF_VIRTUAL 0x0
  ------------------
  705|    300|}
if_is_vrf:
  709|    300|{
  710|    300|	return CHECK_FLAG(ifp->status, ZEBRA_INTERFACE_VRF_LOOPBACK);
  ------------------
  |  |  394|    300|#define CHECK_FLAG(V,F)      ((V) & (F))
  ------------------
  711|    300|}
if_is_loopback:
  715|    300|{
  716|    300|	if (if_is_loopback_exact(ifp) || if_is_vrf(ifp))
  ------------------
  |  Branch (716:6): [True: 0, False: 300]
  |  Branch (716:35): [True: 0, False: 300]
  ------------------
  717|      0|		return true;
  718|       |
  719|    300|	return false;
  720|    300|}
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_cmd_init:
 1464|      1|{
 1465|      1|	cmd_variable_handler_register(if_var_handlers);
 1466|       |
 1467|      1|	interface_node.config_write = config_write;
 1468|      1|	install_node(&interface_node);
 1469|       |
 1470|      1|	install_element(CONFIG_NODE, &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]
  |  |  ------------------
  ------------------
 1471|      1|	install_element(CONFIG_NODE, &no_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]
  |  |  ------------------
  ------------------
 1472|       |
 1473|      1|	install_default(INTERFACE_NODE);
 1474|      1|	install_element(INTERFACE_NODE, &interface_desc_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1475|      1|	install_element(INTERFACE_NODE, &no_interface_desc_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1476|      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_cmp_func:
  132|      2|{
  133|      2|	return if_cmp_name_func(ifp1->name, ifp2->name);
  134|      2|}
if.c:if_new:
  156|      2|{
  157|      2|	struct interface *ifp;
  158|       |
  159|      2|	assert(vrf);
  ------------------
  |  |   51|      2|	({                                                                     \
  |  |   52|      2|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|      2|			(used)) = {                                            \
  |  |   54|      2|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|      2|	{                                                                      \
  |  |  |  |  284|      2|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      2|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      2|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      2|		/* .func = */ func_,                                           \
  |  |  |  |  289|      2|	}                                                                      \
  |  |  ------------------
  |  |   55|      2|			.expr = #expr_,                                        \
  |  |   56|      2|		};                                                             \
  |  |   57|      2|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      2|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      2|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      2|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|      2|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 2]
  |  |  |  Branch (58:24): [True: 2, False: 0]
  |  |  ------------------
  |  |   59|      2|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|      2|	})
  ------------------
  160|       |
  161|      2|	ifp = XCALLOC(MTYPE_IF, sizeof(struct interface));
  ------------------
  |  |  165|      2|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  162|       |
  163|      2|	ifp->ifindex = IFINDEX_INTERNAL;
  ------------------
  |  |  237|      2|#define IFINDEX_INTERNAL	0
  ------------------
  164|      2|	ifp->name[0] = '\0';
  165|       |
  166|      2|	ifp->vrf = vrf;
  167|       |
  168|      2|	ifp->connected = list_new();
  169|      2|	ifp->connected->del = ifp_connected_free;
  170|       |
  171|      2|	ifp->nbr_connected = list_new();
  172|      2|	ifp->nbr_connected->del = (void (*)(void *))nbr_connected_free;
  173|       |
  174|       |	/* Enable Link-detection by default */
  175|      2|	SET_FLAG(ifp->status, ZEBRA_INTERFACE_LINKDETECTION);
  ------------------
  |  |  395|      2|#define SET_FLAG(V,F)        (V) |= (F)
  ------------------
  176|       |
  177|      2|	QOBJ_REG(ifp, interface);
  ------------------
  |  |   88|      2|#define QOBJ_REG(n, structname) qobj_reg(&n->qobj_node, &qobj_t_##structname)
  ------------------
  178|      2|	return ifp;
  179|      2|}
if.c:if_lookup_by_ifindex:
  290|      1|{
  291|      1|	struct vrf *vrf;
  292|      1|	struct interface if_tmp;
  293|       |
  294|      1|	vrf = vrf_lookup_by_id(vrf_id);
  295|      1|	if (!vrf)
  ------------------
  |  Branch (295:6): [True: 0, False: 1]
  ------------------
  296|      0|		return NULL;
  297|       |
  298|      1|	if_tmp.ifindex = ifindex;
  299|      1|	return RB_FIND(if_index_head, &vrf->ifaces_by_index, &if_tmp);
  ------------------
  |  |  511|      1|#define RB_FIND(_name, _head, _key)	_name##_RB_FIND(_head, _key)
  ------------------
  300|      1|}
if.c:if_lookup_by_name_all_vrf:
  393|      2|{
  394|      2|	struct vrf *vrf;
  395|      2|	struct interface *ifp;
  396|       |
  397|      2|	if (!name || strnlen(name, INTERFACE_NAMSIZ) == INTERFACE_NAMSIZ)
  ------------------
  |  |   92|      2|#define INTERFACE_NAMSIZ      IFNAMSIZ
  ------------------
              	if (!name || strnlen(name, INTERFACE_NAMSIZ) == INTERFACE_NAMSIZ)
  ------------------
  |  |   92|      2|#define INTERFACE_NAMSIZ      IFNAMSIZ
  ------------------
  |  Branch (397:6): [True: 0, False: 2]
  |  Branch (397:15): [True: 0, False: 2]
  ------------------
  398|      0|		return NULL;
  399|       |
  400|      2|	RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) {
  ------------------
  |  |  529|      4|	for ((_e) = RB_MIN(_name, (_head)); (_e) != NULL;                      \
  |  |  ------------------
  |  |  |  |  515|      2|#define RB_MIN(_name, _head)		_name##_RB_MIN(_head)
  |  |  ------------------
  |  |  |  Branch (529:38): [True: 2, False: 2]
  |  |  ------------------
  |  |  530|      2|	     (_e) = RB_NEXT(_name, (_e)))
  |  |  ------------------
  |  |  |  |  517|      2|#define RB_NEXT(_name, _elm)		_name##_RB_NEXT(_elm)
  |  |  ------------------
  ------------------
  401|      2|		ifp = if_lookup_by_name_vrf(name, vrf);
  402|      2|		if (ifp)
  ------------------
  |  Branch (402:7): [True: 0, False: 2]
  ------------------
  403|      0|			return ifp;
  404|      2|	}
  405|       |
  406|      2|	return NULL;
  407|      2|}
if.c:if_set_name:
  651|      2|{
  652|      2|	if (if_cmp_name_func(ifp->name, name) == 0)
  ------------------
  |  Branch (652:6): [True: 0, False: 2]
  ------------------
  653|      0|		return;
  654|       |
  655|      2|	if (ifp->name[0] != '\0')
  ------------------
  |  Branch (655:6): [True: 0, False: 2]
  ------------------
  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|      2|	strlcpy(ifp->name, name, sizeof(ifp->name));
  659|       |
  660|      2|	if (ifp->name[0] != '\0')
  ------------------
  |  Branch (660:6): [True: 2, False: 0]
  ------------------
  661|      2|		IFNAME_RB_INSERT(ifp->vrf, ifp);
  ------------------
  |  |  319|      2|	({                                                                            \
  |  |  320|      2|		struct interface *_iz =                                               \
  |  |  321|      2|			RB_INSERT(if_name_head, &v->ifaces_by_name, (ifp));           \
  |  |  ------------------
  |  |  |  |  509|      2|#define RB_INSERT(_name, _head, _elm)	_name##_RB_INSERT(_head, _elm)
  |  |  ------------------
  |  |  322|      2|		if (_iz)                                                              \
  |  |  ------------------
  |  |  |  Branch (322:7): [True: 0, False: 2]
  |  |  ------------------
  |  |  323|      2|			flog_err(                                                     \
  |  |  ------------------
  |  |  |  |  136|      0|#define flog_err(ferr_id, format, ...) 0
  |  |  ------------------
  |  |  324|      2|				EC_LIB_INTERFACE,                                     \
  |  |  325|      2|				"%s(%s): corruption detected -- interface with this " \
  |  |  326|      2|				"name exists already in VRF %s!",                     \
  |  |  327|      2|				__func__, (ifp)->name, (ifp)->vrf->name);             \
  |  |  328|      2|		_iz;                                                                  \
  |  |  329|      2|	})
  ------------------
  662|      2|}

pim_bsm.c:if_address_is_local:
  528|  1.06k|{
  529|       |	return if_lookup_address_local(matchaddr, family, vrf_id) != NULL;
  530|  1.06k|}
pim_register.c:if_address_is_local:
  528|     59|{
  529|       |	return if_lookup_address_local(matchaddr, family, vrf_id) != NULL;
  530|     59|}

jhash:
   64|   535k|{
   65|   535k|	uint32_t a, b, c, len;
   66|   535k|	const uint8_t *k = key;
   67|       |
   68|   535k|	len = length;
   69|   535k|	a = b = JHASH_GOLDEN_RATIO;
  ------------------
  |  |   24|   535k|#define JHASH_GOLDEN_RATIO  0x9e3779b9
  ------------------
   70|   535k|	c = initval;
   71|       |
   72|   546k|	while (len >= 12) {
  ------------------
  |  Branch (72:9): [True: 11.0k, False: 535k]
  ------------------
   73|  11.0k|		a += (k[0] + ((uint32_t)k[1] << 8) + ((uint32_t)k[2] << 16)
   74|  11.0k|		      + ((uint32_t)k[3] << 24));
   75|  11.0k|		b += (k[4] + ((uint32_t)k[5] << 8) + ((uint32_t)k[6] << 16)
   76|  11.0k|		      + ((uint32_t)k[7] << 24));
   77|  11.0k|		c += (k[8] + ((uint32_t)k[9] << 8) + ((uint32_t)k[10] << 16)
   78|  11.0k|		      + ((uint32_t)k[11] << 24));
   79|       |
   80|  11.0k|		__jhash_mix(a, b, c);
  ------------------
  |  |   28|  11.0k|	{                                                                      \
  |  |   29|  11.0k|		a -= b;                                                        \
  |  |   30|  11.0k|		a -= c;                                                        \
  |  |   31|  11.0k|		a ^= (c >> 13);                                                \
  |  |   32|  11.0k|		b -= c;                                                        \
  |  |   33|  11.0k|		b -= a;                                                        \
  |  |   34|  11.0k|		b ^= (a << 8);                                                 \
  |  |   35|  11.0k|		c -= a;                                                        \
  |  |   36|  11.0k|		c -= b;                                                        \
  |  |   37|  11.0k|		c ^= (b >> 13);                                                \
  |  |   38|  11.0k|		a -= b;                                                        \
  |  |   39|  11.0k|		a -= c;                                                        \
  |  |   40|  11.0k|		a ^= (c >> 12);                                                \
  |  |   41|  11.0k|		b -= c;                                                        \
  |  |   42|  11.0k|		b -= a;                                                        \
  |  |   43|  11.0k|		b ^= (a << 16);                                                \
  |  |   44|  11.0k|		c -= a;                                                        \
  |  |   45|  11.0k|		c -= b;                                                        \
  |  |   46|  11.0k|		c ^= (b >> 5);                                                 \
  |  |   47|  11.0k|		a -= b;                                                        \
  |  |   48|  11.0k|		a -= c;                                                        \
  |  |   49|  11.0k|		a ^= (c >> 3);                                                 \
  |  |   50|  11.0k|		b -= c;                                                        \
  |  |   51|  11.0k|		b -= a;                                                        \
  |  |   52|  11.0k|		b ^= (a << 10);                                                \
  |  |   53|  11.0k|		c -= a;                                                        \
  |  |   54|  11.0k|		c -= b;                                                        \
  |  |   55|  11.0k|		c ^= (b >> 15);                                                \
  |  |   56|  11.0k|	}
  ------------------
   81|       |
   82|  11.0k|		k += 12;
   83|  11.0k|		len -= 12;
   84|  11.0k|	}
   85|       |
   86|   535k|	c += length;
   87|   535k|	switch (len) {
  ------------------
  |  Branch (87:10): [True: 524k, False: 11.0k]
  ------------------
   88|  69.0k|	case 11:
  ------------------
  |  Branch (88:2): [True: 69.0k, False: 466k]
  ------------------
   89|  69.0k|		c += ((uint32_t)k[10] << 24);
   90|       |	/* fallthru */
   91|  73.0k|	case 10:
  ------------------
  |  Branch (91:2): [True: 4.02k, False: 531k]
  ------------------
   92|  73.0k|		c += ((uint32_t)k[9] << 16);
   93|       |	/* fallthru */
   94|   483k|	case 9:
  ------------------
  |  Branch (94:2): [True: 410k, False: 124k]
  ------------------
   95|   483k|		c += ((uint32_t)k[8] << 8);
   96|       |	/* fallthru */
   97|   524k|	case 8:
  ------------------
  |  Branch (97:2): [True: 40.5k, False: 494k]
  ------------------
   98|   524k|		b += ((uint32_t)k[7] << 24);
   99|       |	/* fallthru */
  100|   524k|	case 7:
  ------------------
  |  Branch (100:2): [True: 0, False: 535k]
  ------------------
  101|   524k|		b += ((uint32_t)k[6] << 16);
  102|       |	/* fallthru */
  103|   524k|	case 6:
  ------------------
  |  Branch (103:2): [True: 0, False: 535k]
  ------------------
  104|   524k|		b += ((uint32_t)k[5] << 8);
  105|       |	/* fallthru */
  106|   524k|	case 5:
  ------------------
  |  Branch (106:2): [True: 0, False: 535k]
  ------------------
  107|   524k|		b += k[4];
  108|       |	/* fallthru */
  109|   524k|	case 4:
  ------------------
  |  Branch (109:2): [True: 0, False: 535k]
  ------------------
  110|   524k|		a += ((uint32_t)k[3] << 24);
  111|       |	/* fallthru */
  112|   524k|	case 3:
  ------------------
  |  Branch (112:2): [True: 0, False: 535k]
  ------------------
  113|   524k|		a += ((uint32_t)k[2] << 16);
  114|       |	/* fallthru */
  115|   524k|	case 2:
  ------------------
  |  Branch (115:2): [True: 0, False: 535k]
  ------------------
  116|   524k|		a += ((uint32_t)k[1] << 8);
  117|       |	/* fallthru */
  118|   524k|	case 1:
  ------------------
  |  Branch (118:2): [True: 0, False: 535k]
  ------------------
  119|   524k|		a += k[0];
  120|   535k|	}
  121|       |
  122|   535k|	__jhash_mix(a, b, c);
  ------------------
  |  |   28|   535k|	{                                                                      \
  |  |   29|   535k|		a -= b;                                                        \
  |  |   30|   535k|		a -= c;                                                        \
  |  |   31|   535k|		a ^= (c >> 13);                                                \
  |  |   32|   535k|		b -= c;                                                        \
  |  |   33|   535k|		b -= a;                                                        \
  |  |   34|   535k|		b ^= (a << 8);                                                 \
  |  |   35|   535k|		c -= a;                                                        \
  |  |   36|   535k|		c -= b;                                                        \
  |  |   37|   535k|		c ^= (b >> 13);                                                \
  |  |   38|   535k|		a -= b;                                                        \
  |  |   39|   535k|		a -= c;                                                        \
  |  |   40|   535k|		a ^= (c >> 12);                                                \
  |  |   41|   535k|		b -= c;                                                        \
  |  |   42|   535k|		b -= a;                                                        \
  |  |   43|   535k|		b ^= (a << 16);                                                \
  |  |   44|   535k|		c -= a;                                                        \
  |  |   45|   535k|		c -= b;                                                        \
  |  |   46|   535k|		c ^= (b >> 5);                                                 \
  |  |   47|   535k|		a -= b;                                                        \
  |  |   48|   535k|		a -= c;                                                        \
  |  |   49|   535k|		a ^= (c >> 3);                                                 \
  |  |   50|   535k|		b -= c;                                                        \
  |  |   51|   535k|		b -= a;                                                        \
  |  |   52|   535k|		b ^= (a << 10);                                                \
  |  |   53|   535k|		c -= a;                                                        \
  |  |   54|   535k|		c -= b;                                                        \
  |  |   55|   535k|		c ^= (b >> 15);                                                \
  |  |   56|   535k|	}
  ------------------
  123|       |
  124|   535k|	return c;
  125|   535k|}
jhash2:
  132|   226k|{
  133|   226k|	uint32_t a, b, c, len;
  134|       |
  135|   226k|	a = b = JHASH_GOLDEN_RATIO;
  ------------------
  |  |   24|   226k|#define JHASH_GOLDEN_RATIO  0x9e3779b9
  ------------------
  136|   226k|	c = initval;
  137|   226k|	len = length;
  138|       |
  139|   226k|	while (len >= 3) {
  ------------------
  |  Branch (139:9): [True: 0, False: 226k]
  ------------------
  140|      0|		a += k[0];
  141|      0|		b += k[1];
  142|      0|		c += k[2];
  143|      0|		__jhash_mix(a, b, c);
  ------------------
  |  |   28|      0|	{                                                                      \
  |  |   29|      0|		a -= b;                                                        \
  |  |   30|      0|		a -= c;                                                        \
  |  |   31|      0|		a ^= (c >> 13);                                                \
  |  |   32|      0|		b -= c;                                                        \
  |  |   33|      0|		b -= a;                                                        \
  |  |   34|      0|		b ^= (a << 8);                                                 \
  |  |   35|      0|		c -= a;                                                        \
  |  |   36|      0|		c -= b;                                                        \
  |  |   37|      0|		c ^= (b >> 13);                                                \
  |  |   38|      0|		a -= b;                                                        \
  |  |   39|      0|		a -= c;                                                        \
  |  |   40|      0|		a ^= (c >> 12);                                                \
  |  |   41|      0|		b -= c;                                                        \
  |  |   42|      0|		b -= a;                                                        \
  |  |   43|      0|		b ^= (a << 16);                                                \
  |  |   44|      0|		c -= a;                                                        \
  |  |   45|      0|		c -= b;                                                        \
  |  |   46|      0|		c ^= (b >> 5);                                                 \
  |  |   47|      0|		a -= b;                                                        \
  |  |   48|      0|		a -= c;                                                        \
  |  |   49|      0|		a ^= (c >> 3);                                                 \
  |  |   50|      0|		b -= c;                                                        \
  |  |   51|      0|		b -= a;                                                        \
  |  |   52|      0|		b ^= (a << 10);                                                \
  |  |   53|      0|		c -= a;                                                        \
  |  |   54|      0|		c -= b;                                                        \
  |  |   55|      0|		c ^= (b >> 15);                                                \
  |  |   56|      0|	}
  ------------------
  144|      0|		k += 3;
  145|      0|		len -= 3;
  146|      0|	}
  147|       |
  148|   226k|	c += length * 4;
  149|       |
  150|   226k|	switch (len) {
  ------------------
  |  Branch (150:10): [True: 226k, False: 0]
  ------------------
  151|   226k|	case 2:
  ------------------
  |  Branch (151:2): [True: 226k, False: 0]
  ------------------
  152|   226k|		b += k[1];
  153|       |	/* fallthru */
  154|   226k|	case 1:
  ------------------
  |  Branch (154:2): [True: 0, False: 226k]
  ------------------
  155|   226k|		a += k[0];
  156|   226k|	}
  157|       |
  158|   226k|	__jhash_mix(a, b, c);
  ------------------
  |  |   28|   226k|	{                                                                      \
  |  |   29|   226k|		a -= b;                                                        \
  |  |   30|   226k|		a -= c;                                                        \
  |  |   31|   226k|		a ^= (c >> 13);                                                \
  |  |   32|   226k|		b -= c;                                                        \
  |  |   33|   226k|		b -= a;                                                        \
  |  |   34|   226k|		b ^= (a << 8);                                                 \
  |  |   35|   226k|		c -= a;                                                        \
  |  |   36|   226k|		c -= b;                                                        \
  |  |   37|   226k|		c ^= (b >> 13);                                                \
  |  |   38|   226k|		a -= b;                                                        \
  |  |   39|   226k|		a -= c;                                                        \
  |  |   40|   226k|		a ^= (c >> 12);                                                \
  |  |   41|   226k|		b -= c;                                                        \
  |  |   42|   226k|		b -= a;                                                        \
  |  |   43|   226k|		b ^= (a << 16);                                                \
  |  |   44|   226k|		c -= a;                                                        \
  |  |   45|   226k|		c -= b;                                                        \
  |  |   46|   226k|		c ^= (b >> 5);                                                 \
  |  |   47|   226k|		a -= b;                                                        \
  |  |   48|   226k|		a -= c;                                                        \
  |  |   49|   226k|		a ^= (c >> 3);                                                 \
  |  |   50|   226k|		b -= c;                                                        \
  |  |   51|   226k|		b -= a;                                                        \
  |  |   52|   226k|		b ^= (a << 10);                                                \
  |  |   53|   226k|		c -= a;                                                        \
  |  |   54|   226k|		c -= b;                                                        \
  |  |   55|   226k|		c ^= (b >> 15);                                                \
  |  |   56|   226k|	}
  ------------------
  159|       |
  160|   226k|	return c;
  161|   226k|}
jhash_3words:
  172|   388k|{
  173|   388k|	a += JHASH_GOLDEN_RATIO;
  ------------------
  |  |   24|   388k|#define JHASH_GOLDEN_RATIO  0x9e3779b9
  ------------------
  174|   388k|	b += JHASH_GOLDEN_RATIO;
  ------------------
  |  |   24|   388k|#define JHASH_GOLDEN_RATIO  0x9e3779b9
  ------------------
  175|   388k|	c += initval;
  176|       |
  177|   388k|	__jhash_mix(a, b, c);
  ------------------
  |  |   28|   388k|	{                                                                      \
  |  |   29|   388k|		a -= b;                                                        \
  |  |   30|   388k|		a -= c;                                                        \
  |  |   31|   388k|		a ^= (c >> 13);                                                \
  |  |   32|   388k|		b -= c;                                                        \
  |  |   33|   388k|		b -= a;                                                        \
  |  |   34|   388k|		b ^= (a << 8);                                                 \
  |  |   35|   388k|		c -= a;                                                        \
  |  |   36|   388k|		c -= b;                                                        \
  |  |   37|   388k|		c ^= (b >> 13);                                                \
  |  |   38|   388k|		a -= b;                                                        \
  |  |   39|   388k|		a -= c;                                                        \
  |  |   40|   388k|		a ^= (c >> 12);                                                \
  |  |   41|   388k|		b -= c;                                                        \
  |  |   42|   388k|		b -= a;                                                        \
  |  |   43|   388k|		b ^= (a << 16);                                                \
  |  |   44|   388k|		c -= a;                                                        \
  |  |   45|   388k|		c -= b;                                                        \
  |  |   46|   388k|		c ^= (b >> 5);                                                 \
  |  |   47|   388k|		a -= b;                                                        \
  |  |   48|   388k|		a -= c;                                                        \
  |  |   49|   388k|		a ^= (c >> 3);                                                 \
  |  |   50|   388k|		b -= c;                                                        \
  |  |   51|   388k|		b -= a;                                                        \
  |  |   52|   388k|		b ^= (a << 10);                                                \
  |  |   53|   388k|		c -= a;                                                        \
  |  |   54|   388k|		c -= b;                                                        \
  |  |   55|   388k|		c ^= (b >> 15);                                                \
  |  |   56|   388k|	}
  ------------------
  178|       |
  179|   388k|	return c;
  180|   388k|}
jhash_1word:
  188|   388k|{
  189|   388k|	return jhash_3words(a, 0, 0, initval);
  190|   388k|}

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|      5|{
  956|      5|	return di ? di->cli_mode : FRR_CLI_CLASSIC;
  ------------------
  |  Branch (956:9): [True: 5, False: 0]
  ------------------
  957|      5|}
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|  74.3k|{
   49|  74.3k|	return XCALLOC(MTYPE_LINK_LIST, sizeof(struct list));
  ------------------
  |  |  165|  74.3k|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
   50|  74.3k|}
listnode_add:
   85|   161k|{
   86|   161k|	frrtrace(2, frr_libfrr, list_add, list, val);
  ------------------
  |  |   61|   161k|#define frrtrace(nargs, provider, name, ...) (void)0
  ------------------
   87|       |
   88|   161k|	struct listnode *node;
   89|       |
   90|   161k|	assert(val != NULL);
  ------------------
  |  |   51|   161k|	({                                                                     \
  |  |   52|   161k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|   161k|			(used)) = {                                            \
  |  |   54|   161k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|   161k|	{                                                                      \
  |  |  |  |  284|   161k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|   161k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|   161k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|   161k|		/* .func = */ func_,                                           \
  |  |  |  |  289|   161k|	}                                                                      \
  |  |  ------------------
  |  |   55|   161k|			.expr = #expr_,                                        \
  |  |   56|   161k|		};                                                             \
  |  |   57|   161k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|   161k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|   161k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|   161k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|   161k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 161k]
  |  |  |  Branch (58:24): [True: 161k, False: 0]
  |  |  ------------------
  |  |   59|   161k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|   161k|	})
  ------------------
   91|       |
   92|   161k|	node = listnode_new(list, val);
   93|       |
   94|   161k|	node->prev = list->tail;
   95|       |
   96|   161k|	if (list->head == NULL)
  ------------------
  |  Branch (96:6): [True: 9.17k, False: 152k]
  ------------------
   97|  9.17k|		list->head = node;
   98|   152k|	else
   99|   152k|		list->tail->next = node;
  100|   161k|	list->tail = node;
  101|       |
  102|   161k|	list->count++;
  103|       |
  104|   161k|	return node;
  105|   161k|}
listnode_add_sort:
  191|   111k|{
  192|   111k|	struct listnode *n;
  193|   111k|	struct listnode *new;
  194|       |
  195|   111k|	assert(val != NULL);
  ------------------
  |  |   51|   111k|	({                                                                     \
  |  |   52|   111k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|   111k|			(used)) = {                                            \
  |  |   54|   111k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|   111k|	{                                                                      \
  |  |  |  |  284|   111k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|   111k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|   111k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|   111k|		/* .func = */ func_,                                           \
  |  |  |  |  289|   111k|	}                                                                      \
  |  |  ------------------
  |  |   55|   111k|			.expr = #expr_,                                        \
  |  |   56|   111k|		};                                                             \
  |  |   57|   111k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|   111k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|   111k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|   111k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|   111k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 111k]
  |  |  |  Branch (58:24): [True: 111k, False: 0]
  |  |  ------------------
  |  |   59|   111k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|   111k|	})
  ------------------
  196|       |
  197|   111k|	new = listnode_new(list, val);
  198|   111k|	val = new->data;
  199|       |
  200|   111k|	if (list->cmp) {
  ------------------
  |  Branch (200:6): [True: 111k, False: 0]
  ------------------
  201|   690k|		for (n = list->head; n; n = n->next) {
  ------------------
  |  Branch (201:24): [True: 627k, False: 62.0k]
  ------------------
  202|   627k|			if ((*list->cmp)(val, n->data) < 0) {
  ------------------
  |  Branch (202:8): [True: 49.2k, False: 578k]
  ------------------
  203|  49.2k|				new->next = n;
  204|  49.2k|				new->prev = n->prev;
  205|       |
  206|  49.2k|				if (n->prev)
  ------------------
  |  Branch (206:9): [True: 23.7k, False: 25.4k]
  ------------------
  207|  23.7k|					n->prev->next = new;
  208|  25.4k|				else
  209|  25.4k|					list->head = new;
  210|  49.2k|				n->prev = new;
  211|  49.2k|				list->count++;
  212|  49.2k|				return;
  213|  49.2k|			}
  214|   627k|		}
  215|   111k|	}
  216|       |
  217|  62.0k|	new->prev = list->tail;
  218|       |
  219|  62.0k|	if (list->tail)
  ------------------
  |  Branch (219:6): [True: 581, False: 61.4k]
  ------------------
  220|    581|		list->tail->next = new;
  221|  61.4k|	else
  222|  61.4k|		list->head = new;
  223|       |
  224|  62.0k|	list->tail = new;
  225|  62.0k|	list->count++;
  226|  62.0k|}
listnode_delete:
  303|   268k|{
  304|   268k|	frrtrace(2, frr_libfrr, list_remove, list, val);
  ------------------
  |  |   61|   268k|#define frrtrace(nargs, provider, name, ...) (void)0
  ------------------
  305|       |
  306|   268k|	struct listnode *node = listnode_lookup(list, val);
  307|       |
  308|   268k|	if (node)
  ------------------
  |  Branch (308:6): [True: 267k, False: 407]
  ------------------
  309|   267k|		list_delete_node(list, node);
  310|   268k|}
list_delete_all_node:
  325|  72.7k|{
  326|  72.7k|	struct listnode *node;
  327|  72.7k|	struct listnode *next;
  328|       |
  329|  72.7k|	assert(list);
  ------------------
  |  |   51|  72.7k|	({                                                                     \
  |  |   52|  72.7k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  72.7k|			(used)) = {                                            \
  |  |   54|  72.7k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  72.7k|	{                                                                      \
  |  |  |  |  284|  72.7k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  72.7k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  72.7k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  72.7k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  72.7k|	}                                                                      \
  |  |  ------------------
  |  |   55|  72.7k|			.expr = #expr_,                                        \
  |  |   56|  72.7k|		};                                                             \
  |  |   57|  72.7k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  72.7k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  72.7k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  72.7k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  72.7k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 72.7k]
  |  |  |  Branch (58:24): [True: 72.7k, False: 0]
  |  |  ------------------
  |  |   59|  72.7k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  72.7k|	})
  ------------------
  330|  74.4k|	for (node = list->head; node; node = next) {
  ------------------
  |  Branch (330:26): [True: 1.69k, False: 72.7k]
  ------------------
  331|  1.69k|		next = node->next;
  332|  1.69k|		if (*list->del)
  ------------------
  |  Branch (332:7): [True: 1.69k, False: 0]
  ------------------
  333|  1.69k|			(*list->del)(node->data);
  334|  1.69k|		listnode_free(list, node);
  335|  1.69k|	}
  336|       |	list->head = list->tail = NULL;
  337|  72.7k|	list->count = 0;
  338|  72.7k|}
list_delete:
  341|  72.7k|{
  342|  72.7k|	assert(*list);
  ------------------
  |  |   51|  72.7k|	({                                                                     \
  |  |   52|  72.7k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  72.7k|			(used)) = {                                            \
  |  |   54|  72.7k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  72.7k|	{                                                                      \
  |  |  |  |  284|  72.7k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  72.7k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  72.7k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  72.7k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  72.7k|	}                                                                      \
  |  |  ------------------
  |  |   55|  72.7k|			.expr = #expr_,                                        \
  |  |   56|  72.7k|		};                                                             \
  |  |   57|  72.7k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  72.7k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  72.7k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  72.7k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  72.7k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 72.7k]
  |  |  |  Branch (58:24): [True: 72.7k, False: 0]
  |  |  ------------------
  |  |   59|  72.7k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  72.7k|	})
  ------------------
  343|  72.7k|	list_delete_all_node(*list);
  344|  72.7k|	list_free_internal(*list);
  345|       |	*list = NULL;
  346|  72.7k|}
listnode_lookup:
  349|   324k|{
  350|   324k|	struct listnode *node;
  351|       |
  352|   324k|	assert(list);
  ------------------
  |  |   51|   324k|	({                                                                     \
  |  |   52|   324k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|   324k|			(used)) = {                                            \
  |  |   54|   324k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|   324k|	{                                                                      \
  |  |  |  |  284|   324k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|   324k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|   324k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|   324k|		/* .func = */ func_,                                           \
  |  |  |  |  289|   324k|	}                                                                      \
  |  |  ------------------
  |  |   55|   324k|			.expr = #expr_,                                        \
  |  |   56|   324k|		};                                                             \
  |  |   57|   324k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|   324k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|   324k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|   324k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|   324k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 324k]
  |  |  |  Branch (58:24): [True: 324k, False: 0]
  |  |  ------------------
  |  |   59|   324k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|   324k|	})
  ------------------
  353|  12.7M|	for (node = listhead(list); node; node = listnextnode(node))
  ------------------
  |  |   51|   324k|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  ------------------
  |  |  |  Branch (51:22): [True: 324k, False: 0]
  |  |  ------------------
  ------------------
              	for (node = listhead(list); node; node = listnextnode(node))
  ------------------
  |  |   49|  12.4M|#define listnextnode(X) ((X) ? ((X)->next) : NULL)
  |  |  ------------------
  |  |  |  Branch (49:26): [True: 12.4M, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (353:30): [True: 12.7M, False: 33.0k]
  ------------------
  354|  12.7M|		if (data == listgetdata(node))
  ------------------
  |  |   58|  12.7M|#define listgetdata(X) (assert(X), assert((X)->data != NULL), (X)->data)
  |  |  ------------------
  |  |  |  |   51|  12.7M|	({                                                                     \
  |  |  |  |   52|  12.7M|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|  12.7M|			(used)) = {                                            \
  |  |  |  |   54|  12.7M|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|  12.7M|	{                                                                      \
  |  |  |  |  |  |  284|  12.7M|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|  12.7M|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|  12.7M|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|  12.7M|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|  12.7M|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|  12.7M|			.expr = #expr_,                                        \
  |  |  |  |   56|  12.7M|		};                                                             \
  |  |  |  |   57|  12.7M|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|  12.7M|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|  12.7M|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|  12.7M|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|  12.7M|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 12.7M]
  |  |  |  |  |  Branch (58:24): [True: 12.7M, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|  12.7M|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|  12.7M|	})
  |  |  ------------------
  |  |               #define listgetdata(X) (assert(X), assert((X)->data != NULL), (X)->data)
  |  |  ------------------
  |  |  |  |   51|  12.7M|	({                                                                     \
  |  |  |  |   52|  12.7M|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|  12.7M|			(used)) = {                                            \
  |  |  |  |   54|  12.7M|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|  12.7M|	{                                                                      \
  |  |  |  |  |  |  284|  12.7M|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|  12.7M|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|  12.7M|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|  12.7M|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|  12.7M|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|  12.7M|			.expr = #expr_,                                        \
  |  |  |  |   56|  12.7M|		};                                                             \
  |  |  |  |   57|  12.7M|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|  12.7M|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|  12.7M|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|  12.7M|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|  12.7M|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 12.7M]
  |  |  |  |  |  Branch (58:24): [True: 12.7M, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|  12.7M|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|  12.7M|	})
  |  |  ------------------
  ------------------
  |  Branch (354:7): [True: 291k, False: 12.4M]
  ------------------
  355|   291k|			return node;
  356|  33.0k|	return NULL;
  357|   324k|}
list_delete_node:
  367|   267k|{
  368|   267k|	frrtrace(2, frr_libfrr, list_delete_node, list, node);
  ------------------
  |  |   61|   267k|#define frrtrace(nargs, provider, name, ...) (void)0
  ------------------
  369|       |
  370|   267k|	if (node->prev)
  ------------------
  |  Branch (370:6): [True: 114k, False: 153k]
  ------------------
  371|   114k|		node->prev->next = node->next;
  372|   153k|	else
  373|   153k|		list->head = node->next;
  374|   267k|	if (node->next)
  ------------------
  |  Branch (374:6): [True: 134k, False: 133k]
  ------------------
  375|   134k|		node->next->prev = node->prev;
  376|   133k|	else
  377|   133k|		list->tail = node->prev;
  378|   267k|	list->count--;
  379|   267k|	listnode_free(list, node);
  380|   267k|}
linklist.c:listnode_new:
   61|   272k|{
   62|   272k|	struct listnode *node;
   63|       |
   64|       |	/* if listnode memory is managed by the app then the val
   65|       |	 * passed in is the listnode
   66|       |	 */
   67|   272k|	if (list->flags & LINKLIST_FLAG_NODE_MEM_BY_APP) {
  ------------------
  |  |   35|   272k|#define LINKLIST_FLAG_NODE_MEM_BY_APP (1 << 0)
  ------------------
  |  Branch (67:6): [True: 0, False: 272k]
  ------------------
   68|      0|		node = val;
   69|      0|		node->prev = node->next = NULL;
   70|   272k|	} else {
   71|   272k|		node = XCALLOC(MTYPE_LINK_NODE, sizeof(struct listnode));
  ------------------
  |  |  165|   272k|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
   72|   272k|		node->data = val;
   73|   272k|	}
   74|   272k|	return node;
   75|   272k|}
linklist.c:listnode_free:
   79|   269k|{
   80|   269k|	if (!(list->flags & LINKLIST_FLAG_NODE_MEM_BY_APP))
  ------------------
  |  |   35|   269k|#define LINKLIST_FLAG_NODE_MEM_BY_APP (1 << 0)
  ------------------
  |  Branch (80:6): [True: 269k, False: 0]
  ------------------
   81|       |		XFREE(MTYPE_LINK_NODE, node);
  ------------------
  |  |  170|   269k|	do {                                                                   \
  |  |  171|   269k|		qfree(mtype, ptr);                                             \
  |  |  172|   269k|		ptr = NULL;                                                    \
  |  |  173|   269k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 269k]
  |  |  ------------------
  ------------------
   82|   269k|}
linklist.c:list_free_internal:
   54|  72.7k|{
   55|       |	XFREE(MTYPE_LINK_LIST, l);
  ------------------
  |  |  170|  72.7k|	do {                                                                   \
  |  |  171|  72.7k|		qfree(mtype, ptr);                                             \
  |  |  172|  72.7k|		ptr = NULL;                                                    \
  |  |  173|  72.7k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 72.7k]
  |  |  ------------------
  ------------------
   56|  72.7k|}

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|   148k|{
  104|   148k|	return mt_checkalloc(mt, malloc(size), size);
  105|   148k|}
qcalloc:
  108|  1.27M|{
  109|  1.27M|	return mt_checkalloc(mt, calloc(size, 1), size);
  110|  1.27M|}
qrealloc:
  113|     30|{
  114|     30|	if (ptr)
  ------------------
  |  Branch (114:6): [True: 27, False: 3]
  ------------------
  115|     27|		mt_count_free(mt, ptr);
  116|     30|	return mt_checkalloc(mt, ptr ? realloc(ptr, size) : malloc(size), size);
  ------------------
  |  Branch (116:27): [True: 27, False: 3]
  ------------------
  117|     30|}
qstrdup:
  120|  30.4k|{
  121|  30.4k|	return str ? mt_checkalloc(mt, strdup(str), strlen(str) + 1) : NULL;
  ------------------
  |  Branch (121:9): [True: 30.4k, False: 0]
  ------------------
  122|  30.4k|}
qfree:
  131|  1.43M|{
  132|  1.43M|	if (ptr)
  ------------------
  |  Branch (132:6): [True: 1.43M, False: 2]
  ------------------
  133|  1.43M|		mt_count_free(mt, ptr);
  134|  1.43M|	free(ptr);
  135|  1.43M|}
memory.c:mt_checkalloc:
   88|  1.45M|{
   89|  1.45M|	frrtrace(3, frr_libfrr, memalloc, mt, ptr, size);
  ------------------
  |  |   61|  1.45M|#define frrtrace(nargs, provider, name, ...) (void)0
  ------------------
   90|       |
   91|  1.45M|	if (__builtin_expect(ptr == NULL, 0)) {
  ------------------
  |  Branch (91:6): [True: 0, False: 1.45M]
  ------------------
   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|  1.45M|	mt_count_alloc(mt, size, ptr);
   99|  1.45M|	return ptr;
  100|  1.45M|}
memory.c:mt_count_alloc:
   35|  1.45M|{
   36|  1.45M|	size_t current;
   37|  1.45M|	size_t oldsize;
   38|       |
   39|  1.45M|	current = 1 + atomic_fetch_add_explicit(&mt->n_alloc, 1,
   40|  1.45M|						memory_order_relaxed);
   41|       |
   42|  1.45M|	oldsize = atomic_load_explicit(&mt->n_max, memory_order_relaxed);
   43|  1.45M|	if (current > oldsize)
  ------------------
  |  Branch (43:6): [True: 16.6k, False: 1.43M]
  ------------------
   44|       |		/* note that this may fail, but approximation is sufficient */
   45|  1.45M|		atomic_compare_exchange_weak_explicit(&mt->n_max, &oldsize,
   46|  16.6k|						      current,
   47|  16.6k|						      memory_order_relaxed,
   48|  16.6k|						      memory_order_relaxed);
   49|       |
   50|  1.45M|	oldsize = atomic_load_explicit(&mt->size, memory_order_relaxed);
   51|  1.45M|	if (oldsize == 0)
  ------------------
  |  Branch (51:6): [True: 43, False: 1.45M]
  ------------------
   52|     43|		oldsize = atomic_exchange_explicit(&mt->size, size,
   53|     43|						   memory_order_relaxed);
   54|  1.45M|	if (oldsize != 0 && oldsize != size && oldsize != SIZE_VAR)
  ------------------
  |  |   30|   240k|#define SIZE_VAR ~0UL
  ------------------
  |  Branch (54:6): [True: 1.45M, False: 43]
  |  Branch (54:22): [True: 240k, False: 1.21M]
  |  Branch (54:41): [True: 11, False: 240k]
  ------------------
   55|  1.45M|		atomic_store_explicit(&mt->size, SIZE_VAR,
  ------------------
  |  |   30|     11|#define SIZE_VAR ~0UL
  ------------------
   56|     11|				      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|  1.45M|}
memory.c:mt_count_free:
   74|  1.43M|{
   75|  1.43M|	frrtrace(2, frr_libfrr, memfree, mt, ptr);
  ------------------
  |  |   61|  1.43M|#define frrtrace(nargs, provider, name, ...) (void)0
  ------------------
   76|       |
   77|  1.43M|	assert(mt->n_alloc);
  ------------------
  |  |   51|  1.43M|	({                                                                     \
  |  |   52|  1.43M|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  1.43M|			(used)) = {                                            \
  |  |   54|  1.43M|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  1.43M|	{                                                                      \
  |  |  |  |  284|  1.43M|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  1.43M|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  1.43M|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  1.43M|		/* .func = */ func_,                                           \
  |  |  |  |  289|  1.43M|	}                                                                      \
  |  |  ------------------
  |  |   55|  1.43M|			.expr = #expr_,                                        \
  |  |   56|  1.43M|		};                                                             \
  |  |   57|  1.43M|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  1.43M|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  1.43M|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  1.43M|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  1.43M|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 1.43M]
  |  |  |  Branch (58:24): [True: 1.43M, False: 0]
  |  |  ------------------
  |  |   59|  1.43M|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  1.43M|	})
  ------------------
   78|  1.43M|	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|  1.43M|}

pim_memory.c:_mginit_PIMD:
   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|	}                                                                      \

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|}

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

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|      5|{
 1844|      5|	_install_element(node, &show_config_candidate_section_cmd);
 1845|       |
 1846|      5|	if (frr_get_cli_mode() != FRR_CLI_TRANSACTIONAL)
  ------------------
  |  Branch (1846:6): [True: 5, False: 0]
  ------------------
 1847|      5|		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|}

frr_inet_ntop:
   81|   202k|{
   82|   202k|	const uint8_t *b = src;
   83|       |	/* 8 * "abcd:" for IPv6
   84|       |	 * note: the IPv4-embedded IPv6 syntax is only used for ::A.B.C.D,
   85|       |	 * which isn't longer than 40 chars either.  even with ::ffff:A.B.C.D
   86|       |	 * it's shorter.
   87|       |	 */
   88|   202k|	char buf[8 * 5], *o = buf;
   89|   202k|	size_t best = 0, bestlen = 0, curlen = 0, i;
   90|       |
   91|   202k|	switch (af) {
   92|   202k|	case AF_INET:
  ------------------
  |  Branch (92:2): [True: 202k, False: 0]
  ------------------
   93|   202k|inet4:
   94|   202k|		putbyte(b[0], &o);
   95|   202k|		*o++ = '.';
   96|   202k|		putbyte(b[1], &o);
   97|   202k|		*o++ = '.';
   98|   202k|		putbyte(b[2], &o);
   99|   202k|		*o++ = '.';
  100|   202k|		putbyte(b[3], &o);
  101|   202k|		*o++ = '\0';
  102|   202k|		break;
  103|      0|	case AF_INET6:
  ------------------
  |  Branch (103:2): [True: 0, False: 202k]
  ------------------
  104|      0|		for (i = 0; i < 8; i++) {
  ------------------
  |  Branch (104:15): [True: 0, False: 0]
  ------------------
  105|      0|			if (b[i * 2] || b[i * 2 + 1]) {
  ------------------
  |  Branch (105:8): [True: 0, False: 0]
  |  Branch (105:20): [True: 0, False: 0]
  ------------------
  106|      0|				if (curlen && curlen > bestlen) {
  ------------------
  |  Branch (106:9): [True: 0, False: 0]
  |  Branch (106:19): [True: 0, False: 0]
  ------------------
  107|      0|					best = i - curlen;
  108|      0|					bestlen = curlen;
  109|      0|				}
  110|      0|				curlen = 0;
  111|      0|				continue;
  112|      0|			}
  113|      0|			curlen++;
  114|      0|		}
  115|      0|		if (curlen && curlen > bestlen) {
  ------------------
  |  Branch (115:7): [True: 0, False: 0]
  |  Branch (115:17): [True: 0, False: 0]
  ------------------
  116|      0|			best = i - curlen;
  117|      0|			bestlen = curlen;
  118|      0|		}
  119|       |		/* do we want ::ffff:A.B.C.D? */
  120|      0|		if (best == 0 && bestlen == 6) {
  ------------------
  |  Branch (120:7): [True: 0, False: 0]
  |  Branch (120:20): [True: 0, False: 0]
  ------------------
  121|      0|			*o++ = ':';
  122|      0|			*o++ = ':';
  123|      0|			b += 12;
  124|      0|			goto inet4;
  125|      0|		}
  126|      0|		if (bestlen == 1)
  ------------------
  |  Branch (126:7): [True: 0, False: 0]
  ------------------
  127|      0|			bestlen = 0;
  128|       |
  129|      0|		for (i = 0; i < 8; i++) {
  ------------------
  |  Branch (129:15): [True: 0, False: 0]
  ------------------
  130|      0|			if (bestlen && i == best) {
  ------------------
  |  Branch (130:8): [True: 0, False: 0]
  |  Branch (130:19): [True: 0, False: 0]
  ------------------
  131|      0|				if (i == 0)
  ------------------
  |  Branch (131:9): [True: 0, False: 0]
  ------------------
  132|      0|					*o++ = ':';
  133|      0|				*o++ = ':';
  134|      0|				continue;
  135|      0|			}
  136|      0|			if (i > best && i < best + bestlen) {
  ------------------
  |  Branch (136:8): [True: 0, False: 0]
  |  Branch (136:20): [True: 0, False: 0]
  ------------------
  137|      0|				continue;
  138|      0|			}
  139|      0|			puthex((b[i * 2] << 8) | b[i * 2 + 1], &o);
  140|       |
  141|      0|			if (i < 7)
  ------------------
  |  Branch (141:8): [True: 0, False: 0]
  ------------------
  142|      0|				*o++ = ':';
  143|      0|		}
  144|      0|		*o++ = '\0';
  145|      0|		break;
  146|      0|	default:
  ------------------
  |  Branch (146:2): [True: 0, False: 202k]
  ------------------
  147|      0|		return NULL;
  148|   202k|	}
  149|       |
  150|   202k|	i = o - buf;
  151|   202k|	if (i > size)
  ------------------
  |  Branch (151:6): [True: 0, False: 202k]
  ------------------
  152|      0|		return NULL;
  153|       |	/* compiler might inline memcpy if it knows the length is short,
  154|       |	 * although neither gcc nor clang actually do this currently [2019]
  155|       |	 */
  156|   202k|	assume(i <= 8 * 5);
  157|   202k|	memcpy(dst, buf, i);
  158|   202k|	return dst;
  159|   202k|}
ntop.c:putbyte:
   28|   811k|{
   29|   811k|	bool zero = false;
   30|   811k|	int byte = bytex, tmp, a, b;
   31|       |
   32|   811k|	tmp = byte - 200;
   33|   811k|	if (tmp >= 0) {
  ------------------
  |  Branch (33:6): [True: 189k, False: 621k]
  ------------------
   34|   189k|		*pos++ = '2';
  ------------------
  |  |   22|   189k|#define pos (*posx)
  ------------------
   35|   189k|		zero = true;
   36|   189k|		byte = tmp;
   37|   621k|	} else {
   38|   621k|		tmp = byte - 100;
   39|   621k|		if (tmp >= 0) {
  ------------------
  |  Branch (39:7): [True: 169k, False: 451k]
  ------------------
   40|   169k|			*pos++ = '1';
  ------------------
  |  |   22|   169k|#define pos (*posx)
  ------------------
   41|   169k|			zero = true;
   42|   169k|			byte = tmp;
   43|   169k|		}
   44|   621k|	}
   45|       |
   46|       |	/* make sure the compiler knows the value range of "byte" */
   47|   811k|	assume(byte < 100 && byte >= 0);
   48|       |
   49|   811k|	b = byte % 10;
   50|   811k|	a = byte / 10;
   51|   811k|	if (a || zero) {
  ------------------
  |  Branch (51:6): [True: 611k, False: 199k]
  |  Branch (51:11): [True: 95.1k, False: 104k]
  ------------------
   52|   706k|		*pos++ = '0' + a;
  ------------------
  |  |   22|   706k|#define pos (*posx)
  ------------------
   53|   706k|		*pos++ = '0' + b;
  ------------------
  |  |   22|   706k|#define pos (*posx)
  ------------------
   54|   706k|	} else
   55|   104k|		*pos++ = '0' + b;
  ------------------
  |  |   22|   104k|#define pos (*posx)
  ------------------
   56|   811k|}

_rb_remove:
  357|  42.5k|{
  358|  42.5k|	struct rb_entry *rbe = rb_n2e(t, elm);
  359|  42.5k|	struct rb_entry *old;
  360|       |
  361|  42.5k|	old = rbe_remove(t, rbt, rbe);
  362|       |
  363|  42.5k|	return (old == NULL ? NULL : rb_e2n(t, old));
  ------------------
  |  Branch (363:10): [True: 0, False: 42.5k]
  ------------------
  364|  42.5k|}
_rb_insert:
  367|  43.2k|{
  368|  43.2k|	struct rb_entry *rbe = rb_n2e(t, elm);
  369|  43.2k|	struct rb_entry *tmp;
  370|  43.2k|	struct rb_entry *parent = NULL;
  371|  43.2k|	void *node;
  372|  43.2k|	int comp = 0;
  373|       |
  374|  43.2k|	tmp = RBH_ROOT(rbt);
  ------------------
  |  |   39|  43.2k|#define RBH_ROOT(_rbt)		(_rbt)->rbt_root
  ------------------
  375|   458k|	while (tmp != NULL) {
  ------------------
  |  Branch (375:9): [True: 415k, False: 43.2k]
  ------------------
  376|   415k|		parent = tmp;
  377|       |
  378|   415k|		node = rb_e2n(t, tmp);
  379|   415k|		comp = (*t->t_compare)(elm, node);
  380|   415k|		if (comp < 0)
  ------------------
  |  Branch (380:7): [True: 190k, False: 224k]
  ------------------
  381|   190k|			tmp = RBE_LEFT(tmp);
  ------------------
  |  |   34|   190k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  382|   224k|		else if (comp > 0)
  ------------------
  |  Branch (382:12): [True: 224k, False: 0]
  ------------------
  383|   224k|			tmp = RBE_RIGHT(tmp);
  ------------------
  |  |   35|   224k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  384|      0|		else
  385|      0|			return (node);
  386|   415k|	}
  387|       |
  388|  43.2k|	rbe_set(rbe, parent);
  389|       |
  390|  43.2k|	if (parent != NULL) {
  ------------------
  |  Branch (390:6): [True: 43.2k, False: 5]
  ------------------
  391|  43.2k|		if (comp < 0)
  ------------------
  |  Branch (391:7): [True: 15.4k, False: 27.8k]
  ------------------
  392|  15.4k|			RBE_LEFT(parent) = rbe;
  ------------------
  |  |   34|  15.4k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  393|  27.8k|		else
  394|  27.8k|			RBE_RIGHT(parent) = rbe;
  ------------------
  |  |   35|  27.8k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  395|       |
  396|  43.2k|		rbe_if_augment(t, parent);
  397|  43.2k|	} else
  398|      5|		RBH_ROOT(rbt) = rbe;
  ------------------
  |  |   39|      5|#define RBH_ROOT(_rbt)		(_rbt)->rbt_root
  ------------------
  399|       |
  400|  43.2k|	rbe_insert_color(t, rbt, rbe);
  401|       |
  402|       |	return NULL;
  403|  43.2k|}
_rb_find:
  408|   339k|{
  409|   339k|	struct rb_entry *tmp = RBH_ROOT(rbt);
  ------------------
  |  |   39|   339k|#define RBH_ROOT(_rbt)		(_rbt)->rbt_root
  ------------------
  410|   339k|	void *node;
  411|   339k|	int comp;
  412|       |
  413|  2.79M|	while (tmp != NULL) {
  ------------------
  |  Branch (413:9): [True: 2.66M, False: 136k]
  ------------------
  414|  2.66M|		node = rb_e2n(t, tmp);
  415|  2.66M|		comp = (*t->t_compare)(key, node);
  416|  2.66M|		if (comp < 0)
  ------------------
  |  Branch (416:7): [True: 1.18M, False: 1.47M]
  ------------------
  417|  1.18M|			tmp = RBE_LEFT(tmp);
  ------------------
  |  |   34|  1.18M|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  418|  1.47M|		else if (comp > 0)
  ------------------
  |  Branch (418:12): [True: 1.27M, False: 202k]
  ------------------
  419|  1.27M|			tmp = RBE_RIGHT(tmp);
  ------------------
  |  |   35|  1.27M|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  420|   202k|		else
  421|   202k|			return (node);
  422|  2.66M|	}
  423|       |
  424|   136k|	return NULL;
  425|   339k|}
_rb_next:
  452|   237k|{
  453|   237k|	struct rb_entry *rbe = rb_n2e(t, elm);
  454|       |
  455|   237k|	if (RBE_RIGHT(rbe) != NULL) {
  ------------------
  |  |   35|   237k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  |  Branch (455:6): [True: 118k, False: 118k]
  ------------------
  456|   118k|		rbe = RBE_RIGHT(rbe);
  ------------------
  |  |   35|   118k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  457|   155k|		while (RBE_LEFT(rbe) != NULL)
  ------------------
  |  |   34|   155k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (457:10): [True: 36.2k, False: 118k]
  ------------------
  458|  36.2k|			rbe = RBE_LEFT(rbe);
  ------------------
  |  |   34|  36.2k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  459|   118k|	} else {
  460|   118k|		if (RBE_PARENT(rbe) && (rbe == RBE_LEFT(RBE_PARENT(rbe))))
  ------------------
  |  |   36|   237k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  |  |  ------------------
  |  |  |  Branch (36:26): [True: 118k, False: 2]
  |  |  ------------------
  ------------------
              		if (RBE_PARENT(rbe) && (rbe == RBE_LEFT(RBE_PARENT(rbe))))
  ------------------
  |  |   34|   118k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (460:26): [True: 19.0k, False: 99.9k]
  ------------------
  461|  19.0k|			rbe = RBE_PARENT(rbe);
  ------------------
  |  |   36|  19.0k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  462|  99.9k|		else {
  463|   218k|			while (RBE_PARENT(rbe)
  ------------------
  |  |   36|   437k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  |  |  ------------------
  |  |  |  Branch (36:26): [True: 137k, False: 81.1k]
  |  |  ------------------
  ------------------
  464|   137k|			       && (rbe == RBE_RIGHT(RBE_PARENT(rbe))))
  ------------------
  |  |   35|   137k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  |  Branch (464:14): [True: 118k, False: 18.7k]
  ------------------
  465|   118k|				rbe = RBE_PARENT(rbe);
  ------------------
  |  |   36|   118k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  466|  99.9k|			rbe = RBE_PARENT(rbe);
  ------------------
  |  |   36|  99.9k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  467|  99.9k|		}
  468|   118k|	}
  469|       |
  470|   237k|	return (rbe == NULL ? NULL : rb_e2n(t, rbe));
  ------------------
  |  Branch (470:10): [True: 81.1k, False: 156k]
  ------------------
  471|   237k|}
_rb_min:
  503|  93.1k|{
  504|  93.1k|	struct rb_entry *rbe = RBH_ROOT(rbt);
  ------------------
  |  |   39|  93.1k|#define RBH_ROOT(_rbt)		(_rbt)->rbt_root
  ------------------
  505|  93.1k|	struct rb_entry *parent = NULL;
  506|       |
  507|   187k|	while (rbe != NULL) {
  ------------------
  |  Branch (507:9): [True: 94.6k, False: 93.1k]
  ------------------
  508|  94.6k|		parent = rbe;
  509|  94.6k|		rbe = RBE_LEFT(rbe);
  ------------------
  |  |   34|  94.6k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  510|  94.6k|	}
  511|       |
  512|  93.1k|	return (parent == NULL ? NULL : rb_e2n(t, parent));
  ------------------
  |  Branch (512:10): [True: 63, False: 93.0k]
  ------------------
  513|  93.1k|}
openbsd-tree.c:rb_n2e:
   21|   323k|{
   22|   323k|	unsigned long addr = (unsigned long)node;
   23|       |
   24|   323k|	return ((struct rb_entry *)(addr + t->t_offset));
   25|   323k|}
openbsd-tree.c:rbe_remove:
  276|  42.5k|{
  277|  42.5k|	struct rb_entry *child, *parent, *old = rbe;
  278|  42.5k|	unsigned int color;
  279|       |
  280|  42.5k|	if (RBE_LEFT(rbe) == NULL)
  ------------------
  |  |   34|  42.5k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (280:6): [True: 19.6k, False: 22.9k]
  ------------------
  281|  19.6k|		child = RBE_RIGHT(rbe);
  ------------------
  |  |   35|  19.6k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  282|  22.9k|	else if (RBE_RIGHT(rbe) == NULL)
  ------------------
  |  |   35|  22.9k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  |  Branch (282:11): [True: 3.84k, False: 19.0k]
  ------------------
  283|  3.84k|		child = RBE_LEFT(rbe);
  ------------------
  |  |   34|  3.84k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  284|  19.0k|	else {
  285|  19.0k|		struct rb_entry *tmp;
  286|       |
  287|  19.0k|		rbe = RBE_RIGHT(rbe);
  ------------------
  |  |   35|  19.0k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  288|  39.6k|		while ((tmp = RBE_LEFT(rbe)) != NULL)
  ------------------
  |  |   34|  39.6k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (288:10): [True: 20.5k, False: 19.0k]
  ------------------
  289|  20.5k|			rbe = tmp;
  290|       |
  291|  19.0k|		child = RBE_RIGHT(rbe);
  ------------------
  |  |   35|  19.0k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  292|  19.0k|		parent = RBE_PARENT(rbe);
  ------------------
  |  |   36|  19.0k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  293|  19.0k|		color = RBE_COLOR(rbe);
  ------------------
  |  |   37|  19.0k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
  294|  19.0k|		if (child != NULL)
  ------------------
  |  Branch (294:7): [True: 6.16k, False: 12.9k]
  ------------------
  295|  6.16k|			RBE_PARENT(child) = parent;
  ------------------
  |  |   36|  6.16k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  296|  19.0k|		if (parent != NULL) {
  ------------------
  |  Branch (296:7): [True: 19.0k, False: 0]
  ------------------
  297|  19.0k|			if (RBE_LEFT(parent) == rbe)
  ------------------
  |  |   34|  19.0k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (297:8): [True: 12.8k, False: 6.23k]
  ------------------
  298|  12.8k|				RBE_LEFT(parent) = child;
  ------------------
  |  |   34|  12.8k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  299|  6.23k|			else
  300|  6.23k|				RBE_RIGHT(parent) = child;
  ------------------
  |  |   35|  6.23k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  301|       |
  302|  19.0k|			rbe_if_augment(t, parent);
  303|  19.0k|		} else
  304|      0|			RBH_ROOT(rbt) = child;
  ------------------
  |  |   39|      0|#define RBH_ROOT(_rbt)		(_rbt)->rbt_root
  ------------------
  305|  19.0k|		if (RBE_PARENT(rbe) == old)
  ------------------
  |  |   36|  19.0k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  |  Branch (305:7): [True: 6.23k, False: 12.8k]
  ------------------
  306|  6.23k|			parent = rbe;
  307|  19.0k|		*rbe = *old;
  308|       |
  309|  19.0k|		tmp = RBE_PARENT(old);
  ------------------
  |  |   36|  19.0k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  310|  19.0k|		if (tmp != NULL) {
  ------------------
  |  Branch (310:7): [True: 19.0k, False: 0]
  ------------------
  311|  19.0k|			if (RBE_LEFT(tmp) == old)
  ------------------
  |  |   34|  19.0k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (311:8): [True: 13.1k, False: 5.93k]
  ------------------
  312|  13.1k|				RBE_LEFT(tmp) = rbe;
  ------------------
  |  |   34|  13.1k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  313|  5.93k|			else
  314|  5.93k|				RBE_RIGHT(tmp) = rbe;
  ------------------
  |  |   35|  5.93k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  315|       |
  316|  19.0k|			rbe_if_augment(t, tmp);
  317|  19.0k|		} else
  318|      0|			RBH_ROOT(rbt) = rbe;
  ------------------
  |  |   39|      0|#define RBH_ROOT(_rbt)		(_rbt)->rbt_root
  ------------------
  319|       |
  320|  19.0k|		RBE_PARENT(RBE_LEFT(old)) = rbe;
  ------------------
  |  |   36|  19.0k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  321|  19.0k|		if (RBE_RIGHT(old))
  ------------------
  |  |   35|  19.0k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  |  |  ------------------
  |  |  |  Branch (35:26): [True: 14.5k, False: 4.53k]
  |  |  ------------------
  ------------------
  322|  14.5k|			RBE_PARENT(RBE_RIGHT(old)) = rbe;
  ------------------
  |  |   36|  14.5k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  323|       |
  324|  19.0k|		if (t->t_augment != NULL && parent != NULL) {
  ------------------
  |  Branch (324:7): [True: 0, False: 19.0k]
  |  Branch (324:31): [True: 0, False: 0]
  ------------------
  325|      0|			tmp = parent;
  326|      0|			do {
  327|      0|				rbe_augment(t, tmp);
  328|      0|				tmp = RBE_PARENT(tmp);
  ------------------
  |  |   36|      0|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  329|      0|			} while (tmp != NULL);
  ------------------
  |  Branch (329:13): [True: 0, False: 0]
  ------------------
  330|      0|		}
  331|       |
  332|  19.0k|		goto color;
  333|  19.0k|	}
  334|       |
  335|  23.4k|	parent = RBE_PARENT(rbe);
  ------------------
  |  |   36|  23.4k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  336|  23.4k|	color = RBE_COLOR(rbe);
  ------------------
  |  |   37|  23.4k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
  337|       |
  338|  23.4k|	if (child != NULL)
  ------------------
  |  Branch (338:6): [True: 8.36k, False: 15.1k]
  ------------------
  339|  8.36k|		RBE_PARENT(child) = parent;
  ------------------
  |  |   36|  8.36k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  340|  23.4k|	if (parent != NULL) {
  ------------------
  |  Branch (340:6): [True: 23.4k, False: 0]
  ------------------
  341|  23.4k|		if (RBE_LEFT(parent) == rbe)
  ------------------
  |  |   34|  23.4k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (341:7): [True: 13.9k, False: 9.49k]
  ------------------
  342|  13.9k|			RBE_LEFT(parent) = child;
  ------------------
  |  |   34|  13.9k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  343|  9.49k|		else
  344|  9.49k|			RBE_RIGHT(parent) = child;
  ------------------
  |  |   35|  9.49k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  345|       |
  346|  23.4k|		rbe_if_augment(t, parent);
  347|  23.4k|	} else
  348|      0|		RBH_ROOT(rbt) = child;
  ------------------
  |  |   39|      0|#define RBH_ROOT(_rbt)		(_rbt)->rbt_root
  ------------------
  349|  42.5k|color:
  350|  42.5k|	if (color == RB_BLACK)
  ------------------
  |  |  303|  42.5k|#define RB_BLACK	0
  ------------------
  |  Branch (350:6): [True: 36.8k, False: 5.72k]
  ------------------
  351|  36.8k|		rbe_remove_color(t, rbt, parent, child);
  352|       |
  353|  42.5k|	return (old);
  354|  23.4k|}
openbsd-tree.c:rbe_remove_color:
  187|  36.8k|{
  188|  36.8k|	struct rb_entry *tmp;
  189|       |
  190|  57.6k|	while ((rbe == NULL || RBE_COLOR(rbe) == RB_BLACK)
  ------------------
  |  |   37|  35.3k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              	while ((rbe == NULL || RBE_COLOR(rbe) == RB_BLACK)
  ------------------
  |  |  303|  35.3k|#define RB_BLACK	0
  ------------------
  |  Branch (190:10): [True: 22.3k, False: 35.3k]
  |  Branch (190:25): [True: 7.33k, False: 28.0k]
  ------------------
  191|  29.6k|	       && rbe != RBH_ROOT(rbt) && parent) {
  ------------------
  |  |   39|  87.2k|#define RBH_ROOT(_rbt)		(_rbt)->rbt_root
  ------------------
  |  Branch (191:12): [True: 29.6k, False: 0]
  |  Branch (191:36): [True: 29.6k, False: 0]
  ------------------
  192|  29.6k|		if (RBE_LEFT(parent) == rbe) {
  ------------------
  |  |   34|  29.6k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (192:7): [True: 18.7k, False: 10.8k]
  ------------------
  193|  18.7k|			tmp = RBE_RIGHT(parent);
  ------------------
  |  |   35|  18.7k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  194|  18.7k|			if (RBE_COLOR(tmp) == RB_RED) {
  ------------------
  |  |   37|  18.7k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              			if (RBE_COLOR(tmp) == RB_RED) {
  ------------------
  |  |  304|  18.7k|#define RB_RED		1
  ------------------
  |  Branch (194:8): [True: 3.22k, False: 15.5k]
  ------------------
  195|  3.22k|				rbe_set_blackred(tmp, parent);
  196|  3.22k|				rbe_rotate_left(t, rbt, parent);
  197|  3.22k|				tmp = RBE_RIGHT(parent);
  ------------------
  |  |   35|  3.22k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  198|  3.22k|			}
  199|  18.7k|			if ((RBE_LEFT(tmp) == NULL
  ------------------
  |  |   34|  18.7k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (199:9): [True: 11.5k, False: 7.19k]
  ------------------
  200|  7.19k|			     || RBE_COLOR(RBE_LEFT(tmp)) == RB_BLACK)
  ------------------
  |  |   37|  7.19k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              			     || RBE_COLOR(RBE_LEFT(tmp)) == RB_BLACK)
  ------------------
  |  |  303|  7.19k|#define RB_BLACK	0
  ------------------
  |  Branch (200:12): [True: 4.64k, False: 2.55k]
  ------------------
  201|  16.2k|			    && (RBE_RIGHT(tmp) == NULL
  ------------------
  |  |   35|  16.2k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  |  Branch (201:12): [True: 10.1k, False: 6.09k]
  ------------------
  202|  13.1k|				|| RBE_COLOR(RBE_RIGHT(tmp)) == RB_BLACK)) {
  ------------------
  |  |   37|  6.09k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              				|| RBE_COLOR(RBE_RIGHT(tmp)) == RB_BLACK)) {
  ------------------
  |  |  303|  6.09k|#define RB_BLACK	0
  ------------------
  |  Branch (202:8): [True: 3.04k, False: 3.04k]
  ------------------
  203|  13.1k|				RBE_COLOR(tmp) = RB_RED;
  ------------------
  |  |   37|  13.1k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              				RBE_COLOR(tmp) = RB_RED;
  ------------------
  |  |  304|  13.1k|#define RB_RED		1
  ------------------
  204|  13.1k|				rbe = parent;
  205|  13.1k|				parent = RBE_PARENT(rbe);
  ------------------
  |  |   36|  13.1k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  206|  13.1k|			} else {
  207|  5.59k|				if (RBE_RIGHT(tmp) == NULL
  ------------------
  |  |   35|  5.59k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  |  Branch (207:9): [True: 360, False: 5.23k]
  ------------------
  208|  5.23k|				    || RBE_COLOR(RBE_RIGHT(tmp)) == RB_BLACK) {
  ------------------
  |  |   37|  5.23k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              				    || RBE_COLOR(RBE_RIGHT(tmp)) == RB_BLACK) {
  ------------------
  |  |  303|  5.23k|#define RB_BLACK	0
  ------------------
  |  Branch (208:12): [True: 172, False: 5.06k]
  ------------------
  209|    532|					struct rb_entry *oleft;
  210|       |
  211|    532|					oleft = RBE_LEFT(tmp);
  ------------------
  |  |   34|    532|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  212|    532|					if (oleft != NULL)
  ------------------
  |  Branch (212:10): [True: 532, False: 0]
  ------------------
  213|    532|						RBE_COLOR(oleft) = RB_BLACK;
  ------------------
  |  |   37|    532|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              						RBE_COLOR(oleft) = RB_BLACK;
  ------------------
  |  |  303|    532|#define RB_BLACK	0
  ------------------
  214|       |
  215|    532|					RBE_COLOR(tmp) = RB_RED;
  ------------------
  |  |   37|    532|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              					RBE_COLOR(tmp) = RB_RED;
  ------------------
  |  |  304|    532|#define RB_RED		1
  ------------------
  216|    532|					rbe_rotate_right(t, rbt, tmp);
  217|    532|					tmp = RBE_RIGHT(parent);
  ------------------
  |  |   35|    532|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  218|    532|				}
  219|       |
  220|  5.59k|				RBE_COLOR(tmp) = RBE_COLOR(parent);
  ------------------
  |  |   37|  5.59k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              				RBE_COLOR(tmp) = RBE_COLOR(parent);
  ------------------
  |  |   37|  5.59k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
  221|  5.59k|				RBE_COLOR(parent) = RB_BLACK;
  ------------------
  |  |   37|  5.59k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              				RBE_COLOR(parent) = RB_BLACK;
  ------------------
  |  |  303|  5.59k|#define RB_BLACK	0
  ------------------
  222|  5.59k|				if (RBE_RIGHT(tmp))
  ------------------
  |  |   35|  5.59k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  |  |  ------------------
  |  |  |  Branch (35:26): [True: 5.59k, False: 0]
  |  |  ------------------
  ------------------
  223|  5.59k|					RBE_COLOR(RBE_RIGHT(tmp)) = RB_BLACK;
  ------------------
  |  |   37|  5.59k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              					RBE_COLOR(RBE_RIGHT(tmp)) = RB_BLACK;
  ------------------
  |  |  303|  5.59k|#define RB_BLACK	0
  ------------------
  224|       |
  225|  5.59k|				rbe_rotate_left(t, rbt, parent);
  226|  5.59k|				rbe = RBH_ROOT(rbt);
  ------------------
  |  |   39|  5.59k|#define RBH_ROOT(_rbt)		(_rbt)->rbt_root
  ------------------
  227|  5.59k|				break;
  228|  5.59k|			}
  229|  18.7k|		} else {
  230|  10.8k|			tmp = RBE_LEFT(parent);
  ------------------
  |  |   34|  10.8k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  231|  10.8k|			if (RBE_COLOR(tmp) == RB_RED) {
  ------------------
  |  |   37|  10.8k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              			if (RBE_COLOR(tmp) == RB_RED) {
  ------------------
  |  |  304|  10.8k|#define RB_RED		1
  ------------------
  |  Branch (231:8): [True: 1.62k, False: 9.25k]
  ------------------
  232|  1.62k|				rbe_set_blackred(tmp, parent);
  233|  1.62k|				rbe_rotate_right(t, rbt, parent);
  234|  1.62k|				tmp = RBE_LEFT(parent);
  ------------------
  |  |   34|  1.62k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  235|  1.62k|			}
  236|       |
  237|  10.8k|			if ((RBE_LEFT(tmp) == NULL
  ------------------
  |  |   34|  10.8k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (237:9): [True: 6.80k, False: 4.06k]
  ------------------
  238|  4.06k|			     || RBE_COLOR(RBE_LEFT(tmp)) == RB_BLACK)
  ------------------
  |  |   37|  4.06k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              			     || RBE_COLOR(RBE_LEFT(tmp)) == RB_BLACK)
  ------------------
  |  |  303|  4.06k|#define RB_BLACK	0
  ------------------
  |  Branch (238:12): [True: 2.32k, False: 1.73k]
  ------------------
  239|  9.13k|			    && (RBE_RIGHT(tmp) == NULL
  ------------------
  |  |   35|  9.13k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  |  Branch (239:12): [True: 5.33k, False: 3.79k]
  ------------------
  240|  7.64k|				|| RBE_COLOR(RBE_RIGHT(tmp)) == RB_BLACK)) {
  ------------------
  |  |   37|  3.79k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              				|| RBE_COLOR(RBE_RIGHT(tmp)) == RB_BLACK)) {
  ------------------
  |  |  303|  3.79k|#define RB_BLACK	0
  ------------------
  |  Branch (240:8): [True: 2.30k, False: 1.49k]
  ------------------
  241|  7.64k|				RBE_COLOR(tmp) = RB_RED;
  ------------------
  |  |   37|  7.64k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              				RBE_COLOR(tmp) = RB_RED;
  ------------------
  |  |  304|  7.64k|#define RB_RED		1
  ------------------
  242|  7.64k|				rbe = parent;
  243|  7.64k|				parent = RBE_PARENT(rbe);
  ------------------
  |  |   36|  7.64k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  244|  7.64k|			} else {
  245|  3.23k|				if (RBE_LEFT(tmp) == NULL
  ------------------
  |  |   34|  3.23k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (245:9): [True: 1.47k, False: 1.75k]
  ------------------
  246|  1.75k|				    || RBE_COLOR(RBE_LEFT(tmp)) == RB_BLACK) {
  ------------------
  |  |   37|  1.75k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              				    || RBE_COLOR(RBE_LEFT(tmp)) == RB_BLACK) {
  ------------------
  |  |  303|  1.75k|#define RB_BLACK	0
  ------------------
  |  Branch (246:12): [True: 18, False: 1.73k]
  ------------------
  247|  1.49k|					struct rb_entry *oright;
  248|       |
  249|  1.49k|					oright = RBE_RIGHT(tmp);
  ------------------
  |  |   35|  1.49k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  250|  1.49k|					if (oright != NULL)
  ------------------
  |  Branch (250:10): [True: 1.49k, False: 0]
  ------------------
  251|  1.49k|						RBE_COLOR(oright) = RB_BLACK;
  ------------------
  |  |   37|  1.49k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              						RBE_COLOR(oright) = RB_BLACK;
  ------------------
  |  |  303|  1.49k|#define RB_BLACK	0
  ------------------
  252|       |
  253|  1.49k|					RBE_COLOR(tmp) = RB_RED;
  ------------------
  |  |   37|  1.49k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              					RBE_COLOR(tmp) = RB_RED;
  ------------------
  |  |  304|  1.49k|#define RB_RED		1
  ------------------
  254|  1.49k|					rbe_rotate_left(t, rbt, tmp);
  255|  1.49k|					tmp = RBE_LEFT(parent);
  ------------------
  |  |   34|  1.49k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  256|  1.49k|				}
  257|       |
  258|  3.23k|				RBE_COLOR(tmp) = RBE_COLOR(parent);
  ------------------
  |  |   37|  3.23k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              				RBE_COLOR(tmp) = RBE_COLOR(parent);
  ------------------
  |  |   37|  3.23k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
  259|  3.23k|				RBE_COLOR(parent) = RB_BLACK;
  ------------------
  |  |   37|  3.23k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              				RBE_COLOR(parent) = RB_BLACK;
  ------------------
  |  |  303|  3.23k|#define RB_BLACK	0
  ------------------
  260|  3.23k|				if (RBE_LEFT(tmp) != NULL)
  ------------------
  |  |   34|  3.23k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (260:9): [True: 3.23k, False: 0]
  ------------------
  261|  3.23k|					RBE_COLOR(RBE_LEFT(tmp)) = RB_BLACK;
  ------------------
  |  |   37|  3.23k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              					RBE_COLOR(RBE_LEFT(tmp)) = RB_BLACK;
  ------------------
  |  |  303|  3.23k|#define RB_BLACK	0
  ------------------
  262|       |
  263|  3.23k|				rbe_rotate_right(t, rbt, parent);
  264|  3.23k|				rbe = RBH_ROOT(rbt);
  ------------------
  |  |   39|  3.23k|#define RBH_ROOT(_rbt)		(_rbt)->rbt_root
  ------------------
  265|  3.23k|				break;
  266|  3.23k|			}
  267|  10.8k|		}
  268|  29.6k|	}
  269|       |
  270|  36.8k|	if (rbe != NULL)
  ------------------
  |  Branch (270:6): [True: 36.8k, False: 0]
  ------------------
  271|  36.8k|		RBE_COLOR(rbe) = RB_BLACK;
  ------------------
  |  |   37|  36.8k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              		RBE_COLOR(rbe) = RB_BLACK;
  ------------------
  |  |  303|  36.8k|#define RB_BLACK	0
  ------------------
  272|  36.8k|}
openbsd-tree.c:rbe_set_blackred:
   50|  49.0k|{
   51|  49.0k|	RBE_COLOR(black) = RB_BLACK;
  ------------------
  |  |   37|  49.0k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              	RBE_COLOR(black) = RB_BLACK;
  ------------------
  |  |  303|  49.0k|#define RB_BLACK	0
  ------------------
   52|  49.0k|	RBE_COLOR(red) = RB_RED;
  ------------------
  |  |   37|  49.0k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              	RBE_COLOR(red) = RB_RED;
  ------------------
  |  |  304|  49.0k|#define RB_RED		1
  ------------------
   53|  49.0k|}
openbsd-tree.c:rbe_rotate_left:
   68|  31.2k|{
   69|  31.2k|	struct rb_entry *parent;
   70|  31.2k|	struct rb_entry *tmp;
   71|       |
   72|  31.2k|	tmp = RBE_RIGHT(rbe);
  ------------------
  |  |   35|  31.2k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
   73|  31.2k|	RBE_RIGHT(rbe) = RBE_LEFT(tmp);
  ------------------
  |  |   35|  31.2k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
              	RBE_RIGHT(rbe) = RBE_LEFT(tmp);
  ------------------
  |  |   34|  31.2k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
   74|  31.2k|	if (RBE_RIGHT(rbe) != NULL)
  ------------------
  |  |   35|  31.2k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  |  Branch (74:6): [True: 13.0k, False: 18.1k]
  ------------------
   75|  13.0k|		RBE_PARENT(RBE_LEFT(tmp)) = rbe;
  ------------------
  |  |   36|  13.0k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
   76|       |
   77|  31.2k|	parent = RBE_PARENT(rbe);
  ------------------
  |  |   36|  31.2k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
   78|  31.2k|	RBE_PARENT(tmp) = parent;
  ------------------
  |  |   36|  31.2k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
   79|  31.2k|	if (parent != NULL) {
  ------------------
  |  Branch (79:6): [True: 31.2k, False: 4]
  ------------------
   80|  31.2k|		if (rbe == RBE_LEFT(parent))
  ------------------
  |  |   34|  31.2k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (80:7): [True: 18.3k, False: 12.9k]
  ------------------
   81|  18.3k|			RBE_LEFT(parent) = tmp;
  ------------------
  |  |   34|  18.3k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
   82|  12.9k|		else
   83|  12.9k|			RBE_RIGHT(parent) = tmp;
  ------------------
  |  |   35|  12.9k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
   84|  31.2k|	} else
   85|      4|		RBH_ROOT(rbt) = tmp;
  ------------------
  |  |   39|      4|#define RBH_ROOT(_rbt)		(_rbt)->rbt_root
  ------------------
   86|       |
   87|  31.2k|	RBE_LEFT(tmp) = rbe;
  ------------------
  |  |   34|  31.2k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
   88|  31.2k|	RBE_PARENT(rbe) = tmp;
  ------------------
  |  |   36|  31.2k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
   89|       |
   90|  31.2k|	if (t->t_augment != NULL) {
  ------------------
  |  Branch (90:6): [True: 0, False: 31.2k]
  ------------------
   91|      0|		rbe_augment(t, rbe);
   92|      0|		rbe_augment(t, tmp);
   93|      0|		parent = RBE_PARENT(tmp);
  ------------------
  |  |   36|      0|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
   94|      0|		if (parent != NULL)
  ------------------
  |  Branch (94:7): [True: 0, False: 0]
  ------------------
   95|      0|			rbe_augment(t, parent);
   96|      0|	}
   97|  31.2k|}
openbsd-tree.c:rbe_rotate_right:
  101|  18.0k|{
  102|  18.0k|	struct rb_entry *parent;
  103|  18.0k|	struct rb_entry *tmp;
  104|       |
  105|  18.0k|	tmp = RBE_LEFT(rbe);
  ------------------
  |  |   34|  18.0k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  106|  18.0k|	RBE_LEFT(rbe) = RBE_RIGHT(tmp);
  ------------------
  |  |   34|  18.0k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
              	RBE_LEFT(rbe) = RBE_RIGHT(tmp);
  ------------------
  |  |   35|  18.0k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  107|  18.0k|	if (RBE_LEFT(rbe) != NULL)
  ------------------
  |  |   34|  18.0k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (107:6): [True: 5.84k, False: 12.2k]
  ------------------
  108|  5.84k|		RBE_PARENT(RBE_RIGHT(tmp)) = rbe;
  ------------------
  |  |   36|  5.84k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  109|       |
  110|  18.0k|	parent = RBE_PARENT(rbe);
  ------------------
  |  |   36|  18.0k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  111|  18.0k|	RBE_PARENT(tmp) = parent;
  ------------------
  |  |   36|  18.0k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  112|  18.0k|	if (parent != NULL) {
  ------------------
  |  Branch (112:6): [True: 18.0k, False: 1]
  ------------------
  113|  18.0k|		if (rbe == RBE_LEFT(parent))
  ------------------
  |  |   34|  18.0k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (113:7): [True: 5.86k, False: 12.1k]
  ------------------
  114|  5.86k|			RBE_LEFT(parent) = tmp;
  ------------------
  |  |   34|  5.86k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  115|  12.1k|		else
  116|  12.1k|			RBE_RIGHT(parent) = tmp;
  ------------------
  |  |   35|  12.1k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  117|  18.0k|	} else
  118|      1|		RBH_ROOT(rbt) = tmp;
  ------------------
  |  |   39|      1|#define RBH_ROOT(_rbt)		(_rbt)->rbt_root
  ------------------
  119|       |
  120|  18.0k|	RBE_RIGHT(tmp) = rbe;
  ------------------
  |  |   35|  18.0k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  121|  18.0k|	RBE_PARENT(rbe) = tmp;
  ------------------
  |  |   36|  18.0k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  122|       |
  123|  18.0k|	if (t->t_augment != NULL) {
  ------------------
  |  Branch (123:6): [True: 0, False: 18.0k]
  ------------------
  124|      0|		rbe_augment(t, rbe);
  125|      0|		rbe_augment(t, tmp);
  126|      0|		parent = RBE_PARENT(tmp);
  ------------------
  |  |   36|      0|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  127|      0|		if (parent != NULL)
  ------------------
  |  Branch (127:7): [True: 0, False: 0]
  ------------------
  128|      0|			rbe_augment(t, parent);
  129|      0|	}
  130|  18.0k|}
openbsd-tree.c:rb_e2n:
   28|  3.37M|{
   29|  3.37M|	unsigned long addr = (unsigned long)rbe;
   30|       |
   31|  3.37M|	return ((void *)(addr - t->t_offset));
   32|  3.37M|}
openbsd-tree.c:rbe_set:
   42|  43.2k|{
   43|  43.2k|	RBE_PARENT(rbe) = parent;
  ------------------
  |  |   36|  43.2k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
   44|  43.2k|	RBE_LEFT(rbe) = RBE_RIGHT(rbe) = NULL;
  ------------------
  |  |   34|  43.2k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
              	RBE_LEFT(rbe) = RBE_RIGHT(rbe) = NULL;
  ------------------
  |  |   35|  43.2k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
   45|  43.2k|	RBE_COLOR(rbe) = RB_RED;
  ------------------
  |  |   37|  43.2k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              	RBE_COLOR(rbe) = RB_RED;
  ------------------
  |  |  304|  43.2k|#define RB_RED		1
  ------------------
   46|  43.2k|}
openbsd-tree.c:rbe_if_augment:
   61|   104k|{
   62|   104k|	if (t->t_augment != NULL)
  ------------------
  |  Branch (62:6): [True: 0, False: 104k]
  ------------------
   63|      0|		rbe_augment(t, rbe);
   64|   104k|}
openbsd-tree.c:rbe_insert_color:
  134|  43.2k|{
  135|  43.2k|	struct rb_entry *parent, *gparent, *tmp;
  136|       |
  137|  87.4k|	while ((parent = RBE_PARENT(rbe)) != NULL
  ------------------
  |  |   36|  87.4k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  |  Branch (137:9): [True: 87.4k, False: 10]
  ------------------
  138|  87.4k|	       && RBE_COLOR(parent) == RB_RED) {
  ------------------
  |  |   37|  87.4k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              	       && RBE_COLOR(parent) == RB_RED) {
  ------------------
  |  |  304|  87.4k|#define RB_RED		1
  ------------------
  |  Branch (138:12): [True: 44.2k, False: 43.2k]
  ------------------
  139|  44.2k|		gparent = RBE_PARENT(parent);
  ------------------
  |  |   36|  44.2k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  140|       |
  141|  44.2k|		if (parent == RBE_LEFT(gparent)) {
  ------------------
  |  |   34|  44.2k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (141:7): [True: 14.8k, False: 29.3k]
  ------------------
  142|  14.8k|			tmp = RBE_RIGHT(gparent);
  ------------------
  |  |   35|  14.8k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  143|  14.8k|			if (tmp != NULL && RBE_COLOR(tmp) == RB_RED) {
  ------------------
  |  |   37|  8.18k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              			if (tmp != NULL && RBE_COLOR(tmp) == RB_RED) {
  ------------------
  |  |  304|  8.18k|#define RB_RED		1
  ------------------
  |  Branch (143:8): [True: 8.18k, False: 6.67k]
  |  Branch (143:23): [True: 5.07k, False: 3.10k]
  ------------------
  144|  5.07k|				RBE_COLOR(tmp) = RB_BLACK;
  ------------------
  |  |   37|  5.07k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              				RBE_COLOR(tmp) = RB_BLACK;
  ------------------
  |  |  303|  5.07k|#define RB_BLACK	0
  ------------------
  145|  5.07k|				rbe_set_blackred(parent, gparent);
  146|  5.07k|				rbe = gparent;
  147|  5.07k|				continue;
  148|  5.07k|			}
  149|       |
  150|  9.77k|			if (RBE_RIGHT(parent) == rbe) {
  ------------------
  |  |   35|  9.77k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  |  Branch (150:8): [True: 7.67k, False: 2.10k]
  ------------------
  151|  7.67k|				rbe_rotate_left(t, rbt, parent);
  152|  7.67k|				tmp = parent;
  153|  7.67k|				parent = rbe;
  154|  7.67k|				rbe = tmp;
  155|  7.67k|			}
  156|       |
  157|  9.77k|			rbe_set_blackred(parent, gparent);
  158|  9.77k|			rbe_rotate_right(t, rbt, gparent);
  159|  29.3k|		} else {
  160|  29.3k|			tmp = RBE_LEFT(gparent);
  ------------------
  |  |   34|  29.3k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  161|  29.3k|			if (tmp != NULL && RBE_COLOR(tmp) == RB_RED) {
  ------------------
  |  |   37|  19.7k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              			if (tmp != NULL && RBE_COLOR(tmp) == RB_RED) {
  ------------------
  |  |  304|  19.7k|#define RB_RED		1
  ------------------
  |  Branch (161:8): [True: 19.7k, False: 9.68k]
  |  Branch (161:23): [True: 16.1k, False: 3.59k]
  ------------------
  162|  16.1k|				RBE_COLOR(tmp) = RB_BLACK;
  ------------------
  |  |   37|  16.1k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              				RBE_COLOR(tmp) = RB_BLACK;
  ------------------
  |  |  303|  16.1k|#define RB_BLACK	0
  ------------------
  163|  16.1k|				rbe_set_blackred(parent, gparent);
  164|  16.1k|				rbe = gparent;
  165|  16.1k|				continue;
  166|  16.1k|			}
  167|       |
  168|  13.2k|			if (RBE_LEFT(parent) == rbe) {
  ------------------
  |  |   34|  13.2k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (168:8): [True: 2.90k, False: 10.3k]
  ------------------
  169|  2.90k|				rbe_rotate_right(t, rbt, parent);
  170|  2.90k|				tmp = parent;
  171|  2.90k|				parent = rbe;
  172|  2.90k|				rbe = tmp;
  173|  2.90k|			}
  174|       |
  175|  13.2k|			rbe_set_blackred(parent, gparent);
  176|  13.2k|			rbe_rotate_left(t, rbt, gparent);
  177|  13.2k|		}
  178|  44.2k|	}
  179|       |
  180|  43.2k|	RBE_COLOR(RBH_ROOT(rbt)) = RB_BLACK;
  ------------------
  |  |   37|  43.2k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              	RBE_COLOR(RBH_ROOT(rbt)) = RB_BLACK;
  ------------------
  |  |  303|  43.2k|#define RB_BLACK	0
  ------------------
  181|  43.2k|}

pim_bsm.c:if_name_head_RB_MIN:
  414|    594|	{                                                                      \
  415|    594|		return (struct _type *)_rb_min(_name##_RB_TYPE,                \
  416|    594|					       &head->rbh_root);               \
  417|    594|	}                                                                      \
pim_bsm.c:if_name_head_RB_NEXT:
  428|  1.18k|	{                                                                      \
  429|  1.18k|		return (struct _type *)_rb_next(_name##_RB_TYPE, elm);         \
  430|  1.18k|	}                                                                      \
pim_iface.c:pim_ifchannel_rb_RB_INIT:
  365|      2|	{                                                                      \
  366|      2|		_rb_init(&head->rbh_root);                                     \
  367|      2|	}                                                                      \
pim_iface.c:_rb_init:
  331|      2|{
  332|       |	rbt->rbt_root = NULL;
  333|      2|}
pim_iface.c:pim_ifchannel_rb_RB_MIN:
  414|     96|	{                                                                      \
  415|     96|		return (struct _type *)_rb_min(_name##_RB_TYPE,                \
  416|     96|					       &head->rbh_root);               \
  417|     96|	}                                                                      \
pim_iface.c:pim_ifchannel_rb_RB_NEXT:
  428|  3.24k|	{                                                                      \
  429|  3.24k|		return (struct _type *)_rb_next(_name##_RB_TYPE, elm);         \
  430|  3.24k|	}                                                                      \
pim_ifchannel.c:pim_ifchannel_rb_RB_COMPARE:
  488|  3.07M|	{                                                                      \
  489|  3.07M|		const struct _type *l = lptr, *r = rptr;                       \
  490|  3.07M|		return _cmp(l, r);                                             \
  491|  3.07M|	}                                                                      \
pim_ifchannel.c:pim_ifchannel_rb_RB_REMOVE:
  378|  42.5k|	{                                                                      \
  379|  42.5k|		return (struct _type *)_rb_remove(_name##_RB_TYPE,             \
  380|  42.5k|						  &head->rbh_root, elm);       \
  381|  42.5k|	}                                                                      \
pim_ifchannel.c:pim_ifchannel_rb_RB_FIND:
  386|   338k|	{                                                                      \
  387|   338k|		return (struct _type *)_rb_find(_name##_RB_TYPE,               \
  388|   338k|						&head->rbh_root, key);         \
  389|   338k|	}                                                                      \
pim_ifchannel.c:pim_ifchannel_rb_RB_MIN:
  414|    213|	{                                                                      \
  415|    213|		return (struct _type *)_rb_min(_name##_RB_TYPE,                \
  416|    213|					       &head->rbh_root);               \
  417|    213|	}                                                                      \
pim_ifchannel.c:pim_ifchannel_rb_RB_NEXT:
  428|  72.8k|	{                                                                      \
  429|  72.8k|		return (struct _type *)_rb_next(_name##_RB_TYPE, elm);         \
  430|  72.8k|	}                                                                      \
pim_ifchannel.c:pim_ifchannel_rb_RB_INSERT:
  371|  43.2k|	{                                                                      \
  372|  43.2k|		return (struct _type *)_rb_insert(_name##_RB_TYPE,             \
  373|  43.2k|						  &head->rbh_root, elm);       \
  374|  43.2k|	}                                                                      \
pim_instance.c:if_name_head_RB_MIN:
  414|      1|	{                                                                      \
  415|      1|		return (struct _type *)_rb_min(_name##_RB_TYPE,                \
  416|      1|					       &head->rbh_root);               \
  417|      1|	}                                                                      \
pim_rp.c:if_name_head_RB_MIN:
  414|  18.2k|	{                                                                      \
  415|  18.2k|		return (struct _type *)_rb_min(_name##_RB_TYPE,                \
  416|  18.2k|					       &head->rbh_root);               \
  417|  18.2k|	}                                                                      \
pim_rp.c:if_name_head_RB_NEXT:
  428|  36.5k|	{                                                                      \
  429|  36.5k|		return (struct _type *)_rb_next(_name##_RB_TYPE, elm);         \
  430|  36.5k|	}                                                                      \
pim_upstream.c:if_name_head_RB_MIN:
  414|  60.8k|	{                                                                      \
  415|  60.8k|		return (struct _type *)_rb_min(_name##_RB_TYPE,                \
  416|  60.8k|					       &head->rbh_root);               \
  417|  60.8k|	}                                                                      \
pim_upstream.c:if_name_head_RB_NEXT:
  428|  97.8k|	{                                                                      \
  429|  97.8k|		return (struct _type *)_rb_next(_name##_RB_TYPE, elm);         \
  430|  97.8k|	}                                                                      \
pim_zebra.c:if_name_head_RB_MIN:
  414|  11.9k|	{                                                                      \
  415|  11.9k|		return (struct _type *)_rb_min(_name##_RB_TYPE,                \
  416|  11.9k|					       &head->rbh_root);               \
  417|  11.9k|	}                                                                      \
pim_zebra.c:if_name_head_RB_NEXT:
  428|  23.9k|	{                                                                      \
  429|  23.9k|		return (struct _type *)_rb_next(_name##_RB_TYPE, elm);         \
  430|  23.9k|	}                                                                      \
if.c:if_name_head_RB_COMPARE:
  488|      2|	{                                                                      \
  489|      2|		const struct _type *l = lptr, *r = rptr;                       \
  490|      2|		return _cmp(l, r);                                             \
  491|      2|	}                                                                      \
if.c:if_name_head_RB_INSERT:
  371|      2|	{                                                                      \
  372|      2|		return (struct _type *)_rb_insert(_name##_RB_TYPE,             \
  373|      2|						  &head->rbh_root, elm);       \
  374|      2|	}                                                                      \
if.c:if_index_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_index_head_RB_FIND:
  386|      1|	{                                                                      \
  387|      1|		return (struct _type *)_rb_find(_name##_RB_TYPE,               \
  388|      1|						&head->rbh_root, key);         \
  389|      1|	}                                                                      \
if.c:if_name_head_RB_FIND:
  386|      2|	{                                                                      \
  387|      2|		return (struct _type *)_rb_find(_name##_RB_TYPE,               \
  388|      2|						&head->rbh_root, key);         \
  389|      2|	}                                                                      \
if.c:if_name_head_RB_MIN:
  414|  1.12k|	{                                                                      \
  415|  1.12k|		return (struct _type *)_rb_min(_name##_RB_TYPE,                \
  416|  1.12k|					       &head->rbh_root);               \
  417|  1.12k|	}                                                                      \
if.c:if_name_head_RB_NEXT:
  428|  2.24k|	{                                                                      \
  429|  2.24k|		return (struct _type *)_rb_next(_name##_RB_TYPE, elm);         \
  430|  2.24k|	}                                                                      \
if.c:vrf_name_head_RB_MIN:
  414|      2|	{                                                                      \
  415|      2|		return (struct _type *)_rb_min(_name##_RB_TYPE,                \
  416|      2|					       &head->rbh_root);               \
  417|      2|	}                                                                      \
if.c:vrf_name_head_RB_NEXT:
  428|      2|	{                                                                      \
  429|      2|		return (struct _type *)_rb_next(_name##_RB_TYPE, elm);         \
  430|      2|	}                                                                      \
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|  1.12k|	{                                                                      \
  489|  1.12k|		const struct _type *l = lptr, *r = rptr;                       \
  490|  1.12k|		return _cmp(l, r);                                             \
  491|  1.12k|	}                                                                      \
vrf.c:vrf_name_head_RB_COMPARE:
  488|      2|	{                                                                      \
  489|      2|		const struct _type *l = lptr, *r = rptr;                       \
  490|      2|		return _cmp(l, r);                                             \
  491|      2|	}                                                                      \
vrf.c:vrf_name_head_RB_FIND:
  386|      3|	{                                                                      \
  387|      3|		return (struct _type *)_rb_find(_name##_RB_TYPE,               \
  388|      3|						&head->rbh_root, key);         \
  389|      3|	}                                                                      \
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|  1.12k|	{                                                                      \
  387|  1.12k|		return (struct _type *)_rb_find(_name##_RB_TYPE,               \
  388|  1.12k|						&head->rbh_root, key);         \
  389|  1.12k|	}                                                                      \

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|  74.4M|{
   68|  74.4M|	unsigned int offset = bit_index / 8;
   69|  74.4M|	unsigned int shift = 7 - (bit_index % 8);
   70|       |
   71|  74.4M|	return (prefix[offset] >> shift) & 1;
   72|  74.4M|}
prefix_match:
  187|  96.5M|{
  188|  96.5M|	const struct prefix *n = unet.p;
  189|  96.5M|	const struct prefix *p = upfx.p;
  190|  96.5M|	int offset;
  191|  96.5M|	int shift;
  192|  96.5M|	const uint8_t *np, *pp;
  193|       |
  194|       |	/* If n's prefix is longer than p's one return 0. */
  195|  96.5M|	if (n->prefixlen > p->prefixlen)
  ------------------
  |  Branch (195:6): [True: 2.26k, False: 96.5M]
  ------------------
  196|  2.26k|		return 0;
  197|       |
  198|  96.5M|	if (n->family == AF_FLOWSPEC) {
  ------------------
  |  |  158|  96.5M|#define AF_FLOWSPEC (AF_MAX + 2)
  ------------------
  |  Branch (198:6): [True: 0, False: 96.5M]
  ------------------
  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|  96.5M|	np = n->u.val;
  222|  96.5M|	pp = p->u.val;
  223|       |
  224|  96.5M|	offset = n->prefixlen / PNBBY;
  ------------------
  |  |   30|  96.5M|#define PNBBY 8
  ------------------
  225|  96.5M|	shift = n->prefixlen % PNBBY;
  ------------------
  |  |   30|  96.5M|#define PNBBY 8
  ------------------
  226|       |
  227|  96.5M|	if (shift)
  ------------------
  |  Branch (227:6): [True: 86.8M, False: 9.68M]
  ------------------
  228|  86.8M|		if (maskbit[shift] & (np[offset] ^ pp[offset]))
  ------------------
  |  Branch (228:7): [True: 19.8M, False: 67.0M]
  ------------------
  229|  19.8M|			return 0;
  230|       |
  231|   102M|	while (offset--)
  ------------------
  |  Branch (231:9): [True: 27.8M, False: 74.6M]
  ------------------
  232|  27.8M|		if (np[offset] != pp[offset])
  ------------------
  |  Branch (232:7): [True: 2.09M, False: 25.7M]
  ------------------
  233|  2.09M|			return 0;
  234|  74.6M|	return 1;
  235|       |
  236|  76.6M|}
prefix_copy:
  316|  1.13M|{
  317|  1.13M|	struct prefix *dest = udest.p;
  318|  1.13M|	const struct prefix *src = usrc.p;
  319|       |
  320|  1.13M|	dest->family = src->family;
  321|  1.13M|	dest->prefixlen = src->prefixlen;
  322|       |
  323|  1.13M|	if (src->family == AF_INET)
  ------------------
  |  Branch (323:6): [True: 1.13M, False: 363]
  ------------------
  324|  1.13M|		dest->u.prefix4 = src->u.prefix4;
  325|    363|	else if (src->family == AF_INET6)
  ------------------
  |  Branch (325:11): [True: 363, False: 0]
  ------------------
  326|    363|		dest->u.prefix6 = src->u.prefix6;
  327|      0|	else if (src->family == AF_ETHERNET) {
  ------------------
  |  |  139|      0|#define AF_ETHERNET AF_PACKET
  ------------------
  |  Branch (327:11): [True: 0, False: 0]
  ------------------
  328|      0|		memcpy(&dest->u.prefix_eth, &src->u.prefix_eth,
  329|      0|		       sizeof(struct ethaddr));
  330|      0|	} else if (src->family == AF_EVPN) {
  ------------------
  |  |  154|      0|#define AF_EVPN (AF_MAX + 1)
  ------------------
  |  Branch (330:13): [True: 0, False: 0]
  ------------------
  331|      0|		memcpy(&dest->u.prefix_evpn, &src->u.prefix_evpn,
  332|      0|		       sizeof(struct evpn_addr));
  333|      0|	} else if (src->family == AF_UNSPEC) {
  ------------------
  |  Branch (333:13): [True: 0, False: 0]
  ------------------
  334|      0|		dest->u.lp.id = src->u.lp.id;
  335|      0|		dest->u.lp.adv_router = src->u.lp.adv_router;
  336|      0|	} 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|  1.13M|}
prefix_same:
  367|   400k|{
  368|   400k|	const struct prefix *p1 = up1.p;
  369|   400k|	const struct prefix *p2 = up2.p;
  370|       |
  371|   400k|	if ((p1 && !p2) || (!p1 && p2))
  ------------------
  |  Branch (371:7): [True: 400k, False: 0]
  |  Branch (371:13): [True: 0, False: 400k]
  |  Branch (371:22): [True: 0, False: 400k]
  |  Branch (371:29): [True: 0, False: 0]
  ------------------
  372|      0|		return 0;
  373|       |
  374|   400k|	if (!p1 && !p2)
  ------------------
  |  Branch (374:6): [True: 0, False: 400k]
  |  Branch (374:13): [True: 0, False: 0]
  ------------------
  375|      0|		return 1;
  376|       |
  377|   400k|	if (p1->family == p2->family && p1->prefixlen == p2->prefixlen) {
  ------------------
  |  Branch (377:6): [True: 346k, False: 53.9k]
  |  Branch (377:34): [True: 285k, False: 60.4k]
  ------------------
  378|   285k|		if (p1->family == AF_INET)
  ------------------
  |  Branch (378:7): [True: 285k, False: 0]
  ------------------
  379|   285k|			if (IPV4_ADDR_SAME(&p1->u.prefix4, &p2->u.prefix4))
  ------------------
  |  |  342|   285k|#define IPV4_ADDR_SAME(A,B)  ipv4_addr_same((A), (B))
  |  |  ------------------
  |  |  |  Branch (342:30): [True: 68.4k, False: 217k]
  |  |  ------------------
  ------------------
  380|  68.4k|				return 1;
  381|   217k|		if (p1->family == AF_INET6)
  ------------------
  |  Branch (381:7): [True: 0, False: 217k]
  ------------------
  382|      0|			if (IPV6_ADDR_SAME(&p1->u.prefix6.s6_addr,
  ------------------
  |  |  363|      0|#define IPV6_ADDR_SAME(D,S)  (memcmp ((D), (S), IPV6_MAX_BYTELEN) == 0)
  |  |  ------------------
  |  |  |  |  360|      0|#define IPV6_MAX_BYTELEN    16
  |  |  ------------------
  |  |  |  Branch (363:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  383|      0|					   &p2->u.prefix6.s6_addr))
  384|      0|				return 1;
  385|   217k|		if (p1->family == AF_ETHERNET)
  ------------------
  |  |  139|   217k|#define AF_ETHERNET AF_PACKET
  ------------------
  |  Branch (385:7): [True: 0, False: 217k]
  ------------------
  386|      0|			if (!memcmp(&p1->u.prefix_eth, &p2->u.prefix_eth,
  ------------------
  |  Branch (386:8): [True: 0, False: 0]
  ------------------
  387|      0|				    sizeof(struct ethaddr)))
  388|      0|				return 1;
  389|   217k|		if (p1->family == AF_EVPN)
  ------------------
  |  |  154|   217k|#define AF_EVPN (AF_MAX + 1)
  ------------------
  |  Branch (389:7): [True: 0, False: 217k]
  ------------------
  390|      0|			if (!memcmp(&p1->u.prefix_evpn, &p2->u.prefix_evpn,
  ------------------
  |  Branch (390:8): [True: 0, False: 0]
  ------------------
  391|      0|				    sizeof(struct evpn_addr)))
  392|      0|				return 1;
  393|   217k|		if (p1->family == AF_FLOWSPEC) {
  ------------------
  |  |  158|   217k|#define AF_FLOWSPEC (AF_MAX + 2)
  ------------------
  |  Branch (393:7): [True: 0, False: 217k]
  ------------------
  394|      0|			if (p1->u.prefix_flowspec.family !=
  ------------------
  |  Branch (394:8): [True: 0, False: 0]
  ------------------
  395|      0|			    p2->u.prefix_flowspec.family)
  396|      0|				return 0;
  397|      0|			if (p1->u.prefix_flowspec.prefixlen !=
  ------------------
  |  Branch (397:8): [True: 0, False: 0]
  ------------------
  398|      0|			    p2->u.prefix_flowspec.prefixlen)
  399|      0|				return 0;
  400|      0|			if (!memcmp(&p1->u.prefix_flowspec.ptr,
  ------------------
  |  Branch (400:8): [True: 0, False: 0]
  ------------------
  401|      0|				    &p2->u.prefix_flowspec.ptr,
  402|      0|				    p2->u.prefix_flowspec.prefixlen))
  403|      0|				return 1;
  404|      0|		}
  405|   217k|	}
  406|   331k|	return 0;
  407|   400k|}
prefix_cmp:
  421|   540k|{
  422|   540k|	const struct prefix *p1 = up1.p;
  423|   540k|	const struct prefix *p2 = up2.p;
  424|   540k|	int offset;
  425|   540k|	int shift;
  426|   540k|	int i;
  427|       |
  428|       |	/* Set both prefix's head pointer. */
  429|   540k|	const uint8_t *pp1;
  430|   540k|	const uint8_t *pp2;
  431|       |
  432|   540k|	if (p1->family != p2->family)
  ------------------
  |  Branch (432:6): [True: 369, False: 539k]
  ------------------
  433|    369|		return numcmp(p1->family, p2->family);
  ------------------
  |  |  243|    369|	({                                                                     \
  |  |  244|    369|		typeof(a) _cmp_a = (a);                                        \
  |  |  245|    369|		typeof(b) _cmp_b = (b);                                        \
  |  |  246|    369|		(_cmp_a < _cmp_b) ? -1 : ((_cmp_a > _cmp_b) ? 1 : 0);          \
  |  |  ------------------
  |  |  |  Branch (246:3): [True: 4, False: 365]
  |  |  |  Branch (246:29): [True: 365, False: 0]
  |  |  ------------------
  |  |  247|    369|	})
  ------------------
  434|   539k|	if (p1->family == AF_FLOWSPEC) {
  ------------------
  |  |  158|   539k|#define AF_FLOWSPEC (AF_MAX + 2)
  ------------------
  |  Branch (434:6): [True: 0, False: 539k]
  ------------------
  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|   539k|	pp1 = p1->u.val;
  454|   539k|	pp2 = p2->u.val;
  455|       |
  456|   539k|	if (p1->prefixlen != p2->prefixlen)
  ------------------
  |  Branch (456:6): [True: 22.9k, False: 516k]
  ------------------
  457|  22.9k|		return numcmp(p1->prefixlen, p2->prefixlen);
  ------------------
  |  |  243|  22.9k|	({                                                                     \
  |  |  244|  22.9k|		typeof(a) _cmp_a = (a);                                        \
  |  |  245|  22.9k|		typeof(b) _cmp_b = (b);                                        \
  |  |  246|  22.9k|		(_cmp_a < _cmp_b) ? -1 : ((_cmp_a > _cmp_b) ? 1 : 0);          \
  |  |  ------------------
  |  |  |  Branch (246:3): [True: 18.8k, False: 4.08k]
  |  |  |  Branch (246:29): [True: 4.08k, False: 0]
  |  |  ------------------
  |  |  247|  22.9k|	})
  ------------------
  458|   516k|	offset = p1->prefixlen / PNBBY;
  ------------------
  |  |   30|   516k|#define PNBBY 8
  ------------------
  459|   516k|	shift = p1->prefixlen % PNBBY;
  ------------------
  |  |   30|   516k|#define PNBBY 8
  ------------------
  460|       |
  461|   516k|	i = memcmp(pp1, pp2, offset);
  462|   516k|	if (i)
  ------------------
  |  Branch (462:6): [True: 20.0k, False: 496k]
  ------------------
  463|  20.0k|		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|   496k|	if (shift)
  ------------------
  |  Branch (472:6): [True: 413k, False: 82.9k]
  ------------------
  473|   413k|		return numcmp(pp1[offset] & maskbit[shift],
  ------------------
  |  |  243|   413k|	({                                                                     \
  |  |  244|   413k|		typeof(a) _cmp_a = (a);                                        \
  |  |  245|   413k|		typeof(b) _cmp_b = (b);                                        \
  |  |  246|   413k|		(_cmp_a < _cmp_b) ? -1 : ((_cmp_a > _cmp_b) ? 1 : 0);          \
  |  |  ------------------
  |  |  |  Branch (246:3): [True: 454, False: 413k]
  |  |  |  Branch (246:29): [True: 1.01k, False: 412k]
  |  |  ------------------
  |  |  247|   413k|	})
  ------------------
  474|   496k|			      pp2[offset] & maskbit[shift]);
  475|       |
  476|  82.9k|	return 0;
  477|   496k|}
str2prefix_ipv4:
  561|   148k|{
  562|   148k|	int ret;
  563|   148k|	int plen;
  564|   148k|	char *pnt;
  565|   148k|	char *cp;
  566|       |
  567|       |	/* Find slash inside string. */
  568|   148k|	pnt = strchr(str, '/');
  569|       |
  570|       |	/* String doesn't contail slash. */
  571|   148k|	if (pnt == NULL) {
  ------------------
  |  Branch (571:6): [True: 0, False: 148k]
  ------------------
  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|   148k|	} else {
  584|   148k|		cp = XMALLOC(MTYPE_TMP, (pnt - str) + 1);
  ------------------
  |  |  164|   148k|#define XMALLOC(mtype, size)		qmalloc(mtype, size)
  ------------------
  585|   148k|		memcpy(cp, str, pnt - str);
  586|   148k|		*(cp + (pnt - str)) = '\0';
  587|   148k|		ret = inet_pton(AF_INET, cp, &p->prefix);
  588|   148k|		XFREE(MTYPE_TMP, cp);
  ------------------
  |  |  170|   148k|	do {                                                                   \
  |  |  171|   148k|		qfree(mtype, ptr);                                             \
  |  |  172|   148k|		ptr = NULL;                                                    \
  |  |  173|   148k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 148k]
  |  |  ------------------
  ------------------
  589|   148k|		if (ret == 0)
  ------------------
  |  Branch (589:7): [True: 0, False: 148k]
  ------------------
  590|      0|			return 0;
  591|       |
  592|       |		/* Get prefix length. */
  593|   148k|		plen = (uint8_t)atoi(++pnt);
  594|   148k|		if (plen > IPV4_MAX_BITLEN)
  ------------------
  |  |  334|   148k|#define IPV4_MAX_BITLEN    32
  ------------------
  |  Branch (594:7): [True: 0, False: 148k]
  ------------------
  595|      0|			return 0;
  596|       |
  597|   148k|		p->family = AF_INET;
  598|   148k|		p->prefixlen = plen;
  599|   148k|	}
  600|       |
  601|   148k|	return ret;
  602|   148k|}
masklen2ip:
  672|   522k|{
  673|   522k|	assert(masklen >= 0 && masklen <= IPV4_MAX_BITLEN);
  ------------------
  |  |   51|   522k|	({                                                                     \
  |  |   52|   522k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|   522k|			(used)) = {                                            \
  |  |   54|   522k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|   522k|	{                                                                      \
  |  |  |  |  284|   522k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|   522k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|   522k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|   522k|		/* .func = */ func_,                                           \
  |  |  |  |  289|   522k|	}                                                                      \
  |  |  ------------------
  |  |   55|   522k|			.expr = #expr_,                                        \
  |  |   56|   522k|		};                                                             \
  |  |   57|   522k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|   522k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|   522k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|   522k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  1.04M|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 522k]
  |  |  |  Branch (58:25): [True: 522k, False: 0]
  |  |  |  Branch (58:25): [True: 522k, False: 0]
  |  |  ------------------
  |  |   59|   522k|			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|   522k|	})
  ------------------
  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|   522k|	if (sizeof(unsigned long long) > 4)
  ------------------
  |  Branch (679:6): [True: 522k, Folded]
  ------------------
  680|   522k|		netmask->s_addr =
  681|   522k|			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|   522k|}
apply_mask_ipv4:
  702|   522k|{
  703|   522k|	struct in_addr mask;
  704|   522k|	masklen2ip(p->prefixlen, &mask);
  705|   522k|	p->prefix.s_addr &= mask.s_addr;
  706|   522k|}
apply_mask:
  834|   522k|{
  835|   522k|	struct prefix *p = pu.p;
  836|       |
  837|   522k|	switch (p->family) {
  838|   522k|	case AF_INET:
  ------------------
  |  Branch (838:2): [True: 522k, False: 0]
  ------------------
  839|   522k|		apply_mask_ipv4(pu.p4);
  840|   522k|		break;
  841|      0|	case AF_INET6:
  ------------------
  |  Branch (841:2): [True: 0, False: 522k]
  ------------------
  842|      0|		apply_mask_ipv6(pu.p6);
  843|      0|		break;
  844|      0|	default:
  ------------------
  |  Branch (844:2): [True: 0, False: 522k]
  ------------------
  845|      0|		break;
  846|   522k|	}
  847|   522k|	return;
  848|   522k|}
str2prefix:
  905|   148k|{
  906|   148k|	int ret;
  907|       |
  908|   148k|	if (!str || !p)
  ------------------
  |  Branch (908:6): [True: 0, False: 148k]
  |  Branch (908:14): [True: 0, False: 148k]
  ------------------
  909|      0|		return 0;
  910|       |
  911|       |	/* First we try to convert string to struct prefix_ipv4. */
  912|   148k|	ret = str2prefix_ipv4(str, (struct prefix_ipv4 *)p);
  913|   148k|	if (ret)
  ------------------
  |  Branch (913:6): [True: 148k, False: 0]
  ------------------
  914|   148k|		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|  2.66k|{
 1145|  2.66k|	struct prefix *p;
 1146|       |
 1147|  2.66k|	p = XCALLOC(MTYPE_PREFIX, sizeof(*p));
  ------------------
  |  |  165|  2.66k|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
 1148|  2.66k|	return p;
 1149|  2.66k|}
prefix_free_lists:
 1152|  1.69k|{
 1153|  1.69k|	struct prefix *p = arg;
 1154|       |
 1155|  1.69k|	prefix_free(&p);
 1156|  1.69k|}
prefix_free:
 1160|  1.93k|{
 1161|       |	XFREE(MTYPE_PREFIX, *p);
  ------------------
  |  |  170|  1.93k|	do {                                                                   \
  |  |  171|  1.93k|		qfree(mtype, ptr);                                             \
  |  |  172|  1.93k|		ptr = NULL;                                                    \
  |  |  173|  1.93k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 1.93k]
  |  |  ------------------
  ------------------
 1162|  1.93k|}
prefix_hash_key:
 1290|   535k|{
 1291|   535k|	struct prefix copy;
 1292|       |
 1293|   535k|	if (((struct prefix *)pp)->family == AF_FLOWSPEC) {
  ------------------
  |  |  158|   535k|#define AF_FLOWSPEC (AF_MAX + 2)
  ------------------
  |  Branch (1293:6): [True: 0, False: 535k]
  ------------------
 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|   535k|	memset(&copy, 0, sizeof(copy));
 1315|   535k|	prefix_copy(&copy, (struct prefix *)pp);
 1316|   535k|	return jhash(&copy,
 1317|   535k|		     offsetof(struct prefix, u.prefix) + PSIZE(copy.prefixlen),
  ------------------
  |  |  253|   535k|#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
  ------------------
              		     offsetof(struct prefix, u.prefix) + PSIZE(copy.prefixlen),
  ------------------
  |  |  367|   535k|#define PSIZE(a) (((a) + 7) / (8))
  ------------------
 1318|   535k|		     0x55aa5a5a);
 1319|   535k|}
prefix.c:printfrr_i4:
 1530|   202k|{
 1531|   202k|	char cbuf[INET_ADDRSTRLEN];
 1532|   202k|	bool use_star = false;
 1533|   202k|	struct in_addr zero = {};
 1534|       |
 1535|   202k|	if (ea->fmt[0] == 's') {
  ------------------
  |  Branch (1535:6): [True: 0, False: 202k]
  ------------------
 1536|      0|		use_star = true;
 1537|      0|		ea->fmt++;
 1538|      0|	}
 1539|       |
 1540|   202k|	if (!ptr)
  ------------------
  |  Branch (1540:6): [True: 0, False: 202k]
  ------------------
 1541|      0|		return bputs(buf, "(null)");
 1542|       |
 1543|   202k|	if (use_star && !memcmp(ptr, &zero, sizeof(zero)))
  ------------------
  |  Branch (1543:6): [True: 0, False: 202k]
  |  Branch (1543:18): [True: 0, False: 0]
  ------------------
 1544|      0|		return bputch(buf, '*');
 1545|       |
 1546|   202k|	inet_ntop(AF_INET, ptr, cbuf, sizeof(cbuf));
 1547|   202k|	return bputs(buf, cbuf);
 1548|   202k|}

pim_ssm.c:ipv4_mcast_ssm:
  632|     28|{
  633|     28|	uint32_t bits = ntohl(addr->s_addr);
  634|       |
  635|       |	/* 232.0.0.0/8 */
  636|     28|	return (bits & 0xff000000) == 0xe8000000;
  637|     28|}
if.c:ipv4_addr_same:
  339|  1.12k|{
  340|  1.12k|	return (a->s_addr == b->s_addr);
  341|  1.12k|}
prefix.c:ipv4_addr_same:
  339|   285k|{
  340|   285k|	return (a->s_addr == b->s_addr);
  341|   285k|}

bprintfrr:
   18|   289k|{
   19|   289k|	ssize_t ret;
   20|   289k|	va_list ap;
   21|       |
   22|   289k|	va_start(ap, fmt);
   23|   289k|	ret = vbprintfrr(out, fmt, ap);
   24|       |	va_end(ap);
   25|   289k|	return ret;
   26|   289k|}
snprintfrr:
   41|   116k|{
   42|   116k|	struct fbuf fbb = { .buf = out, .pos = out, .len = outsz - 1, };
   43|   116k|	struct fbuf *fb = (out && outsz) ? &fbb : NULL;
  ------------------
  |  Branch (43:21): [True: 116k, False: 0]
  |  Branch (43:28): [True: 116k, False: 0]
  ------------------
   44|   116k|	ssize_t ret;
   45|   116k|	va_list ap;
   46|       |
   47|   116k|	va_start(ap, fmt);
   48|   116k|	ret = vbprintfrr(fb, fmt, ap);
   49|   116k|	va_end(ap);
   50|   116k|	if (fb)
  ------------------
  |  Branch (50:6): [True: 116k, False: 0]
  ------------------
   51|   116k|		fb->pos[0] = '\0';
   52|   116k|	return ret;
   53|   116k|}
printfrr_ext_reg:
  175|     60|{
  176|     60|	uint8_t o;
  177|     60|	ptrdiff_t i;
  178|       |
  179|     60|	if (!printfrr_ext_char(ext->match[0]))
  ------------------
  |  |  102|     60|#define printfrr_ext_char(ch) ((ch) >= 'A' && (ch) <= 'Z')
  |  |  ------------------
  |  |  |  Branch (102:32): [True: 60, False: 0]
  |  |  |  Branch (102:47): [True: 60, False: 0]
  |  |  ------------------
  ------------------
  180|      0|		return;
  181|       |
  182|     60|	o = ext->match[0] - 'A';
  183|     60|	for (i = ext_offsets[o];
  184|     86|			i < MAXEXT && entries[i].fmt[0] &&
  ------------------
  |  |  164|    172|#define MAXEXT 64
  ------------------
  |  Branch (184:4): [True: 86, False: 0]
  |  Branch (184:18): [True: 74, False: 12]
  ------------------
  185|     74|			memcmp(entries[i].fmt, ext->match, 2) < 0;
  ------------------
  |  Branch (185:4): [True: 26, False: 48]
  ------------------
  186|     60|			i++)
  187|     26|		;
  188|     60|	if (i == MAXEXT)
  ------------------
  |  |  164|     60|#define MAXEXT 64
  ------------------
  |  Branch (188:6): [True: 0, False: 60]
  ------------------
  189|      0|		return;
  190|    828|	for (o++; o <= 'Z' - 'A'; o++)
  ------------------
  |  Branch (190:12): [True: 768, False: 60]
  ------------------
  191|    768|		ext_offsets[o]++;
  192|       |
  193|     60|	memmove(entries + i + 1, entries + i,
  194|     60|			(MAXEXT - i - 1) * sizeof(entries[0]));
  ------------------
  |  |  164|     60|#define MAXEXT 64
  ------------------
  195|     60|	memmove(exts + i + 1, exts + i,
  196|     60|			(MAXEXT - i - 1) * sizeof(exts[0]));
  ------------------
  |  |  164|     60|#define MAXEXT 64
  ------------------
  197|       |
  198|     60|	memcpy(entries[i].fmt, ext->match, 2);
  199|     60|	exts[i] = ext;
  200|     60|}
printfrr_extp:
  204|   492k|{
  205|   492k|	const char *fmt = ea->fmt;
  206|   492k|	const struct printfrr_ext *ext;
  207|   492k|	size_t i;
  208|       |
  209|   578k|	for (i = ext_offsets[fmt[0] - 'A']; i < MAXEXT; i++) {
  ------------------
  |  |  164|   578k|#define MAXEXT 64
  ------------------
  |  Branch (209:38): [True: 578k, False: 0]
  ------------------
  210|   578k|		if (!entries[i].fmt[0] || entries[i].fmt[0] > fmt[0])
  ------------------
  |  Branch (210:7): [True: 0, False: 578k]
  |  Branch (210:29): [True: 0, False: 578k]
  ------------------
  211|      0|			return -1;
  212|   578k|		if (entries[i].fmt[1] && entries[i].fmt[1] != fmt[1])
  ------------------
  |  Branch (212:7): [True: 578k, False: 0]
  |  Branch (212:28): [True: 86.4k, False: 492k]
  ------------------
  213|  86.4k|			continue;
  214|   492k|		ext = exts[i];
  215|   492k|		if (!ext->print_ptr)
  ------------------
  |  Branch (215:7): [True: 0, False: 492k]
  ------------------
  216|      0|			continue;
  217|   492k|		if (strncmp(ext->match, fmt, strlen(ext->match)))
  ------------------
  |  Branch (217:7): [True: 0, False: 492k]
  ------------------
  218|      0|			continue;
  219|   492k|		ea->fmt += strlen(ext->match);
  220|   492k|		return ext->print_ptr(buf, ea, ptr);
  221|   492k|	}
  222|      0|	return -1;
  223|   492k|}

vfprintf.c:io_init:
   59|   405k|{
   60|   405k|	iop->cb = cb;
   61|   405k|	iop->avail = cb ? cb->len - (cb->pos - cb->buf) : 0;
  ------------------
  |  Branch (61:15): [True: 405k, False: 0]
  ------------------
   62|   405k|}
vfprintf.c:io_print:
   70|   380k|{
   71|   380k|	size_t copylen = len;
   72|       |
   73|   380k|	if (!iop->cb)
  ------------------
  |  Branch (73:6): [True: 0, False: 380k]
  ------------------
   74|      0|		return 0;
   75|   380k|	if (iop->avail < copylen)
  ------------------
  |  Branch (75:6): [True: 0, False: 380k]
  ------------------
   76|      0|		copylen = iop->avail;
   77|       |
   78|   380k|	memcpy(iop->cb->pos, ptr, copylen);
   79|   380k|	iop->avail -= copylen;
   80|   380k|	iop->cb->pos += copylen;
   81|   380k|	return 0;
   82|   380k|}
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|  60.5k|{
  102|  60.5k|	int n;
  103|       |
  104|  60.5k|	while (howmany > 0) {
  ------------------
  |  Branch (104:9): [True: 0, False: 60.5k]
  ------------------
  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|  60.5k|	return (0);
  111|  60.5k|}

vbprintfrr:
  151|   405k|{
  152|   405k|	const char *fmt;	/* format string */
  153|   405k|	int ch;			/* character from fmt */
  154|   405k|	int n, n2;		/* handy integer (short term usage) */
  155|   405k|	const char *cp;		/* handy char pointer (short term usage) */
  156|   405k|	int flags;		/* flags as above */
  157|   405k|	int ret;		/* return value accumulator */
  158|   405k|	int width;		/* width from format (%8d), or 0 */
  159|   405k|	int prec;		/* precision from format; <0 for N/A */
  160|   405k|	int saved_errno;
  161|   405k|	char sign;		/* sign prefix (' ', '+', '-', or \0) */
  162|       |
  163|   405k|	u_long	ulval = 0;	/* integer arguments %[diouxX] */
  164|   405k|	uintmax_t ujval = 0;	/* %j, %ll, %q, %t, %z integers */
  165|   405k|	void *ptrval;		/* %p */
  166|   405k|	int base;		/* base for [diouxX] conversion */
  167|   405k|	int dprec;		/* a copy of prec if [diouxX], 0 otherwise */
  168|   405k|	int realsz;		/* field size expanded by dprec, sign, etc */
  169|   405k|	int size;		/* size of converted field or string */
  170|   405k|	int prsize;             /* max size of printed field */
  171|   405k|	const char *xdigs;     	/* digits for %[xX] conversion */
  172|   405k|	struct io_state io;	/* I/O buffering state */
  173|   405k|	char buf[BUF];		/* buffer with space for digits of uintmax_t */
  174|   405k|	char ox[2];		/* space for 0x; ox[1] is either x, X, or \0 */
  175|   405k|	union arg *argtable;    /* args, built due to positional arg */
  176|   405k|	union arg statargtable [STATIC_ARG_TBL_SIZE];
  177|   405k|	int nextarg;            /* 1-based argument index */
  178|   405k|	va_list orgap;          /* original argument pointer */
  179|   405k|	char *convbuf;		/* wide to multibyte conversion result */
  180|   405k|	char *extstart = NULL;	/* where printfrr_ext* started printing */
  181|   405k|	struct fbuf cb_copy, *cb;
  182|   405k|	struct fmt_outpos *opos;
  183|       |
  184|   405k|	static const char xdigs_lower[16] = "0123456789abcdef";
  185|   405k|	static const char xdigs_upper[16] = "0123456789ABCDEF";
  186|       |
  187|       |	/* BEWARE, these `goto error' on error. */
  188|   405k|#define	PRINT(ptr, len) { \
  189|   405k|	if (io_print(&io, (ptr), (len)))	\
  190|   405k|		goto error; \
  191|   405k|}
  192|   405k|#define	PAD(howmany, with) { \
  193|   405k|	if (io_pad(&io, (howmany), (with))) \
  194|   405k|		goto error; \
  195|   405k|}
  196|   405k|#define	PRINTANDPAD(p, ep, len, with) {	\
  197|   405k|	if (io_printandpad(&io, (p), (ep), (len), (with))) \
  198|   405k|		goto error; \
  199|   405k|}
  200|   405k|#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|   405k|#define GETARG(type) \
  208|   405k|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  209|   405k|	    (nextarg++, va_arg(ap, type)))
  210|       |
  211|       |	/*
  212|       |	 * To extend shorts properly, we need both signed and unsigned
  213|       |	 * argument extraction methods.
  214|       |	 */
  215|   405k|#define	SARG() \
  216|   405k|	(flags&LONGINT ? GETARG(long) : \
  217|   405k|	    flags&SHORTINT ? (long)(short)GETARG(int) : \
  218|   405k|	    flags&CHARINT ? (long)(signed char)GETARG(int) : \
  219|   405k|	    (long)GETARG(int))
  220|   405k|#define	UARG() \
  221|   405k|	(flags&LONGINT ? GETARG(u_long) : \
  222|   405k|	    flags&SHORTINT ? (u_long)(u_short)GETARG(int) : \
  223|   405k|	    flags&CHARINT ? (u_long)(u_char)GETARG(int) : \
  224|   405k|	    (u_long)GETARG(u_int))
  225|   405k|#define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT|LONGDBL)
  226|   405k|#define SJARG() \
  227|   405k|	(flags&LONGDBL ? GETARG(int64_t) : \
  228|   405k|	    flags&INTMAXT ? GETARG(intmax_t) : \
  229|   405k|	    flags&SIZET ? (intmax_t)GETARG(ssize_t) : \
  230|   405k|	    flags&PTRDIFFT ? (intmax_t)GETARG(ptrdiff_t) : \
  231|   405k|	    (intmax_t)GETARG(long long))
  232|   405k|#define	UJARG() \
  233|   405k|	(flags&LONGDBL ? GETARG(uint64_t) : \
  234|   405k|	    flags&INTMAXT ? GETARG(uintmax_t) : \
  235|   405k|	    flags&SIZET ? (uintmax_t)GETARG(size_t) : \
  236|   405k|	    flags&PTRDIFFT ? (uintmax_t)GETARG(ptrdiff_t) : \
  237|   405k|	    (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|   405k|#define GETASTER(val) \
  244|   405k|	n2 = 0; \
  245|   405k|	cp = fmt; \
  246|   405k|	while (is_digit(*cp)) { \
  247|   405k|		n2 = 10 * n2 + to_digit(*cp); \
  248|   405k|		cp++; \
  249|   405k|	} \
  250|   405k|	if (*cp == '$') { \
  251|   405k|		int hold = nextarg; \
  252|   405k|		if (argtable == NULL) { \
  253|   405k|			argtable = statargtable; \
  254|   405k|			if (_frr_find_arguments (fmt0, orgap, &argtable)) { \
  255|   405k|				ret = EOF; \
  256|   405k|				goto error; \
  257|   405k|			} \
  258|   405k|		} \
  259|   405k|		nextarg = n2; \
  260|   405k|		val = GETARG (int); \
  261|   405k|		nextarg = hold; \
  262|   405k|		fmt = ++cp; \
  263|   405k|	} else { \
  264|   405k|		val = GETARG (int); \
  265|   405k|	}
  266|       |
  267|   405k|	xdigs = xdigs_lower;
  268|   405k|	saved_errno = errno;
  269|   405k|	convbuf = NULL;
  270|   405k|	fmt = (char *)fmt0;
  271|   405k|	argtable = NULL;
  272|   405k|	nextarg = 1;
  273|   405k|	va_copy(orgap, ap);
  274|       |
  275|   405k|	if (cb_in) {
  ------------------
  |  Branch (275:6): [True: 405k, False: 0]
  ------------------
  276|       |		/* prevent printfrr exts from polluting cb->outpos */
  277|   405k|		cb_copy = *cb_in;
  278|   405k|		cb_copy.outpos = NULL;
  279|   405k|		cb_copy.outpos_n = cb_copy.outpos_i = 0;
  280|   405k|		cb = &cb_copy;
  281|   405k|	} else
  282|      0|		cb = NULL;
  283|       |
  284|   405k|	io_init(&io, cb);
  285|   405k|	ret = 0;
  286|       |
  287|       |	/*
  288|       |	 * Scan the format for conversions (`%' character).
  289|       |	 */
  290|   928k|	for (;;) {
  291|  1.79M|		for (cp = fmt; (ch = *fmt) != '\0' && ch != '%'; fmt++)
  ------------------
  |  Branch (291:18): [True: 1.38M, False: 405k]
  |  Branch (291:41): [True: 864k, False: 522k]
  ------------------
  292|   864k|			/* void */;
  293|   928k|		if ((n = fmt - cp) != 0) {
  ------------------
  |  Branch (293:7): [True: 350k, False: 578k]
  ------------------
  294|   350k|			if ((unsigned)ret + n > INT_MAX) {
  ------------------
  |  Branch (294:8): [True: 0, False: 350k]
  ------------------
  295|      0|				ret = EOF;
  296|      0|				errno = EOVERFLOW;
  297|      0|				goto error;
  298|      0|			}
  299|   350k|			PRINT(cp, n);
  ------------------
  |  |  188|   350k|#define	PRINT(ptr, len) { \
  |  |  189|   350k|	if (io_print(&io, (ptr), (len)))	\
  |  |  ------------------
  |  |  |  Branch (189:6): [True: 0, False: 350k]
  |  |  ------------------
  |  |  190|   350k|		goto error; \
  |  |  191|   350k|}
  ------------------
  300|   350k|			ret += n;
  301|   350k|		}
  302|   928k|		if (ch == '\0')
  ------------------
  |  Branch (302:7): [True: 405k, False: 522k]
  ------------------
  303|   405k|			goto done;
  304|   522k|		fmt++;		/* skip over '%' */
  305|       |
  306|   522k|		flags = 0;
  307|   522k|		dprec = 0;
  308|   522k|		width = -1;
  309|   522k|		prec = -1;
  310|   522k|		sign = '\0';
  311|   522k|		ox[1] = '\0';
  312|       |
  313|   522k|		if (cb_in && cb_in->outpos_i < cb_in->outpos_n)
  ------------------
  |  Branch (313:7): [True: 522k, False: 0]
  |  Branch (313:16): [True: 0, False: 522k]
  ------------------
  314|      0|			opos = &cb_in->outpos[cb_in->outpos_i];
  315|   522k|		else
  316|   522k|			opos = NULL;
  317|       |
  318|   522k|rflag:		ch = *fmt++;
  319|   522k|reswitch:	switch (ch) {
  320|      0|		case ' ':
  ------------------
  |  Branch (320:3): [True: 0, False: 522k]
  ------------------
  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: 522k]
  ------------------
  330|      0|			flags |= ALT;
  ------------------
  |  |   43|      0|#define	ALT		0x001		/* alternate form */
  ------------------
  331|      0|			goto rflag;
  332|      0|		case '*':
  ------------------
  |  Branch (332:3): [True: 0, False: 522k]
  ------------------
  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: 522k]
  ------------------
  345|      0|			flags |= LADJUST;
  ------------------
  |  |   44|      0|#define	LADJUST		0x004		/* left adjustment */
  ------------------
  346|      0|			goto rflag;
  347|      0|		case '+':
  ------------------
  |  Branch (347:3): [True: 0, False: 522k]
  ------------------
  348|      0|			sign = '+';
  349|      0|			goto rflag;
  350|      0|		case '\'':
  ------------------
  |  Branch (350:3): [True: 0, False: 522k]
  ------------------
  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: 522k]
  ------------------
  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: 522k]
  ------------------
  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: 522k]
  |  Branch (372:13): [True: 0, False: 522k]
  |  Branch (372:23): [True: 0, False: 522k]
  |  Branch (372:33): [True: 0, False: 522k]
  ------------------
  373|      0|		case '5': case '6': case '7': case '8': case '9':
  ------------------
  |  Branch (373:3): [True: 0, False: 522k]
  |  Branch (373:13): [True: 0, False: 522k]
  |  Branch (373:23): [True: 0, False: 522k]
  |  Branch (373:33): [True: 0, False: 522k]
  |  Branch (373:43): [True: 0, False: 522k]
  ------------------
  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: 522k]
  ------------------
  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: 522k]
  ------------------
  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: 522k]
  ------------------
  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: 522k]
  ------------------
  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: 522k]
  ------------------
  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: 522k]
  ------------------
  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: 522k]
  ------------------
  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: 522k]
  ------------------
  423|      0|			flags |= LONGINT;
  ------------------
  |  |   46|      0|#define	LONGINT		0x010		/* long integer */
  ------------------
  424|       |			/*FALLTHROUGH*/
  425|      0|		case 'c':
  ------------------
  |  Branch (425:3): [True: 0, False: 522k]
  ------------------
  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: 522k]
  ------------------
  449|      0|			flags |= LONGINT;
  ------------------
  |  |   46|      0|#define	LONGINT		0x010		/* long integer */
  ------------------
  450|       |			/*FALLTHROUGH*/
  451|      2|		case 'd':
  ------------------
  |  Branch (451:3): [True: 2, False: 522k]
  ------------------
  452|      2|		case 'i':
  ------------------
  |  Branch (452:3): [True: 0, False: 522k]
  ------------------
  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: 522k]
  ------------------
  494|      0|		case 'A':
  ------------------
  |  Branch (494:3): [True: 0, False: 522k]
  ------------------
  495|      0|		case 'e':
  ------------------
  |  Branch (495:3): [True: 0, False: 522k]
  ------------------
  496|      0|		case 'E':
  ------------------
  |  Branch (496:3): [True: 0, False: 522k]
  ------------------
  497|      0|		case 'f':
  ------------------
  |  Branch (497:3): [True: 0, False: 522k]
  ------------------
  498|      0|		case 'F':
  ------------------
  |  Branch (498:3): [True: 0, False: 522k]
  ------------------
  499|      0|		case 'g':
  ------------------
  |  Branch (499:3): [True: 0, False: 522k]
  ------------------
  500|      0|		case 'G':
  ------------------
  |  Branch (500:3): [True: 0, False: 522k]
  ------------------
  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: 522k]
  ------------------
  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: 522k]
  ------------------
  540|      0|			flags |= LONGINT;
  ------------------
  |  |   46|      0|#define	LONGINT		0x010		/* long integer */
  ------------------
  541|       |			/*FALLTHROUGH*/
  542|      0|		case 'o':
  ------------------
  |  Branch (542:3): [True: 0, False: 522k]
  ------------------
  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|   492k|		case 'p':
  ------------------
  |  Branch (549:3): [True: 492k, False: 30.2k]
  ------------------
  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|   492k|			ptrval = GETARG(void *);
  ------------------
  |  |  208|   492k|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  ------------------
  |  |  |  Branch (208:3): [True: 0, False: 492k]
  |  |  ------------------
  |  |  209|   492k|	    (nextarg++, va_arg(ap, type)))
  ------------------
  558|   492k|			if (printfrr_ext_char(fmt[0])) {
  ------------------
  |  |  102|   492k|#define printfrr_ext_char(ch) ((ch) >= 'A' && (ch) <= 'Z')
  |  |  ------------------
  |  |  |  Branch (102:32): [True: 492k, False: 0]
  |  |  |  Branch (102:47): [True: 492k, False: 0]
  |  |  ------------------
  ------------------
  559|   492k|				struct printfrr_eargs ea = {
  560|   492k|					.fmt = fmt,
  561|   492k|					.precision = prec,
  562|   492k|					.width = width,
  563|   492k|					.alt_repr = !!(flags & ALT),
  ------------------
  |  |   43|   492k|#define	ALT		0x001		/* alternate form */
  ------------------
  564|   492k|					.leftadj = !!(flags & LADJUST),
  ------------------
  |  |   44|   492k|#define	LADJUST		0x004		/* left adjustment */
  ------------------
  565|   492k|				};
  566|       |
  567|   492k|				if (cb)
  ------------------
  |  Branch (567:9): [True: 492k, False: 0]
  ------------------
  568|   492k|					extstart = cb->pos;
  569|       |
  570|   492k|				size = printfrr_extp(cb, &ea, ptrval);
  571|   492k|				if (size >= 0) {
  ------------------
  |  Branch (571:9): [True: 492k, False: 0]
  ------------------
  572|   492k|					fmt = ea.fmt;
  573|   492k|					width = ea.width;
  574|   492k|					goto ext_printed;
  575|   492k|				}
  576|   492k|			}
  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: 522k]
  ------------------
  584|      0|			flags |= LONGINT;
  ------------------
  |  |   46|      0|#define	LONGINT		0x010		/* long integer */
  ------------------
  585|       |			/*FALLTHROUGH*/
  586|  30.2k|		case 's':
  ------------------
  |  Branch (586:3): [True: 30.2k, False: 492k]
  ------------------
  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|  30.2k|			if ((cp = GETARG(char *)) == NULL)
  ------------------
  |  |  208|  30.2k|	((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \
  |  |  ------------------
  |  |  |  Branch (208:3): [True: 0, False: 30.2k]
  |  |  ------------------
  |  |  209|  30.2k|	    (nextarg++, va_arg(ap, type)))
  ------------------
  |  Branch (604:8): [True: 0, False: 30.2k]
  ------------------
  605|      0|				cp = "(null)";
  606|  30.2k|			size = (prec >= 0) ? strnlen(cp, prec) : strlen(cp);
  ------------------
  |  Branch (606:11): [True: 0, False: 30.2k]
  ------------------
  607|  30.2k|			sign = '\0';
  608|  30.2k|			break;
  609|      0|		case 'U':
  ------------------
  |  Branch (609:3): [True: 0, False: 522k]
  ------------------
  610|      0|			flags |= LONGINT;
  ------------------
  |  |   46|      0|#define	LONGINT		0x010		/* long integer */
  ------------------
  611|       |			/*FALLTHROUGH*/
  612|      0|		case 'u':
  ------------------
  |  Branch (612:3): [True: 0, False: 522k]
  ------------------
  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: 522k]
  ------------------
  620|      0|			xdigs = xdigs_upper;
  621|      0|			goto hex;
  622|      0|		case 'x':
  ------------------
  |  Branch (622:3): [True: 0, False: 522k]
  ------------------
  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: 522k]
  ------------------
  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|   522k|		}
  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|  30.2k|		if (width < 0)
  ------------------
  |  Branch (697:7): [True: 30.2k, False: 0]
  ------------------
  698|  30.2k|			width = 0;
  699|       |
  700|  30.2k|		realsz = dprec > size ? dprec : size;
  ------------------
  |  Branch (700:12): [True: 0, False: 30.2k]
  ------------------
  701|  30.2k|		if (sign)
  ------------------
  |  Branch (701:7): [True: 0, False: 30.2k]
  ------------------
  702|      0|			realsz++;
  703|  30.2k|		if (ox[1])
  ------------------
  |  Branch (703:7): [True: 0, False: 30.2k]
  ------------------
  704|      0|			realsz += 2;
  705|       |
  706|  30.2k|		prsize = width > realsz ? width : realsz;
  ------------------
  |  Branch (706:12): [True: 0, False: 30.2k]
  ------------------
  707|  30.2k|		if ((unsigned int)ret + prsize > INT_MAX) {
  ------------------
  |  Branch (707:7): [True: 0, False: 30.2k]
  ------------------
  708|      0|			ret = EOF;
  709|      0|			errno = EOVERFLOW;
  710|      0|			goto error;
  711|      0|		}
  712|       |
  713|       |		/* right-adjusting blank padding */
  714|  30.2k|		if ((flags & (LADJUST|ZEROPAD)) == 0)
  ------------------
  |  |   44|  30.2k|#define	LADJUST		0x004		/* left adjustment */
  ------------------
              		if ((flags & (LADJUST|ZEROPAD)) == 0)
  ------------------
  |  |   49|  30.2k|#define	ZEROPAD		0x080		/* zero (as opposed to blank) pad */
  ------------------
  |  Branch (714:7): [True: 30.2k, False: 0]
  ------------------
  715|  30.2k|			PAD(width - realsz, blanks);
  ------------------
  |  |  192|  30.2k|#define	PAD(howmany, with) { \
  |  |  193|  30.2k|	if (io_pad(&io, (howmany), (with))) \
  |  |  ------------------
  |  |  |  Branch (193:6): [True: 0, False: 30.2k]
  |  |  ------------------
  |  |  194|  30.2k|		goto error; \
  |  |  195|  30.2k|}
  ------------------
  716|       |
  717|  30.2k|		if (opos)
  ------------------
  |  Branch (717:7): [True: 0, False: 30.2k]
  ------------------
  718|      0|			opos->off_start = cb->pos - cb->buf;
  719|       |
  720|       |		/* prefix */
  721|  30.2k|		if (sign)
  ------------------
  |  Branch (721:7): [True: 0, False: 30.2k]
  ------------------
  722|  30.2k|			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|  30.2k|		if (ox[1]) {	/* ox[1] is either x, X, or \0 */
  ------------------
  |  Branch (724:7): [True: 0, False: 30.2k]
  ------------------
  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|  30.2k|		if ((flags & (LADJUST|ZEROPAD)) == ZEROPAD)
  ------------------
  |  |   44|  30.2k|#define	LADJUST		0x004		/* left adjustment */
  ------------------
              		if ((flags & (LADJUST|ZEROPAD)) == ZEROPAD)
  ------------------
  |  |   49|  30.2k|#define	ZEROPAD		0x080		/* zero (as opposed to blank) pad */
  ------------------
              		if ((flags & (LADJUST|ZEROPAD)) == ZEROPAD)
  ------------------
  |  |   49|  30.2k|#define	ZEROPAD		0x080		/* zero (as opposed to blank) pad */
  ------------------
  |  Branch (730:7): [True: 0, False: 30.2k]
  ------------------
  731|  30.2k|			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|  30.2k|		PAD(dprec - size, zeroes);
  ------------------
  |  |  192|  30.2k|#define	PAD(howmany, with) { \
  |  |  193|  30.2k|	if (io_pad(&io, (howmany), (with))) \
  |  |  ------------------
  |  |  |  Branch (193:6): [True: 0, False: 30.2k]
  |  |  ------------------
  |  |  194|  30.2k|		goto error; \
  |  |  195|  30.2k|}
  ------------------
  736|  30.2k|		PRINT(cp, size);
  ------------------
  |  |  188|  30.2k|#define	PRINT(ptr, len) { \
  |  |  189|  30.2k|	if (io_print(&io, (ptr), (len)))	\
  |  |  ------------------
  |  |  |  Branch (189:6): [True: 0, False: 30.2k]
  |  |  ------------------
  |  |  190|  30.2k|		goto error; \
  |  |  191|  30.2k|}
  ------------------
  737|       |
  738|  30.2k|		if (opos) {
  ------------------
  |  Branch (738:7): [True: 0, False: 30.2k]
  ------------------
  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|  30.2k|		if (flags & LADJUST)
  ------------------
  |  |   44|  30.2k|#define	LADJUST		0x004		/* left adjustment */
  ------------------
  |  Branch (744:7): [True: 0, False: 30.2k]
  ------------------
  745|  30.2k|			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|  30.2k|		ret += prsize;
  749|       |
  750|  30.2k|		FLUSH();	/* copy out the I/O vectors */
  ------------------
  |  |  200|  30.2k|#define	FLUSH() do { } while (0)
  |  |  ------------------
  |  |  |  Branch (200:31): [Folded, False: 30.2k]
  |  |  ------------------
  ------------------
  751|  30.2k|		continue;
  752|       |
  753|   492k|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|   492k|		if (width < 0)
  ------------------
  |  Branch (762:7): [True: 492k, False: 0]
  ------------------
  763|   492k|			width = 0;
  764|       |
  765|   492k|		realsz = size;
  766|   492k|		prsize = width > realsz ? width : realsz;
  ------------------
  |  Branch (766:12): [True: 0, False: 492k]
  ------------------
  767|   492k|		if ((unsigned int)ret + prsize > INT_MAX) {
  ------------------
  |  Branch (767:7): [True: 0, False: 492k]
  ------------------
  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|   492k|		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: 492k, False: 0]
  |  Branch (777:13): [True: 0, False: 492k]
  |  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|   492k|		io.avail = cb ? cb->len - (cb->pos - cb->buf) : 0;
  ------------------
  |  Branch (797:14): [True: 492k, False: 0]
  ------------------
  798|       |
  799|   492k|		if (opos && extstart <= cb->pos) {
  ------------------
  |  Branch (799:7): [True: 0, False: 492k]
  |  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|   492k|		if (flags & LADJUST)
  ------------------
  |  |   44|   492k|#define	LADJUST		0x004		/* left adjustment */
  ------------------
  |  Branch (806:7): [True: 0, False: 492k]
  ------------------
  807|   492k|			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|   492k|		ret += prsize;
  811|       |
  812|   492k|		FLUSH();	/* copy out the I/O vectors */
  ------------------
  |  |  200|   492k|#define	FLUSH() do { } while (0)
  |  |  ------------------
  |  |  |  Branch (200:31): [Folded, False: 492k]
  |  |  ------------------
  ------------------
  813|   492k|	}
  814|   405k|done:
  815|   405k|	FLUSH();
  ------------------
  |  |  200|   405k|#define	FLUSH() do { } while (0)
  |  |  ------------------
  |  |  |  Branch (200:31): [Folded, False: 405k]
  |  |  ------------------
  ------------------
  816|   405k|error:
  817|   405k|	va_end(orgap);
  818|   405k|	if (convbuf != NULL)
  ------------------
  |  Branch (818:6): [True: 0, False: 405k]
  ------------------
  819|      0|		free(convbuf);
  820|   405k|	if ((argtable != NULL) && (argtable != statargtable))
  ------------------
  |  Branch (820:6): [True: 0, False: 405k]
  |  Branch (820:28): [True: 0, False: 0]
  ------------------
  821|      0|		free (argtable);
  822|   405k|	if (cb_in)
  ------------------
  |  Branch (822:6): [True: 405k, False: 0]
  ------------------
  823|   405k|		cb_in->pos = cb->pos;
  824|   405k|	return (ret);
  825|       |	/* NOTREACHED */
  826|   405k|}

pim_addr.c:_printreg_printfrr_pimaddr:
  202|      2|	{                                                                      \
  203|      2|		printfrr_ext_reg(&_printext_##print_fn);                       \
  204|      2|	}                                                                      \
pim_addr.c:_printreg_printfrr_sgaddr:
  202|      2|	{                                                                      \
  203|      2|		printfrr_ext_reg(&_printext_##print_fn);                       \
  204|      2|	}                                                                      \
pim_addr.c:bputch:
  243|    430|{
  244|    430|	if (buf && buf->pos < buf->buf + buf->len)
  ------------------
  |  Branch (244:6): [True: 430, False: 0]
  |  Branch (244:13): [True: 430, False: 0]
  ------------------
  245|    430|		*buf->pos++ = ch;
  246|    430|	return 1;
  247|    430|}
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|	}                                                                      \
prefix.c:bputs:
  228|   202k|{
  229|   202k|	size_t len = strlen(str);
  230|   202k|	size_t ncopy;
  231|       |
  232|   202k|	if (!buf)
  ------------------
  |  Branch (232:6): [True: 0, False: 202k]
  ------------------
  233|      0|		return len;
  234|       |
  235|   202k|	ncopy = MIN(len, (size_t)(buf->buf + buf->len - buf->pos));
  ------------------
  |  Branch (235:10): [True: 202k, False: 0]
  ------------------
  236|   202k|	memcpy(buf->pos, str, ncopy);
  237|   202k|	buf->pos += ncopy;
  238|       |
  239|   202k|	return len;
  240|   202k|}
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_raise:
  482|      1|{
  483|      1|#ifdef FUZZING
  484|      1|	return NULL;
  485|      0|#endif
  486|      0|	int save_errno = errno;
  487|      0|	struct zebra_privs_refs_t *refs;
  488|       |
  489|      0|	if (!privs)
  ------------------
  |  Branch (489:6): [True: 0, False: 0]
  ------------------
  490|      0|		return NULL;
  491|       |
  492|       |	/*
  493|       |	 * Serialize 'raise' operations; particularly important for
  494|       |	 * OSes where privs are process-wide.
  495|       |	 */
  496|      0|	frr_with_mutex (&(privs->mutex)) {
  ------------------
  |  |  223|      0|	for (pthread_mutex_t MACRO_REPEAT(_frr_with_mutex, ##__VA_ARGS__)      \
  |  |  ------------------
  |  |  |  |  173|      0|	MACRO_VARIANT(_MACRO_REPEAT, ##__VA_ARGS__)(NAME, ##__VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	_CONCAT(NAME, _MACRO_VARIANT(0, ##__VA_ARGS__, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  141|      0|#define _CONCAT(a, b) _CONCAT2(a,b)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  140|      0|#define _CONCAT2(a, b) a ## b
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  156|      0|	NAME(A1)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  223|      0|	for (pthread_mutex_t MACRO_REPEAT(_frr_with_mutex, ##__VA_ARGS__)      \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  218|      0|	*NAMECTR(_mtx_) __attribute__((                                        \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  219|      0|		unused, cleanup(_frr_mtx_unlock))) = _frr_mtx_lock(mutex),     \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  145|      0|			_10, _9, _8, _7, _6, _5, _4, _3, _2, _1, _0))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  224|      0|	     *_once = NULL; _once == NULL; _once = (void *)1)                  \
  |  |  ------------------
  |  |  |  Branch (224:22): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  497|       |		/* Locate ref-counting object to use */
  498|      0|		refs = get_privs_refs(privs);
  499|       |
  500|      0|		if (++(refs->refcount) == 1) {
  ------------------
  |  Branch (500:7): [True: 0, False: 0]
  ------------------
  501|      0|			errno = 0;
  502|      0|			if (privs->change(ZPRIVS_RAISE)) {
  ------------------
  |  Branch (502:8): [True: 0, False: 0]
  ------------------
  503|      0|				zlog_err("%s: Failed to raise privileges (%s)",
  ------------------
  |  |  130|      0|#define zlog_err(...) 0
  ------------------
  504|      0|					 funcname, safe_strerror(errno));
  505|      0|			}
  506|      0|			errno = save_errno;
  507|      0|			refs->raised_in_funcname = funcname;
  508|      0|		}
  509|      0|	}
  510|       |
  511|      0|	return privs;
  512|      0|}
_zprivs_lower:
  515|      1|{
  516|      1|#ifdef FUZZING
  517|      1|	return;
  518|      0|#endif
  519|      0|	int save_errno = errno;
  520|      0|	struct zebra_privs_refs_t *refs;
  521|       |
  522|      0|	if (!*privs)
  ------------------
  |  Branch (522:6): [True: 0, False: 0]
  ------------------
  523|      0|		return;
  524|       |
  525|       |	/* Serialize 'lower privs' operation - particularly important
  526|       |	 * when OS privs are process-wide.
  527|       |	 */
  528|      0|	frr_with_mutex (&(*privs)->mutex) {
  ------------------
  |  |  223|      0|	for (pthread_mutex_t MACRO_REPEAT(_frr_with_mutex, ##__VA_ARGS__)      \
  |  |  ------------------
  |  |  |  |  173|      0|	MACRO_VARIANT(_MACRO_REPEAT, ##__VA_ARGS__)(NAME, ##__VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|	_CONCAT(NAME, _MACRO_VARIANT(0, ##__VA_ARGS__, \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  141|      0|#define _CONCAT(a, b) _CONCAT2(a,b)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  140|      0|#define _CONCAT2(a, b) a ## b
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  156|      0|	NAME(A1)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  223|      0|	for (pthread_mutex_t MACRO_REPEAT(_frr_with_mutex, ##__VA_ARGS__)      \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  218|      0|	*NAMECTR(_mtx_) __attribute__((                                        \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  219|      0|		unused, cleanup(_frr_mtx_unlock))) = _frr_mtx_lock(mutex),     \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  145|      0|			_10, _9, _8, _7, _6, _5, _4, _3, _2, _1, _0))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  224|      0|	     *_once = NULL; _once == NULL; _once = (void *)1)                  \
  |  |  ------------------
  |  |  |  Branch (224:22): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  529|      0|		refs = get_privs_refs(*privs);
  530|       |
  531|      0|		if (--(refs->refcount) == 0) {
  ------------------
  |  Branch (531:7): [True: 0, False: 0]
  ------------------
  532|      0|			errno = 0;
  533|      0|			if ((*privs)->change(ZPRIVS_LOWER)) {
  ------------------
  |  Branch (533:8): [True: 0, False: 0]
  ------------------
  534|      0|				zlog_err("%s: Failed to lower privileges (%s)",
  ------------------
  |  |  130|      0|#define zlog_err(...) 0
  ------------------
  535|      0|					 refs->raised_in_funcname,
  536|      0|					 safe_strerror(errno));
  537|      0|			}
  538|      0|			errno = save_errno;
  539|      0|			refs->raised_in_funcname = NULL;
  540|      0|		}
  541|      0|	}
  542|       |
  543|       |	*privs = NULL;
  544|      0|}
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|      3|{
   41|      3|	node->type = type;
   42|      3|	pthread_rwlock_wrlock(&nodes_lock);
   43|      3|	do {
   44|      3|		node->nid = (uint64_t)frr_weak_random();
   45|      3|		node->nid ^= (uint64_t)frr_weak_random() << 32;
   46|      3|	} while (!node->nid || qobj_nodes_find(&nodes, node));
  ------------------
  |  Branch (46:11): [True: 0, False: 3]
  |  Branch (46:25): [True: 0, False: 3]
  ------------------
   47|      3|	qobj_nodes_add(&nodes, node);
   48|      3|	pthread_rwlock_unlock(&nodes_lock);
   49|      3|}
qobj_init:
   92|      1|{
   93|       |	pthread_rwlock_init(&nodes_lock, NULL);
   94|      1|	qobj_nodes_init(&nodes);
   95|      1|}
qobj.c:qobj_hash:
   19|      5|{
   20|      5|	return (uint32_t)node->nid;
   21|      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|}

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|}

stream_new:
   90|      5|{
   91|      5|	struct stream *s;
   92|       |
   93|      5|	assert(size > 0);
  ------------------
  |  |   51|      5|	({                                                                     \
  |  |   52|      5|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|      5|			(used)) = {                                            \
  |  |   54|      5|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|      5|	{                                                                      \
  |  |  |  |  284|      5|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      5|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      5|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      5|		/* .func = */ func_,                                           \
  |  |  |  |  289|      5|	}                                                                      \
  |  |  ------------------
  |  |   55|      5|			.expr = #expr_,                                        \
  |  |   56|      5|		};                                                             \
  |  |   57|      5|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      5|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      5|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      5|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|      5|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 5]
  |  |  |  Branch (58:24): [True: 5, False: 0]
  |  |  ------------------
  |  |   59|      5|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|      5|	})
  ------------------
   94|       |
   95|      5|	s = XMALLOC(MTYPE_STREAM, sizeof(struct stream) + size);
  ------------------
  |  |  164|      5|#define XMALLOC(mtype, size)		qmalloc(mtype, size)
  ------------------
   96|       |
   97|      5|	s->getp = s->endp = 0;
   98|       |	s->next = NULL;
   99|      5|	s->size = size;
  100|      5|	return s;
  101|      5|}
stream_get_endp:
  185|  60.2k|{
  186|  60.2k|	STREAM_VERIFY_SANE(s);
  ------------------
  |  |   52|  60.2k|	do {                                                                   \
  |  |   53|  60.2k|		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   23|   120k|#define GETP_VALID(S, G) ((G) <= (S)->endp)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:26): [True: 60.2k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   25|  60.2k|#define ENDP_VALID(S, E) ((E) <= (S)->size)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (25:26): [True: 60.2k, 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|  60.2k|		assert(GETP_VALID(S, (S)->getp));                              \
  |  |  ------------------
  |  |  |  |   51|  60.2k|	({                                                                     \
  |  |  |  |   52|  60.2k|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|  60.2k|			(used)) = {                                            \
  |  |  |  |   54|  60.2k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|  60.2k|	{                                                                      \
  |  |  |  |  |  |  284|  60.2k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|  60.2k|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|  60.2k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|  60.2k|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|  60.2k|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|  60.2k|			.expr = #expr_,                                        \
  |  |  |  |   56|  60.2k|		};                                                             \
  |  |  |  |   57|  60.2k|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|  60.2k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|  60.2k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|  60.2k|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|  60.2k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 60.2k]
  |  |  |  |  |  Branch (58:24): [True: 60.2k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|  60.2k|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|  60.2k|	})
  |  |  ------------------
  |  |   57|  60.2k|		assert(ENDP_VALID(S, (S)->endp));                              \
  |  |  ------------------
  |  |  |  |   51|  60.2k|	({                                                                     \
  |  |  |  |   52|  60.2k|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|  60.2k|			(used)) = {                                            \
  |  |  |  |   54|  60.2k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|  60.2k|	{                                                                      \
  |  |  |  |  |  |  284|  60.2k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|  60.2k|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|  60.2k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|  60.2k|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|  60.2k|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|  60.2k|			.expr = #expr_,                                        \
  |  |  |  |   56|  60.2k|		};                                                             \
  |  |  |  |   57|  60.2k|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|  60.2k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|  60.2k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|  60.2k|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|  60.2k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 60.2k]
  |  |  |  |  |  Branch (58:24): [True: 60.2k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|  60.2k|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|  60.2k|	})
  |  |  ------------------
  |  |   58|  60.2k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (58:11): [Folded, False: 60.2k]
  |  |  ------------------
  ------------------
  187|  60.2k|	return s->endp;
  188|  60.2k|}
stream_putc:
  708|   301k|{
  709|   301k|	STREAM_VERIFY_SANE(s);
  ------------------
  |  |   52|   301k|	do {                                                                   \
  |  |   53|   301k|		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   23|   602k|#define GETP_VALID(S, G) ((G) <= (S)->endp)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:26): [True: 301k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   25|   301k|#define ENDP_VALID(S, E) ((E) <= (S)->size)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (25:26): [True: 301k, 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|   301k|		assert(GETP_VALID(S, (S)->getp));                              \
  |  |  ------------------
  |  |  |  |   51|   301k|	({                                                                     \
  |  |  |  |   52|   301k|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|   301k|			(used)) = {                                            \
  |  |  |  |   54|   301k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|   301k|	{                                                                      \
  |  |  |  |  |  |  284|   301k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|   301k|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|   301k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|   301k|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|   301k|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|   301k|			.expr = #expr_,                                        \
  |  |  |  |   56|   301k|		};                                                             \
  |  |  |  |   57|   301k|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|   301k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|   301k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|   301k|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|   301k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 301k]
  |  |  |  |  |  Branch (58:24): [True: 301k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|   301k|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|   301k|	})
  |  |  ------------------
  |  |   57|   301k|		assert(ENDP_VALID(S, (S)->endp));                              \
  |  |  ------------------
  |  |  |  |   51|   301k|	({                                                                     \
  |  |  |  |   52|   301k|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|   301k|			(used)) = {                                            \
  |  |  |  |   54|   301k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|   301k|	{                                                                      \
  |  |  |  |  |  |  284|   301k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|   301k|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|   301k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|   301k|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|   301k|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|   301k|			.expr = #expr_,                                        \
  |  |  |  |   56|   301k|		};                                                             \
  |  |  |  |   57|   301k|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|   301k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|   301k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|   301k|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|   301k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 301k]
  |  |  |  |  |  Branch (58:24): [True: 301k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|   301k|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|   301k|	})
  |  |  ------------------
  |  |   58|   301k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (58:11): [Folded, False: 301k]
  |  |  ------------------
  ------------------
  710|       |
  711|   301k|	if (STREAM_WRITEABLE(s) < sizeof(uint8_t)) {
  ------------------
  |  |  119|   301k|#define STREAM_WRITEABLE(S) ((S)->size - (S)->endp)
  ------------------
  |  Branch (711:6): [True: 0, False: 301k]
  ------------------
  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|   301k|	s->data[s->endp++] = c;
  717|   301k|	return sizeof(uint8_t);
  718|   301k|}
stream_putw:
  722|   241k|{
  723|   241k|	STREAM_VERIFY_SANE(s);
  ------------------
  |  |   52|   241k|	do {                                                                   \
  |  |   53|   241k|		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   23|   482k|#define GETP_VALID(S, G) ((G) <= (S)->endp)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:26): [True: 241k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   25|   241k|#define ENDP_VALID(S, E) ((E) <= (S)->size)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (25:26): [True: 241k, 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|   241k|		assert(GETP_VALID(S, (S)->getp));                              \
  |  |  ------------------
  |  |  |  |   51|   241k|	({                                                                     \
  |  |  |  |   52|   241k|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|   241k|			(used)) = {                                            \
  |  |  |  |   54|   241k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|   241k|	{                                                                      \
  |  |  |  |  |  |  284|   241k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|   241k|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|   241k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|   241k|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|   241k|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|   241k|			.expr = #expr_,                                        \
  |  |  |  |   56|   241k|		};                                                             \
  |  |  |  |   57|   241k|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|   241k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|   241k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|   241k|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|   241k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 241k]
  |  |  |  |  |  Branch (58:24): [True: 241k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|   241k|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|   241k|	})
  |  |  ------------------
  |  |   57|   241k|		assert(ENDP_VALID(S, (S)->endp));                              \
  |  |  ------------------
  |  |  |  |   51|   241k|	({                                                                     \
  |  |  |  |   52|   241k|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|   241k|			(used)) = {                                            \
  |  |  |  |   54|   241k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|   241k|	{                                                                      \
  |  |  |  |  |  |  284|   241k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|   241k|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|   241k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|   241k|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|   241k|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|   241k|			.expr = #expr_,                                        \
  |  |  |  |   56|   241k|		};                                                             \
  |  |  |  |   57|   241k|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|   241k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|   241k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|   241k|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|   241k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 241k]
  |  |  |  |  |  Branch (58:24): [True: 241k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|   241k|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|   241k|	})
  |  |  ------------------
  |  |   58|   241k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (58:11): [Folded, False: 241k]
  |  |  ------------------
  ------------------
  724|       |
  725|   241k|	if (STREAM_WRITEABLE(s) < sizeof(uint16_t)) {
  ------------------
  |  |  119|   241k|#define STREAM_WRITEABLE(S) ((S)->size - (S)->endp)
  ------------------
  |  Branch (725:6): [True: 0, False: 241k]
  ------------------
  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|   241k|	s->data[s->endp++] = (uint8_t)(w >> 8);
  731|   241k|	s->data[s->endp++] = (uint8_t)w;
  732|       |
  733|   241k|	return 2;
  734|   241k|}
stream_putl:
  755|  60.2k|{
  756|  60.2k|	STREAM_VERIFY_SANE(s);
  ------------------
  |  |   52|  60.2k|	do {                                                                   \
  |  |   53|  60.2k|		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   23|   120k|#define GETP_VALID(S, G) ((G) <= (S)->endp)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:26): [True: 60.2k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   25|  60.2k|#define ENDP_VALID(S, E) ((E) <= (S)->size)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (25:26): [True: 60.2k, 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|  60.2k|		assert(GETP_VALID(S, (S)->getp));                              \
  |  |  ------------------
  |  |  |  |   51|  60.2k|	({                                                                     \
  |  |  |  |   52|  60.2k|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|  60.2k|			(used)) = {                                            \
  |  |  |  |   54|  60.2k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|  60.2k|	{                                                                      \
  |  |  |  |  |  |  284|  60.2k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|  60.2k|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|  60.2k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|  60.2k|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|  60.2k|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|  60.2k|			.expr = #expr_,                                        \
  |  |  |  |   56|  60.2k|		};                                                             \
  |  |  |  |   57|  60.2k|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|  60.2k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|  60.2k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|  60.2k|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|  60.2k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 60.2k]
  |  |  |  |  |  Branch (58:24): [True: 60.2k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|  60.2k|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|  60.2k|	})
  |  |  ------------------
  |  |   57|  60.2k|		assert(ENDP_VALID(S, (S)->endp));                              \
  |  |  ------------------
  |  |  |  |   51|  60.2k|	({                                                                     \
  |  |  |  |   52|  60.2k|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|  60.2k|			(used)) = {                                            \
  |  |  |  |   54|  60.2k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|  60.2k|	{                                                                      \
  |  |  |  |  |  |  284|  60.2k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|  60.2k|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|  60.2k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|  60.2k|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|  60.2k|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|  60.2k|			.expr = #expr_,                                        \
  |  |  |  |   56|  60.2k|		};                                                             \
  |  |  |  |   57|  60.2k|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|  60.2k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|  60.2k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|  60.2k|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|  60.2k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 60.2k]
  |  |  |  |  |  Branch (58:24): [True: 60.2k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|  60.2k|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|  60.2k|	})
  |  |  ------------------
  |  |   58|  60.2k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (58:11): [Folded, False: 60.2k]
  |  |  ------------------
  ------------------
  757|       |
  758|  60.2k|	if (STREAM_WRITEABLE(s) < sizeof(uint32_t)) {
  ------------------
  |  |  119|  60.2k|#define STREAM_WRITEABLE(S) ((S)->size - (S)->endp)
  ------------------
  |  Branch (758:6): [True: 0, False: 60.2k]
  ------------------
  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|  60.2k|	s->data[s->endp++] = (uint8_t)(l >> 24);
  764|  60.2k|	s->data[s->endp++] = (uint8_t)(l >> 16);
  765|  60.2k|	s->data[s->endp++] = (uint8_t)(l >> 8);
  766|  60.2k|	s->data[s->endp++] = (uint8_t)l;
  767|       |
  768|  60.2k|	return 4;
  769|  60.2k|}
stream_putw_at:
  828|  60.2k|{
  829|  60.2k|	STREAM_VERIFY_SANE(s);
  ------------------
  |  |   52|  60.2k|	do {                                                                   \
  |  |   53|  60.2k|		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   23|   120k|#define GETP_VALID(S, G) ((G) <= (S)->endp)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:26): [True: 60.2k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   25|  60.2k|#define ENDP_VALID(S, E) ((E) <= (S)->size)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (25:26): [True: 60.2k, 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|  60.2k|		assert(GETP_VALID(S, (S)->getp));                              \
  |  |  ------------------
  |  |  |  |   51|  60.2k|	({                                                                     \
  |  |  |  |   52|  60.2k|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|  60.2k|			(used)) = {                                            \
  |  |  |  |   54|  60.2k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|  60.2k|	{                                                                      \
  |  |  |  |  |  |  284|  60.2k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|  60.2k|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|  60.2k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|  60.2k|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|  60.2k|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|  60.2k|			.expr = #expr_,                                        \
  |  |  |  |   56|  60.2k|		};                                                             \
  |  |  |  |   57|  60.2k|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|  60.2k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|  60.2k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|  60.2k|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|  60.2k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 60.2k]
  |  |  |  |  |  Branch (58:24): [True: 60.2k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|  60.2k|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|  60.2k|	})
  |  |  ------------------
  |  |   57|  60.2k|		assert(ENDP_VALID(S, (S)->endp));                              \
  |  |  ------------------
  |  |  |  |   51|  60.2k|	({                                                                     \
  |  |  |  |   52|  60.2k|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|  60.2k|			(used)) = {                                            \
  |  |  |  |   54|  60.2k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|  60.2k|	{                                                                      \
  |  |  |  |  |  |  284|  60.2k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|  60.2k|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|  60.2k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|  60.2k|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|  60.2k|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|  60.2k|			.expr = #expr_,                                        \
  |  |  |  |   56|  60.2k|		};                                                             \
  |  |  |  |   57|  60.2k|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|  60.2k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|  60.2k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|  60.2k|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|  60.2k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 60.2k]
  |  |  |  |  |  Branch (58:24): [True: 60.2k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|  60.2k|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|  60.2k|	})
  |  |  ------------------
  |  |   58|  60.2k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (58:11): [Folded, False: 60.2k]
  |  |  ------------------
  ------------------
  830|       |
  831|  60.2k|	if (!PUT_AT_VALID(s, putp + sizeof(uint16_t))) {
  ------------------
  |  |   24|  60.2k|#define PUT_AT_VALID(S,G) GETP_VALID(S,G)
  |  |  ------------------
  |  |  |  |   23|  60.2k|#define GETP_VALID(S, G) ((G) <= (S)->endp)
  |  |  ------------------
  ------------------
  |  Branch (831:6): [True: 0, False: 60.2k]
  ------------------
  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|  60.2k|	s->data[putp] = (uint8_t)(w >> 8);
  837|  60.2k|	s->data[putp + 1] = (uint8_t)w;
  838|       |
  839|  60.2k|	return 2;
  840|  60.2k|}
stream_put_in_addr:
  910|  60.2k|{
  911|  60.2k|	STREAM_VERIFY_SANE(s);
  ------------------
  |  |   52|  60.2k|	do {                                                                   \
  |  |   53|  60.2k|		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   23|   120k|#define GETP_VALID(S, G) ((G) <= (S)->endp)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:26): [True: 60.2k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   25|  60.2k|#define ENDP_VALID(S, E) ((E) <= (S)->size)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (25:26): [True: 60.2k, 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|  60.2k|		assert(GETP_VALID(S, (S)->getp));                              \
  |  |  ------------------
  |  |  |  |   51|  60.2k|	({                                                                     \
  |  |  |  |   52|  60.2k|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|  60.2k|			(used)) = {                                            \
  |  |  |  |   54|  60.2k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|  60.2k|	{                                                                      \
  |  |  |  |  |  |  284|  60.2k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|  60.2k|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|  60.2k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|  60.2k|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|  60.2k|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|  60.2k|			.expr = #expr_,                                        \
  |  |  |  |   56|  60.2k|		};                                                             \
  |  |  |  |   57|  60.2k|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|  60.2k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|  60.2k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|  60.2k|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|  60.2k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 60.2k]
  |  |  |  |  |  Branch (58:24): [True: 60.2k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|  60.2k|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|  60.2k|	})
  |  |  ------------------
  |  |   57|  60.2k|		assert(ENDP_VALID(S, (S)->endp));                              \
  |  |  ------------------
  |  |  |  |   51|  60.2k|	({                                                                     \
  |  |  |  |   52|  60.2k|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|  60.2k|			(used)) = {                                            \
  |  |  |  |   54|  60.2k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|  60.2k|	{                                                                      \
  |  |  |  |  |  |  284|  60.2k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|  60.2k|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|  60.2k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|  60.2k|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|  60.2k|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|  60.2k|			.expr = #expr_,                                        \
  |  |  |  |   56|  60.2k|		};                                                             \
  |  |  |  |   57|  60.2k|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|  60.2k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|  60.2k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|  60.2k|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|  60.2k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 60.2k]
  |  |  |  |  |  Branch (58:24): [True: 60.2k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|  60.2k|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|  60.2k|	})
  |  |  ------------------
  |  |   58|  60.2k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (58:11): [Folded, False: 60.2k]
  |  |  ------------------
  ------------------
  912|       |
  913|  60.2k|	if (STREAM_WRITEABLE(s) < sizeof(uint32_t)) {
  ------------------
  |  |  119|  60.2k|#define STREAM_WRITEABLE(S) ((S)->size - (S)->endp)
  ------------------
  |  Branch (913:6): [True: 0, False: 60.2k]
  ------------------
  914|      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]
  |  |  ------------------
  ------------------
  915|      0|		return 0;
  916|      0|	}
  917|       |
  918|  60.2k|	memcpy(s->data + s->endp, addr, sizeof(uint32_t));
  919|  60.2k|	s->endp += sizeof(uint32_t);
  920|       |
  921|  60.2k|	return sizeof(uint32_t);
  922|  60.2k|}
stream_reset:
 1201|  60.2k|{
 1202|  60.2k|	STREAM_VERIFY_SANE(s);
  ------------------
  |  |   52|  60.2k|	do {                                                                   \
  |  |   53|  60.2k|		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   23|   120k|#define GETP_VALID(S, G) ((G) <= (S)->endp)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (23:26): [True: 60.2k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               		if (!(GETP_VALID(S, (S)->getp) && ENDP_VALID(S, (S)->endp))) { \
  |  |  ------------------
  |  |  |  |   25|  60.2k|#define ENDP_VALID(S, E) ((E) <= (S)->size)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (25:26): [True: 60.2k, 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|  60.2k|		assert(GETP_VALID(S, (S)->getp));                              \
  |  |  ------------------
  |  |  |  |   51|  60.2k|	({                                                                     \
  |  |  |  |   52|  60.2k|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|  60.2k|			(used)) = {                                            \
  |  |  |  |   54|  60.2k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|  60.2k|	{                                                                      \
  |  |  |  |  |  |  284|  60.2k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|  60.2k|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|  60.2k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|  60.2k|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|  60.2k|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|  60.2k|			.expr = #expr_,                                        \
  |  |  |  |   56|  60.2k|		};                                                             \
  |  |  |  |   57|  60.2k|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|  60.2k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|  60.2k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|  60.2k|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|  60.2k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 60.2k]
  |  |  |  |  |  Branch (58:24): [True: 60.2k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|  60.2k|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|  60.2k|	})
  |  |  ------------------
  |  |   57|  60.2k|		assert(ENDP_VALID(S, (S)->endp));                              \
  |  |  ------------------
  |  |  |  |   51|  60.2k|	({                                                                     \
  |  |  |  |   52|  60.2k|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|  60.2k|			(used)) = {                                            \
  |  |  |  |   54|  60.2k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|  60.2k|	{                                                                      \
  |  |  |  |  |  |  284|  60.2k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|  60.2k|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|  60.2k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|  60.2k|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|  60.2k|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|  60.2k|			.expr = #expr_,                                        \
  |  |  |  |   56|  60.2k|		};                                                             \
  |  |  |  |   57|  60.2k|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|  60.2k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|  60.2k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|  60.2k|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|  60.2k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 60.2k]
  |  |  |  |  |  Branch (58:24): [True: 60.2k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|  60.2k|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|  60.2k|	})
  |  |  ------------------
  |  |   58|  60.2k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (58:11): [Folded, False: 60.2k]
  |  |  ------------------
  ------------------
 1203|       |
 1204|  60.2k|	s->getp = s->endp = 0;
 1205|  60.2k|}
stream_fifo_new:
 1227|      1|{
 1228|      1|	struct stream_fifo *new;
 1229|       |
 1230|      1|	new = XMALLOC(MTYPE_STREAM_FIFO, sizeof(struct stream_fifo));
  ------------------
  |  |  164|      1|#define XMALLOC(mtype, size)		qmalloc(mtype, size)
  ------------------
 1231|      1|	stream_fifo_init(new);
 1232|      1|	return new;
 1233|      1|}
stream_fifo_init:
 1236|      1|{
 1237|      1|	memset(fifo, 0, sizeof(struct stream_fifo));
 1238|       |	pthread_mutex_init(&fifo->mtx, NULL);
 1239|      1|}

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|     10|{
   25|     10|	size_t src_length = strlen(src);
   26|       |
   27|     10|	if (__builtin_expect(src_length >= destsize, 0)) {
  ------------------
  |  Branch (27:6): [True: 0, False: 10]
  ------------------
   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|     10|		memcpy(dest, src, src_length + 1);
   43|     10|	return src_length;
   44|     10|}

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|      2|{
   36|      2|	struct route_table *rt;
   37|       |
   38|      2|	rt = XCALLOC(MTYPE_ROUTE_TABLE, sizeof(struct route_table));
  ------------------
  |  |  165|      2|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
   39|      2|	rt->delegate = delegate;
   40|      2|	rn_hash_node_init(&rt->hash);
   41|      2|	return rt;
   42|      2|}
route_node_match:
  183|  25.7M|{
  184|  25.7M|	const struct prefix *p = pu.p;
  185|  25.7M|	struct route_node *node;
  186|  25.7M|	struct route_node *matched;
  187|       |
  188|  25.7M|	matched = NULL;
  189|  25.7M|	node = table->top;
  190|       |
  191|       |	/* Walk down tree.  If there is matched route then store it to
  192|       |	   matched. */
  193|  99.8M|	while (node && node->p.prefixlen <= p->prefixlen
  ------------------
  |  Branch (193:9): [True: 96.1M, False: 3.71M]
  |  Branch (193:17): [True: 96.1M, False: 689]
  ------------------
  194|  96.1M|	       && prefix_match(&node->p, p)) {
  ------------------
  |  Branch (194:12): [True: 74.2M, False: 21.8M]
  ------------------
  195|  74.2M|		if (node->info)
  ------------------
  |  Branch (195:7): [True: 43.3M, False: 30.9M]
  ------------------
  196|  43.3M|			matched = node;
  197|       |
  198|  74.2M|		if (node->p.prefixlen == p->prefixlen)
  ------------------
  |  Branch (198:7): [True: 154k, False: 74.1M]
  ------------------
  199|   154k|			break;
  200|       |
  201|  74.1M|		node = node->link[prefix_bit(&p->u.prefix, node->p.prefixlen)];
  202|  74.1M|	}
  203|       |
  204|       |	/* If matched route found, return it. */
  205|  25.7M|	if (matched)
  ------------------
  |  Branch (205:6): [True: 12.3M, False: 13.4M]
  ------------------
  206|  12.3M|		return route_lock_node(matched);
  207|       |
  208|  13.4M|	return NULL;
  209|  25.7M|}
route_node_lookup:
  240|   463k|{
  241|   463k|	struct route_node rn, *node;
  242|   463k|	prefix_copy(&rn.p, pu.p);
  243|   463k|	apply_mask(&rn.p);
  244|       |
  245|   463k|	node = rn_hash_node_find(&table->hash, &rn);
  246|   463k|	return (node && node->info) ? route_lock_node(node) : NULL;
  ------------------
  |  Branch (246:10): [True: 443k, False: 19.8k]
  |  Branch (246:18): [True: 397k, False: 46.1k]
  ------------------
  247|   463k|}
route_node_get:
  264|  58.9k|{
  265|  58.9k|	if (frrtrace_enabled(frr_libfrr, route_node_get)) {
  ------------------
  |  |   62|  58.9k|#define frrtrace_enabled(...) false
  ------------------
  |  Branch (265:6): [Folded, False: 58.9k]
  ------------------
  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|  58.9k|	struct route_node search;
  272|  58.9k|	struct prefix *p = &search.p;
  273|       |
  274|  58.9k|	prefix_copy(p, pu.p);
  275|  58.9k|	apply_mask(p);
  276|       |
  277|  58.9k|	struct route_node *new;
  278|  58.9k|	struct route_node *node;
  279|  58.9k|	struct route_node *match;
  280|  58.9k|	uint16_t prefixlen = p->prefixlen;
  281|  58.9k|	const uint8_t *prefix = &p->u.prefix;
  282|       |
  283|  58.9k|	node = rn_hash_node_find(&table->hash, &search);
  284|  58.9k|	if (node && node->info)
  ------------------
  |  Branch (284:6): [True: 51.2k, False: 7.75k]
  |  Branch (284:14): [True: 8.56k, False: 42.6k]
  ------------------
  285|  8.56k|		return route_lock_node(node);
  286|       |
  287|  50.3k|	match = NULL;
  288|  50.3k|	node = table->top;
  289|   318k|	while (node && node->p.prefixlen <= prefixlen
  ------------------
  |  Branch (289:9): [True: 317k, False: 462]
  |  Branch (289:17): [True: 315k, False: 2.29k]
  ------------------
  290|   315k|	       && prefix_match(&node->p, p)) {
  ------------------
  |  Branch (290:12): [True: 310k, False: 5.00k]
  ------------------
  291|   310k|		if (node->p.prefixlen == prefixlen)
  ------------------
  |  Branch (291:7): [True: 42.6k, False: 267k]
  ------------------
  292|  42.6k|			return route_lock_node(node);
  293|       |
  294|   267k|		match = node;
  295|   267k|		node = node->link[prefix_bit(prefix, node->p.prefixlen)];
  296|   267k|	}
  297|       |
  298|  7.75k|	if (node == NULL) {
  ------------------
  |  Branch (298:6): [True: 462, False: 7.29k]
  ------------------
  299|    462|		new = route_node_set(table, p);
  300|    462|		if (match)
  ------------------
  |  Branch (300:7): [True: 460, False: 2]
  ------------------
  301|    460|			set_link(match, new);
  302|      2|		else
  303|      2|			table->top = new;
  304|  7.29k|	} else {
  305|  7.29k|		new = route_node_new(table);
  306|  7.29k|		route_common(&node->p, p, &new->p);
  307|  7.29k|		new->p.family = p->family;
  308|  7.29k|		new->table = table;
  309|  7.29k|		set_link(new, node);
  310|  7.29k|		rn_hash_node_add(&table->hash, new);
  311|       |
  312|  7.29k|		if (match)
  ------------------
  |  Branch (312:7): [True: 7.29k, False: 2]
  ------------------
  313|  7.29k|			set_link(match, new);
  314|      2|		else
  315|      2|			table->top = new;
  316|       |
  317|  7.29k|		if (new->p.prefixlen != p->prefixlen) {
  ------------------
  |  Branch (317:7): [True: 5.22k, False: 2.07k]
  ------------------
  318|  5.22k|			match = new;
  319|  5.22k|			new = route_node_set(table, p);
  320|  5.22k|			set_link(match, new);
  321|  5.22k|			table->count++;
  322|  5.22k|		}
  323|  7.29k|	}
  324|  7.75k|	table->count++;
  325|  7.75k|	route_lock_node(new);
  326|       |
  327|  7.75k|	return new;
  328|  50.3k|}
route_node_delete:
  332|  59.1k|{
  333|  59.1k|	struct route_node *child;
  334|  59.1k|	struct route_node *parent;
  335|       |
  336|  59.1k|	assert(node->lock == 0);
  ------------------
  |  |   51|  59.1k|	({                                                                     \
  |  |   52|  59.1k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  59.1k|			(used)) = {                                            \
  |  |   54|  59.1k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  59.1k|	{                                                                      \
  |  |  |  |  284|  59.1k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  59.1k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  59.1k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  59.1k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  59.1k|	}                                                                      \
  |  |  ------------------
  |  |   55|  59.1k|			.expr = #expr_,                                        \
  |  |   56|  59.1k|		};                                                             \
  |  |   57|  59.1k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  59.1k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  59.1k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  59.1k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  59.1k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 59.1k]
  |  |  |  Branch (58:24): [True: 59.1k, False: 0]
  |  |  ------------------
  |  |   59|  59.1k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  59.1k|	})
  ------------------
  337|  59.1k|	assert(node->info == NULL);
  ------------------
  |  |   51|  59.1k|	({                                                                     \
  |  |   52|  59.1k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  59.1k|			(used)) = {                                            \
  |  |   54|  59.1k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  59.1k|	{                                                                      \
  |  |  |  |  284|  59.1k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  59.1k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  59.1k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  59.1k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  59.1k|	}                                                                      \
  |  |  ------------------
  |  |   55|  59.1k|			.expr = #expr_,                                        \
  |  |   56|  59.1k|		};                                                             \
  |  |   57|  59.1k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  59.1k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  59.1k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  59.1k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  59.1k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 59.1k]
  |  |  |  Branch (58:24): [True: 59.1k, False: 0]
  |  |  ------------------
  |  |   59|  59.1k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  59.1k|	})
  ------------------
  338|       |
  339|  59.1k|	if (node->l_left && node->l_right)
  ------------------
  |  |  128|   118k|#define l_left   link[0]
  ------------------
              	if (node->l_left && node->l_right)
  ------------------
  |  |  129|  51.5k|#define l_right  link[1]
  ------------------
  |  Branch (339:6): [True: 51.5k, False: 7.59k]
  |  Branch (339:22): [True: 47.2k, False: 4.36k]
  ------------------
  340|  47.2k|		return;
  341|       |
  342|  11.9k|	if (node->l_left)
  ------------------
  |  |  128|  11.9k|#define l_left   link[0]
  ------------------
  |  Branch (342:6): [True: 4.36k, False: 7.59k]
  ------------------
  343|  4.36k|		child = node->l_left;
  ------------------
  |  |  128|  4.36k|#define l_left   link[0]
  ------------------
  344|  7.59k|	else
  345|  7.59k|		child = node->l_right;
  ------------------
  |  |  129|  7.59k|#define l_right  link[1]
  ------------------
  346|       |
  347|  11.9k|	parent = node->parent;
  348|       |
  349|  11.9k|	if (child)
  ------------------
  |  Branch (349:6): [True: 6.78k, False: 5.17k]
  ------------------
  350|  6.78k|		child->parent = parent;
  351|       |
  352|  11.9k|	if (parent) {
  ------------------
  |  Branch (352:6): [True: 11.9k, False: 0]
  ------------------
  353|  11.9k|		if (parent->l_left == node)
  ------------------
  |  |  128|  11.9k|#define l_left   link[0]
  ------------------
  |  Branch (353:7): [True: 6.99k, False: 4.97k]
  ------------------
  354|  6.99k|			parent->l_left = child;
  ------------------
  |  |  128|  6.99k|#define l_left   link[0]
  ------------------
  355|  4.97k|		else
  356|  4.97k|			parent->l_right = child;
  ------------------
  |  |  129|  4.97k|#define l_right  link[1]
  ------------------
  357|  11.9k|	} else
  358|      0|		node->table->top = child;
  359|       |
  360|  11.9k|	node->table->count--;
  361|       |
  362|  11.9k|	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|  11.9k|	route_node_free(node->table, node);
  375|       |
  376|       |	/* If parent node is stub then delete it also. */
  377|  11.9k|	if (parent && parent->lock == 0)
  ------------------
  |  Branch (377:6): [True: 11.9k, False: 0]
  |  Branch (377:16): [True: 9.37k, False: 2.58k]
  ------------------
  378|  9.37k|		route_node_delete(parent);
  379|  11.9k|}
route_node_create:
  479|  12.9k|{
  480|  12.9k|	struct route_node *node;
  481|  12.9k|	node = XCALLOC(MTYPE_ROUTE_NODE, sizeof(struct route_node));
  ------------------
  |  |  165|  12.9k|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  482|  12.9k|	return node;
  483|  12.9k|}
route_node_destroy:
  492|  11.9k|{
  493|       |	XFREE(MTYPE_ROUTE_NODE, node);
  ------------------
  |  |  170|  11.9k|	do {                                                                   \
  |  |  171|  11.9k|		qfree(mtype, ptr);                                             \
  |  |  172|  11.9k|		ptr = NULL;                                                    \
  |  |  173|  11.9k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 11.9k]
  |  |  ------------------
  ------------------
  494|  11.9k|}
route_table_init:
  512|      2|{
  513|      2|	return route_table_init_with_delegate(&default_delegate);
  514|      2|}
table.c:route_table_hash_cmp:
   24|   494k|{
   25|   494k|	return prefix_cmp(&a->p, &b->p);
   26|   494k|}
table.c:route_node_set:
   58|  5.68k|{
   59|  5.68k|	struct route_node *node;
   60|       |
   61|  5.68k|	node = route_node_new(table);
   62|       |
   63|  5.68k|	prefix_copy(&node->p, prefix);
   64|  5.68k|	node->table = table;
   65|       |
   66|  5.68k|	rn_hash_node_add(&node->table->hash, node);
   67|       |
   68|  5.68k|	return node;
   69|  5.68k|}
table.c:set_link:
  173|  20.2k|{
  174|  20.2k|	unsigned int bit = prefix_bit(&new->p.u.prefix, node->p.prefixlen);
  175|       |
  176|  20.2k|	node->link[bit] = new;
  177|  20.2k|	new->parent = node;
  178|  20.2k|}
table.c:route_node_new:
   51|  12.9k|{
   52|  12.9k|	return table->delegate->create_node(table->delegate, table);
   53|  12.9k|}
table.c:route_common:
  137|  7.29k|{
  138|  7.29k|	int i;
  139|  7.29k|	uint8_t diff;
  140|  7.29k|	uint8_t mask;
  141|  7.29k|	const uint8_t *np;
  142|  7.29k|	const uint8_t *pp;
  143|  7.29k|	uint8_t *newp;
  144|       |
  145|  7.29k|	if (n->family == AF_FLOWSPEC)
  ------------------
  |  |  158|  7.29k|#define AF_FLOWSPEC (AF_MAX + 2)
  ------------------
  |  Branch (145:6): [True: 0, False: 7.29k]
  ------------------
  146|      0|		return prefix_copy(new, p);
  147|  7.29k|	np = (const uint8_t *)&n->u.prefix;
  148|  7.29k|	pp = (const uint8_t *)&p->u.prefix;
  149|       |
  150|  7.29k|	newp = &new->u.prefix;
  151|       |
  152|  21.9k|	for (i = 0; i < p->prefixlen / 8; i++) {
  ------------------
  |  Branch (152:14): [True: 18.5k, False: 3.37k]
  ------------------
  153|  18.5k|		if (np[i] == pp[i])
  ------------------
  |  Branch (153:7): [True: 14.6k, False: 3.92k]
  ------------------
  154|  14.6k|			newp[i] = np[i];
  155|  3.92k|		else
  156|  3.92k|			break;
  157|  18.5k|	}
  158|       |
  159|  7.29k|	new->prefixlen = i * 8;
  160|       |
  161|  7.29k|	if (new->prefixlen != p->prefixlen) {
  ------------------
  |  Branch (161:6): [True: 5.92k, False: 1.37k]
  ------------------
  162|  5.92k|		diff = np[i] ^ pp[i];
  163|  5.92k|		mask = 0x80;
  164|  34.5k|		while (new->prefixlen < p->prefixlen && !(mask & diff)) {
  ------------------
  |  Branch (164:10): [True: 33.8k, False: 699]
  |  Branch (164:43): [True: 28.6k, False: 5.22k]
  ------------------
  165|  28.6k|			mask >>= 1;
  166|  28.6k|			new->prefixlen++;
  167|  28.6k|		}
  168|  5.92k|		newp[i] = np[i] & maskbit[new->prefixlen % 8];
  169|  5.92k|	}
  170|  7.29k|}
table.c:route_node_free:
   73|  11.9k|{
   74|  11.9k|	if (table->cleanup)
  ------------------
  |  Branch (74:6): [True: 0, False: 11.9k]
  ------------------
   75|      0|		table->cleanup(table, node);
   76|  11.9k|	table->delegate->destroy_node(table->delegate, table, node);
   77|  11.9k|}

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

typed_rb_remove:
  308|  85.1k|{
  309|  85.1k|	return rbe_remove(rbt, rbe);
  310|  85.1k|}
typed_rb_insert:
  316|  86.4k|{
  317|  86.4k|	struct rb_entry *tmp;
  318|  86.4k|	struct rb_entry *parent = NULL;
  319|  86.4k|	int comp = 0;
  320|       |
  321|  86.4k|	tmp = RBH_ROOT(rbt);
  ------------------
  |  |   30|  86.4k|#define RBH_ROOT(_rbt)		(_rbt)->rbt_root
  ------------------
  322|   916k|	while (tmp != NULL) {
  ------------------
  |  Branch (322:9): [True: 830k, False: 86.4k]
  ------------------
  323|   830k|		parent = tmp;
  324|       |
  325|   830k|		comp = cmpfn(rbe, tmp);
  326|   830k|		if (comp < 0)
  ------------------
  |  Branch (326:7): [True: 380k, False: 449k]
  ------------------
  327|   380k|			tmp = RBE_LEFT(tmp);
  ------------------
  |  |   25|   380k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  328|   449k|		else if (comp > 0)
  ------------------
  |  Branch (328:12): [True: 449k, False: 0]
  ------------------
  329|   449k|			tmp = RBE_RIGHT(tmp);
  ------------------
  |  |   26|   449k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  330|      0|		else
  331|      0|			return tmp;
  332|   830k|	}
  333|       |
  334|  86.4k|	rbe_set(rbe, parent);
  335|       |
  336|  86.4k|	if (parent != NULL) {
  ------------------
  |  Branch (336:6): [True: 86.4k, False: 2]
  ------------------
  337|  86.4k|		if (comp < 0)
  ------------------
  |  Branch (337:7): [True: 30.8k, False: 55.6k]
  ------------------
  338|  30.8k|			RBE_LEFT(parent) = rbe;
  ------------------
  |  |   25|  30.8k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  339|  55.6k|		else
  340|  55.6k|			RBE_RIGHT(parent) = rbe;
  ------------------
  |  |   26|  55.6k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  341|  86.4k|	} else
  342|      2|		RBH_ROOT(rbt) = rbe;
  ------------------
  |  |   30|      2|#define RBH_ROOT(_rbt)		(_rbt)->rbt_root
  ------------------
  343|       |
  344|  86.4k|	rbe_insert_color(rbt, rbe);
  345|       |
  346|       |	return NULL;
  347|  86.4k|}
typed_rb_find:
  355|   173k|{
  356|   173k|	const struct rb_entry *tmp = RBH_ROOT(rbt);
  ------------------
  |  |   30|   173k|#define RBH_ROOT(_rbt)		(_rbt)->rbt_root
  ------------------
  357|   173k|	int comp;
  358|       |
  359|  1.69M|	while (tmp != NULL) {
  ------------------
  |  Branch (359:9): [True: 1.61M, False: 87.5k]
  ------------------
  360|  1.61M|		comp = cmpfn(key, tmp);
  361|  1.61M|		if (comp < 0)
  ------------------
  |  Branch (361:7): [True: 726k, False: 884k]
  ------------------
  362|   726k|			tmp = RBE_LEFT(tmp);
  ------------------
  |  |   25|   726k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  363|   884k|		else if (comp > 0)
  ------------------
  |  Branch (363:12): [True: 798k, False: 86.3k]
  ------------------
  364|   798k|			tmp = RBE_RIGHT(tmp);
  ------------------
  |  |   26|   798k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  365|  86.3k|		else
  366|  86.3k|			return tmp;
  367|  1.61M|	}
  368|       |
  369|  87.5k|	return NULL;
  370|   173k|}
typed_rb_next:
  418|  77.1M|{
  419|  77.1M|	struct rb_entry *rbe = (struct rb_entry *)rbe_const;
  420|       |
  421|  77.1M|	if (RBE_RIGHT(rbe) != NULL) {
  ------------------
  |  |   26|  77.1M|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  |  Branch (421:6): [True: 38.8M, False: 38.2M]
  ------------------
  422|  38.8M|		rbe = RBE_RIGHT(rbe);
  ------------------
  |  |   26|  38.8M|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  423|  76.0M|		while (RBE_LEFT(rbe) != NULL)
  ------------------
  |  |   25|  76.0M|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (423:10): [True: 37.2M, False: 38.8M]
  ------------------
  424|  37.2M|			rbe = RBE_LEFT(rbe);
  ------------------
  |  |   25|  37.2M|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  425|  38.8M|	} else {
  426|  38.2M|		if (RBE_PARENT(rbe) && (rbe == RBE_LEFT(RBE_PARENT(rbe))))
  ------------------
  |  |   27|  76.5M|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  |  |  ------------------
  |  |  |  Branch (27:26): [True: 38.2M, False: 0]
  |  |  ------------------
  ------------------
              		if (RBE_PARENT(rbe) && (rbe == RBE_LEFT(RBE_PARENT(rbe))))
  ------------------
  |  |   25|  38.2M|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (426:26): [True: 19.4M, False: 18.8M]
  ------------------
  427|  19.4M|			rbe = RBE_PARENT(rbe);
  ------------------
  |  |   27|  19.4M|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  428|  18.8M|		else {
  429|  57.6M|			while (RBE_PARENT(rbe)
  ------------------
  |  |   27|   115M|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  |  |  ------------------
  |  |  |  Branch (27:26): [True: 57.5M, False: 118k]
  |  |  ------------------
  ------------------
  430|  57.5M|			       && (rbe == RBE_RIGHT(RBE_PARENT(rbe))))
  ------------------
  |  |   26|  57.5M|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  |  Branch (430:14): [True: 38.8M, False: 18.7M]
  ------------------
  431|  38.8M|				rbe = RBE_PARENT(rbe);
  ------------------
  |  |   27|  38.8M|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  432|  18.8M|			rbe = RBE_PARENT(rbe);
  ------------------
  |  |   27|  18.8M|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  433|  18.8M|		}
  434|  38.2M|	}
  435|       |
  436|  77.1M|	return rbe;
  437|  77.1M|}
typed_rb_min:
  462|   118k|{
  463|   118k|	struct rb_entry *rbe = RBH_ROOT(rbt);
  ------------------
  |  |   30|   118k|#define RBH_ROOT(_rbt)		(_rbt)->rbt_root
  ------------------
  464|   118k|	struct rb_entry *parent = NULL;
  465|       |
  466|  1.18M|	while (rbe != NULL) {
  ------------------
  |  Branch (466:9): [True: 1.06M, False: 118k]
  ------------------
  467|  1.06M|		parent = rbe;
  468|  1.06M|		rbe = RBE_LEFT(rbe);
  ------------------
  |  |   25|  1.06M|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  469|  1.06M|	}
  470|       |
  471|   118k|	return parent;
  472|   118k|}
typerb.c:rbe_remove:
  238|  85.1k|{
  239|  85.1k|	struct rb_entry *child, *parent, *old = rbe;
  240|  85.1k|	unsigned int color;
  241|       |
  242|  85.1k|	if (RBE_LEFT(rbe) == NULL)
  ------------------
  |  |   25|  85.1k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (242:6): [True: 39.2k, False: 45.8k]
  ------------------
  243|  39.2k|		child = RBE_RIGHT(rbe);
  ------------------
  |  |   26|  39.2k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  244|  45.8k|	else if (RBE_RIGHT(rbe) == NULL)
  ------------------
  |  |   26|  45.8k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  |  Branch (244:11): [True: 7.68k, False: 38.1k]
  ------------------
  245|  7.68k|		child = RBE_LEFT(rbe);
  ------------------
  |  |   25|  7.68k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  246|  38.1k|	else {
  247|  38.1k|		struct rb_entry *tmp;
  248|       |
  249|  38.1k|		rbe = RBE_RIGHT(rbe);
  ------------------
  |  |   26|  38.1k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  250|  79.3k|		while ((tmp = RBE_LEFT(rbe)) != NULL)
  ------------------
  |  |   25|  79.3k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (250:10): [True: 41.1k, False: 38.1k]
  ------------------
  251|  41.1k|			rbe = tmp;
  252|       |
  253|  38.1k|		child = RBE_RIGHT(rbe);
  ------------------
  |  |   26|  38.1k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  254|  38.1k|		parent = RBE_PARENT(rbe);
  ------------------
  |  |   27|  38.1k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  255|  38.1k|		color = RBE_COLOR(rbe);
  ------------------
  |  |   28|  38.1k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
  256|  38.1k|		if (child != NULL)
  ------------------
  |  Branch (256:7): [True: 12.3k, False: 25.8k]
  ------------------
  257|  12.3k|			RBE_PARENT(child) = parent;
  ------------------
  |  |   27|  12.3k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  258|  38.1k|		if (parent != NULL) {
  ------------------
  |  Branch (258:7): [True: 38.1k, False: 0]
  ------------------
  259|  38.1k|			if (RBE_LEFT(parent) == rbe)
  ------------------
  |  |   25|  38.1k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (259:8): [True: 25.6k, False: 12.4k]
  ------------------
  260|  25.6k|				RBE_LEFT(parent) = child;
  ------------------
  |  |   25|  25.6k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  261|  12.4k|			else
  262|  12.4k|				RBE_RIGHT(parent) = child;
  ------------------
  |  |   26|  12.4k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  263|  38.1k|		} else
  264|      0|			RBH_ROOT(rbt) = child;
  ------------------
  |  |   30|      0|#define RBH_ROOT(_rbt)		(_rbt)->rbt_root
  ------------------
  265|  38.1k|		if (RBE_PARENT(rbe) == old)
  ------------------
  |  |   27|  38.1k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  |  Branch (265:7): [True: 12.4k, False: 25.6k]
  ------------------
  266|  12.4k|			parent = rbe;
  267|  38.1k|		*rbe = *old;
  268|       |
  269|  38.1k|		tmp = RBE_PARENT(old);
  ------------------
  |  |   27|  38.1k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  270|  38.1k|		if (tmp != NULL) {
  ------------------
  |  Branch (270:7): [True: 38.1k, False: 0]
  ------------------
  271|  38.1k|			if (RBE_LEFT(tmp) == old)
  ------------------
  |  |   25|  38.1k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (271:8): [True: 26.2k, False: 11.8k]
  ------------------
  272|  26.2k|				RBE_LEFT(tmp) = rbe;
  ------------------
  |  |   25|  26.2k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  273|  11.8k|			else
  274|  11.8k|				RBE_RIGHT(tmp) = rbe;
  ------------------
  |  |   26|  11.8k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  275|  38.1k|		} else
  276|      0|			RBH_ROOT(rbt) = rbe;
  ------------------
  |  |   30|      0|#define RBH_ROOT(_rbt)		(_rbt)->rbt_root
  ------------------
  277|       |
  278|  38.1k|		RBE_PARENT(RBE_LEFT(old)) = rbe;
  ------------------
  |  |   27|  38.1k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  279|  38.1k|		if (RBE_RIGHT(old))
  ------------------
  |  |   26|  38.1k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  |  |  ------------------
  |  |  |  Branch (26:26): [True: 29.0k, False: 9.06k]
  |  |  ------------------
  ------------------
  280|  29.0k|			RBE_PARENT(RBE_RIGHT(old)) = rbe;
  ------------------
  |  |   27|  29.0k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  281|       |
  282|  38.1k|		goto color;
  283|  38.1k|	}
  284|       |
  285|  46.9k|	parent = RBE_PARENT(rbe);
  ------------------
  |  |   27|  46.9k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  286|  46.9k|	color = RBE_COLOR(rbe);
  ------------------
  |  |   28|  46.9k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
  287|       |
  288|  46.9k|	if (child != NULL)
  ------------------
  |  Branch (288:6): [True: 16.7k, False: 30.2k]
  ------------------
  289|  16.7k|		RBE_PARENT(child) = parent;
  ------------------
  |  |   27|  16.7k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  290|  46.9k|	if (parent != NULL) {
  ------------------
  |  Branch (290:6): [True: 46.9k, False: 0]
  ------------------
  291|  46.9k|		if (RBE_LEFT(parent) == rbe)
  ------------------
  |  |   25|  46.9k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (291:7): [True: 27.9k, False: 18.9k]
  ------------------
  292|  27.9k|			RBE_LEFT(parent) = child;
  ------------------
  |  |   25|  27.9k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  293|  18.9k|		else
  294|  18.9k|			RBE_RIGHT(parent) = child;
  ------------------
  |  |   26|  18.9k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  295|  46.9k|	} else
  296|      0|		RBH_ROOT(rbt) = child;
  ------------------
  |  |   30|      0|#define RBH_ROOT(_rbt)		(_rbt)->rbt_root
  ------------------
  297|  85.1k|color:
  298|  85.1k|	if (color == RB_BLACK)
  ------------------
  |  |   19|  85.1k|#define RB_BLACK	0
  ------------------
  |  Branch (298:6): [True: 73.6k, False: 11.4k]
  ------------------
  299|  73.6k|		rbe_remove_color(rbt, parent, child);
  300|       |
  301|  85.1k|	rbt->count--;
  302|  85.1k|	memset(old, 0, sizeof(*old));
  303|  85.1k|	return (old);
  304|  46.9k|}
typerb.c:rbe_remove_color:
  149|  73.6k|{
  150|  73.6k|	struct rb_entry *tmp;
  151|       |
  152|   115k|	while ((rbe == NULL || RBE_COLOR(rbe) == RB_BLACK)
  ------------------
  |  |   28|  70.6k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              	while ((rbe == NULL || RBE_COLOR(rbe) == RB_BLACK)
  ------------------
  |  |   19|  70.6k|#define RB_BLACK	0
  ------------------
  |  Branch (152:10): [True: 44.6k, False: 70.6k]
  |  Branch (152:25): [True: 14.6k, False: 56.0k]
  ------------------
  153|  59.2k|	       && rbe != RBH_ROOT(rbt) && parent) {
  ------------------
  |  |   30|   174k|#define RBH_ROOT(_rbt)		(_rbt)->rbt_root
  ------------------
  |  Branch (153:12): [True: 59.2k, False: 0]
  |  Branch (153:36): [True: 59.2k, False: 0]
  ------------------
  154|  59.2k|		if (RBE_LEFT(parent) == rbe) {
  ------------------
  |  |   25|  59.2k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (154:7): [True: 37.5k, False: 21.7k]
  ------------------
  155|  37.5k|			tmp = RBE_RIGHT(parent);
  ------------------
  |  |   26|  37.5k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  156|  37.5k|			if (RBE_COLOR(tmp) == RB_RED) {
  ------------------
  |  |   28|  37.5k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              			if (RBE_COLOR(tmp) == RB_RED) {
  ------------------
  |  |   20|  37.5k|#define RB_RED		1
  ------------------
  |  Branch (156:8): [True: 6.44k, False: 31.0k]
  ------------------
  157|  6.44k|				rbe_set_blackred(tmp, parent);
  158|  6.44k|				rbe_rotate_left(rbt, parent);
  159|  6.44k|				tmp = RBE_RIGHT(parent);
  ------------------
  |  |   26|  6.44k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  160|  6.44k|			}
  161|  37.5k|			if ((RBE_LEFT(tmp) == NULL
  ------------------
  |  |   25|  37.5k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (161:9): [True: 23.1k, False: 14.3k]
  ------------------
  162|  14.3k|			     || RBE_COLOR(RBE_LEFT(tmp)) == RB_BLACK)
  ------------------
  |  |   28|  14.3k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              			     || RBE_COLOR(RBE_LEFT(tmp)) == RB_BLACK)
  ------------------
  |  |   19|  14.3k|#define RB_BLACK	0
  ------------------
  |  Branch (162:12): [True: 9.29k, False: 5.10k]
  ------------------
  163|  32.4k|			    && (RBE_RIGHT(tmp) == NULL
  ------------------
  |  |   26|  32.4k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  |  Branch (163:12): [True: 20.2k, False: 12.1k]
  ------------------
  164|  26.3k|				|| RBE_COLOR(RBE_RIGHT(tmp)) == RB_BLACK)) {
  ------------------
  |  |   28|  12.1k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              				|| RBE_COLOR(RBE_RIGHT(tmp)) == RB_BLACK)) {
  ------------------
  |  |   19|  12.1k|#define RB_BLACK	0
  ------------------
  |  Branch (164:8): [True: 6.08k, False: 6.09k]
  ------------------
  165|  26.3k|				RBE_COLOR(tmp) = RB_RED;
  ------------------
  |  |   28|  26.3k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              				RBE_COLOR(tmp) = RB_RED;
  ------------------
  |  |   20|  26.3k|#define RB_RED		1
  ------------------
  166|  26.3k|				rbe = parent;
  167|  26.3k|				parent = RBE_PARENT(rbe);
  ------------------
  |  |   27|  26.3k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  168|  26.3k|			} else {
  169|  11.1k|				if (RBE_RIGHT(tmp) == NULL
  ------------------
  |  |   26|  11.1k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  |  Branch (169:9): [True: 720, False: 10.4k]
  ------------------
  170|  10.4k|				    || RBE_COLOR(RBE_RIGHT(tmp)) == RB_BLACK) {
  ------------------
  |  |   28|  10.4k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              				    || RBE_COLOR(RBE_RIGHT(tmp)) == RB_BLACK) {
  ------------------
  |  |   19|  10.4k|#define RB_BLACK	0
  ------------------
  |  Branch (170:12): [True: 344, False: 10.1k]
  ------------------
  171|  1.06k|					struct rb_entry *oleft;
  172|       |
  173|  1.06k|					oleft = RBE_LEFT(tmp);
  ------------------
  |  |   25|  1.06k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  174|  1.06k|					if (oleft != NULL)
  ------------------
  |  Branch (174:10): [True: 1.06k, False: 0]
  ------------------
  175|  1.06k|						RBE_COLOR(oleft) = RB_BLACK;
  ------------------
  |  |   28|  1.06k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              						RBE_COLOR(oleft) = RB_BLACK;
  ------------------
  |  |   19|  1.06k|#define RB_BLACK	0
  ------------------
  176|       |
  177|  1.06k|					RBE_COLOR(tmp) = RB_RED;
  ------------------
  |  |   28|  1.06k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              					RBE_COLOR(tmp) = RB_RED;
  ------------------
  |  |   20|  1.06k|#define RB_RED		1
  ------------------
  178|  1.06k|					rbe_rotate_right(rbt, tmp);
  179|  1.06k|					tmp = RBE_RIGHT(parent);
  ------------------
  |  |   26|  1.06k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  180|  1.06k|				}
  181|       |
  182|  11.1k|				RBE_COLOR(tmp) = RBE_COLOR(parent);
  ------------------
  |  |   28|  11.1k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              				RBE_COLOR(tmp) = RBE_COLOR(parent);
  ------------------
  |  |   28|  11.1k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
  183|  11.1k|				RBE_COLOR(parent) = RB_BLACK;
  ------------------
  |  |   28|  11.1k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              				RBE_COLOR(parent) = RB_BLACK;
  ------------------
  |  |   19|  11.1k|#define RB_BLACK	0
  ------------------
  184|  11.1k|				if (RBE_RIGHT(tmp))
  ------------------
  |  |   26|  11.1k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  |  |  ------------------
  |  |  |  Branch (26:26): [True: 11.1k, False: 0]
  |  |  ------------------
  ------------------
  185|  11.1k|					RBE_COLOR(RBE_RIGHT(tmp)) = RB_BLACK;
  ------------------
  |  |   28|  11.1k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              					RBE_COLOR(RBE_RIGHT(tmp)) = RB_BLACK;
  ------------------
  |  |   19|  11.1k|#define RB_BLACK	0
  ------------------
  186|       |
  187|  11.1k|				rbe_rotate_left(rbt, parent);
  188|  11.1k|				rbe = RBH_ROOT(rbt);
  ------------------
  |  |   30|  11.1k|#define RBH_ROOT(_rbt)		(_rbt)->rbt_root
  ------------------
  189|  11.1k|				break;
  190|  11.1k|			}
  191|  37.5k|		} else {
  192|  21.7k|			tmp = RBE_LEFT(parent);
  ------------------
  |  |   25|  21.7k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  193|  21.7k|			if (RBE_COLOR(tmp) == RB_RED) {
  ------------------
  |  |   28|  21.7k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              			if (RBE_COLOR(tmp) == RB_RED) {
  ------------------
  |  |   20|  21.7k|#define RB_RED		1
  ------------------
  |  Branch (193:8): [True: 3.24k, False: 18.5k]
  ------------------
  194|  3.24k|				rbe_set_blackred(tmp, parent);
  195|  3.24k|				rbe_rotate_right(rbt, parent);
  196|  3.24k|				tmp = RBE_LEFT(parent);
  ------------------
  |  |   25|  3.24k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  197|  3.24k|			}
  198|       |
  199|  21.7k|			if ((RBE_LEFT(tmp) == NULL
  ------------------
  |  |   25|  21.7k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (199:9): [True: 13.6k, False: 8.12k]
  ------------------
  200|  8.12k|			     || RBE_COLOR(RBE_LEFT(tmp)) == RB_BLACK)
  ------------------
  |  |   28|  8.12k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              			     || RBE_COLOR(RBE_LEFT(tmp)) == RB_BLACK)
  ------------------
  |  |   19|  8.12k|#define RB_BLACK	0
  ------------------
  |  Branch (200:12): [True: 4.65k, False: 3.47k]
  ------------------
  201|  18.2k|			    && (RBE_RIGHT(tmp) == NULL
  ------------------
  |  |   26|  18.2k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  |  Branch (201:12): [True: 10.6k, False: 7.59k]
  ------------------
  202|  15.2k|				|| RBE_COLOR(RBE_RIGHT(tmp)) == RB_BLACK)) {
  ------------------
  |  |   28|  7.59k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              				|| RBE_COLOR(RBE_RIGHT(tmp)) == RB_BLACK)) {
  ------------------
  |  |   19|  7.59k|#define RB_BLACK	0
  ------------------
  |  Branch (202:8): [True: 4.61k, False: 2.98k]
  ------------------
  203|  15.2k|				RBE_COLOR(tmp) = RB_RED;
  ------------------
  |  |   28|  15.2k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              				RBE_COLOR(tmp) = RB_RED;
  ------------------
  |  |   20|  15.2k|#define RB_RED		1
  ------------------
  204|  15.2k|				rbe = parent;
  205|  15.2k|				parent = RBE_PARENT(rbe);
  ------------------
  |  |   27|  15.2k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  206|  15.2k|			} else {
  207|  6.46k|				if (RBE_LEFT(tmp) == NULL
  ------------------
  |  |   25|  6.46k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (207:9): [True: 2.94k, False: 3.51k]
  ------------------
  208|  3.51k|				    || RBE_COLOR(RBE_LEFT(tmp)) == RB_BLACK) {
  ------------------
  |  |   28|  3.51k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              				    || RBE_COLOR(RBE_LEFT(tmp)) == RB_BLACK) {
  ------------------
  |  |   19|  3.51k|#define RB_BLACK	0
  ------------------
  |  Branch (208:12): [True: 36, False: 3.47k]
  ------------------
  209|  2.98k|					struct rb_entry *oright;
  210|       |
  211|  2.98k|					oright = RBE_RIGHT(tmp);
  ------------------
  |  |   26|  2.98k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  212|  2.98k|					if (oright != NULL)
  ------------------
  |  Branch (212:10): [True: 2.98k, False: 0]
  ------------------
  213|  2.98k|						RBE_COLOR(oright) = RB_BLACK;
  ------------------
  |  |   28|  2.98k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              						RBE_COLOR(oright) = RB_BLACK;
  ------------------
  |  |   19|  2.98k|#define RB_BLACK	0
  ------------------
  214|       |
  215|  2.98k|					RBE_COLOR(tmp) = RB_RED;
  ------------------
  |  |   28|  2.98k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              					RBE_COLOR(tmp) = RB_RED;
  ------------------
  |  |   20|  2.98k|#define RB_RED		1
  ------------------
  216|  2.98k|					rbe_rotate_left(rbt, tmp);
  217|  2.98k|					tmp = RBE_LEFT(parent);
  ------------------
  |  |   25|  2.98k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  218|  2.98k|				}
  219|       |
  220|  6.46k|				RBE_COLOR(tmp) = RBE_COLOR(parent);
  ------------------
  |  |   28|  6.46k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              				RBE_COLOR(tmp) = RBE_COLOR(parent);
  ------------------
  |  |   28|  6.46k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
  221|  6.46k|				RBE_COLOR(parent) = RB_BLACK;
  ------------------
  |  |   28|  6.46k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              				RBE_COLOR(parent) = RB_BLACK;
  ------------------
  |  |   19|  6.46k|#define RB_BLACK	0
  ------------------
  222|  6.46k|				if (RBE_LEFT(tmp) != NULL)
  ------------------
  |  |   25|  6.46k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (222:9): [True: 6.46k, False: 0]
  ------------------
  223|  6.46k|					RBE_COLOR(RBE_LEFT(tmp)) = RB_BLACK;
  ------------------
  |  |   28|  6.46k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              					RBE_COLOR(RBE_LEFT(tmp)) = RB_BLACK;
  ------------------
  |  |   19|  6.46k|#define RB_BLACK	0
  ------------------
  224|       |
  225|  6.46k|				rbe_rotate_right(rbt, parent);
  226|  6.46k|				rbe = RBH_ROOT(rbt);
  ------------------
  |  |   30|  6.46k|#define RBH_ROOT(_rbt)		(_rbt)->rbt_root
  ------------------
  227|  6.46k|				break;
  228|  6.46k|			}
  229|  21.7k|		}
  230|  59.2k|	}
  231|       |
  232|  73.6k|	if (rbe != NULL)
  ------------------
  |  Branch (232:6): [True: 73.6k, False: 0]
  ------------------
  233|  73.6k|		RBE_COLOR(rbe) = RB_BLACK;
  ------------------
  |  |   28|  73.6k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              		RBE_COLOR(rbe) = RB_BLACK;
  ------------------
  |  |   19|  73.6k|#define RB_BLACK	0
  ------------------
  234|  73.6k|}
typerb.c:rbe_set_blackred:
   41|  98.1k|{
   42|  98.1k|	RBE_COLOR(black) = RB_BLACK;
  ------------------
  |  |   28|  98.1k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              	RBE_COLOR(black) = RB_BLACK;
  ------------------
  |  |   19|  98.1k|#define RB_BLACK	0
  ------------------
   43|  98.1k|	RBE_COLOR(red) = RB_RED;
  ------------------
  |  |   28|  98.1k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              	RBE_COLOR(red) = RB_RED;
  ------------------
  |  |   20|  98.1k|#define RB_RED		1
  ------------------
   44|  98.1k|}
typerb.c:rbe_rotate_left:
   47|  62.5k|{
   48|  62.5k|	struct rb_entry *parent;
   49|  62.5k|	struct rb_entry *tmp;
   50|       |
   51|  62.5k|	tmp = RBE_RIGHT(rbe);
  ------------------
  |  |   26|  62.5k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
   52|  62.5k|	RBE_RIGHT(rbe) = RBE_LEFT(tmp);
  ------------------
  |  |   26|  62.5k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
              	RBE_RIGHT(rbe) = RBE_LEFT(tmp);
  ------------------
  |  |   25|  62.5k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
   53|  62.5k|	if (RBE_RIGHT(rbe) != NULL)
  ------------------
  |  |   26|  62.5k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  |  Branch (53:6): [True: 26.1k, False: 36.3k]
  ------------------
   54|  26.1k|		RBE_PARENT(RBE_LEFT(tmp)) = rbe;
  ------------------
  |  |   27|  26.1k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
   55|       |
   56|  62.5k|	parent = RBE_PARENT(rbe);
  ------------------
  |  |   27|  62.5k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
   57|  62.5k|	RBE_PARENT(tmp) = parent;
  ------------------
  |  |   27|  62.5k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
   58|  62.5k|	if (parent != NULL) {
  ------------------
  |  Branch (58:6): [True: 62.5k, False: 8]
  ------------------
   59|  62.5k|		if (rbe == RBE_LEFT(parent))
  ------------------
  |  |   25|  62.5k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (59:7): [True: 36.6k, False: 25.8k]
  ------------------
   60|  36.6k|			RBE_LEFT(parent) = tmp;
  ------------------
  |  |   25|  36.6k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
   61|  25.8k|		else
   62|  25.8k|			RBE_RIGHT(parent) = tmp;
  ------------------
  |  |   26|  25.8k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
   63|  62.5k|	} else
   64|      8|		RBH_ROOT(rbt) = tmp;
  ------------------
  |  |   30|      8|#define RBH_ROOT(_rbt)		(_rbt)->rbt_root
  ------------------
   65|       |
   66|  62.5k|	RBE_LEFT(tmp) = rbe;
  ------------------
  |  |   25|  62.5k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
   67|  62.5k|	RBE_PARENT(rbe) = tmp;
  ------------------
  |  |   27|  62.5k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
   68|  62.5k|}
typerb.c:rbe_rotate_right:
   71|  36.1k|{
   72|  36.1k|	struct rb_entry *parent;
   73|  36.1k|	struct rb_entry *tmp;
   74|       |
   75|  36.1k|	tmp = RBE_LEFT(rbe);
  ------------------
  |  |   25|  36.1k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
   76|  36.1k|	RBE_LEFT(rbe) = RBE_RIGHT(tmp);
  ------------------
  |  |   25|  36.1k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
              	RBE_LEFT(rbe) = RBE_RIGHT(tmp);
  ------------------
  |  |   26|  36.1k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
   77|  36.1k|	if (RBE_LEFT(rbe) != NULL)
  ------------------
  |  |   25|  36.1k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (77:6): [True: 11.6k, False: 24.4k]
  ------------------
   78|  11.6k|		RBE_PARENT(RBE_RIGHT(tmp)) = rbe;
  ------------------
  |  |   27|  11.6k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
   79|       |
   80|  36.1k|	parent = RBE_PARENT(rbe);
  ------------------
  |  |   27|  36.1k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
   81|  36.1k|	RBE_PARENT(tmp) = parent;
  ------------------
  |  |   27|  36.1k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
   82|  36.1k|	if (parent != NULL) {
  ------------------
  |  Branch (82:6): [True: 36.1k, False: 2]
  ------------------
   83|  36.1k|		if (rbe == RBE_LEFT(parent))
  ------------------
  |  |   25|  36.1k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (83:7): [True: 11.7k, False: 24.3k]
  ------------------
   84|  11.7k|			RBE_LEFT(parent) = tmp;
  ------------------
  |  |   25|  11.7k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
   85|  24.3k|		else
   86|  24.3k|			RBE_RIGHT(parent) = tmp;
  ------------------
  |  |   26|  24.3k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
   87|  36.1k|	} else
   88|      2|		RBH_ROOT(rbt) = tmp;
  ------------------
  |  |   30|      2|#define RBH_ROOT(_rbt)		(_rbt)->rbt_root
  ------------------
   89|       |
   90|  36.1k|	RBE_RIGHT(tmp) = rbe;
  ------------------
  |  |   26|  36.1k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
   91|  36.1k|	RBE_PARENT(rbe) = tmp;
  ------------------
  |  |   27|  36.1k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
   92|  36.1k|}
typerb.c:rbe_set:
   33|  86.4k|{
   34|  86.4k|	RBE_PARENT(rbe) = parent;
  ------------------
  |  |   27|  86.4k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
   35|  86.4k|	RBE_LEFT(rbe) = RBE_RIGHT(rbe) = NULL;
  ------------------
  |  |   25|  86.4k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
              	RBE_LEFT(rbe) = RBE_RIGHT(rbe) = NULL;
  ------------------
  |  |   26|  86.4k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
   36|  86.4k|	RBE_COLOR(rbe) = RB_RED;
  ------------------
  |  |   28|  86.4k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              	RBE_COLOR(rbe) = RB_RED;
  ------------------
  |  |   20|  86.4k|#define RB_RED		1
  ------------------
   37|  86.4k|}
typerb.c:rbe_insert_color:
   95|  86.4k|{
   96|  86.4k|	struct rb_entry *parent, *gparent, *tmp;
   97|       |
   98|  86.4k|	rbt->count++;
   99|       |
  100|   174k|	while ((parent = RBE_PARENT(rbe)) != NULL
  ------------------
  |  |   27|   174k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  |  Branch (100:9): [True: 174k, False: 12]
  ------------------
  101|   174k|	       && RBE_COLOR(parent) == RB_RED) {
  ------------------
  |  |   28|   174k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              	       && RBE_COLOR(parent) == RB_RED) {
  ------------------
  |  |   20|   174k|#define RB_RED		1
  ------------------
  |  Branch (101:12): [True: 88.4k, False: 86.4k]
  ------------------
  102|  88.4k|		gparent = RBE_PARENT(parent);
  ------------------
  |  |   27|  88.4k|#define RBE_PARENT(_rbe)	(_rbe)->rbt_parent
  ------------------
  103|       |
  104|  88.4k|		if (parent == RBE_LEFT(gparent)) {
  ------------------
  |  |   25|  88.4k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (104:7): [True: 29.7k, False: 58.7k]
  ------------------
  105|  29.7k|			tmp = RBE_RIGHT(gparent);
  ------------------
  |  |   26|  29.7k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  106|  29.7k|			if (tmp != NULL && RBE_COLOR(tmp) == RB_RED) {
  ------------------
  |  |   28|  16.3k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              			if (tmp != NULL && RBE_COLOR(tmp) == RB_RED) {
  ------------------
  |  |   20|  16.3k|#define RB_RED		1
  ------------------
  |  Branch (106:8): [True: 16.3k, False: 13.3k]
  |  Branch (106:23): [True: 10.1k, False: 6.21k]
  ------------------
  107|  10.1k|				RBE_COLOR(tmp) = RB_BLACK;
  ------------------
  |  |   28|  10.1k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              				RBE_COLOR(tmp) = RB_BLACK;
  ------------------
  |  |   19|  10.1k|#define RB_BLACK	0
  ------------------
  108|  10.1k|				rbe_set_blackred(parent, gparent);
  109|  10.1k|				rbe = gparent;
  110|  10.1k|				continue;
  111|  10.1k|			}
  112|       |
  113|  19.5k|			if (RBE_RIGHT(parent) == rbe) {
  ------------------
  |  |   26|  19.5k|#define RBE_RIGHT(_rbe)		(_rbe)->rbt_right
  ------------------
  |  Branch (113:8): [True: 15.3k, False: 4.20k]
  ------------------
  114|  15.3k|				rbe_rotate_left(rbt, parent);
  115|  15.3k|				tmp = parent;
  116|  15.3k|				parent = rbe;
  117|  15.3k|				rbe = tmp;
  118|  15.3k|			}
  119|       |
  120|  19.5k|			rbe_set_blackred(parent, gparent);
  121|  19.5k|			rbe_rotate_right(rbt, gparent);
  122|  58.7k|		} else {
  123|  58.7k|			tmp = RBE_LEFT(gparent);
  ------------------
  |  |   25|  58.7k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  124|  58.7k|			if (tmp != NULL && RBE_COLOR(tmp) == RB_RED) {
  ------------------
  |  |   28|  39.4k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              			if (tmp != NULL && RBE_COLOR(tmp) == RB_RED) {
  ------------------
  |  |   20|  39.4k|#define RB_RED		1
  ------------------
  |  Branch (124:8): [True: 39.4k, False: 19.3k]
  |  Branch (124:23): [True: 32.2k, False: 7.19k]
  ------------------
  125|  32.2k|				RBE_COLOR(tmp) = RB_BLACK;
  ------------------
  |  |   28|  32.2k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              				RBE_COLOR(tmp) = RB_BLACK;
  ------------------
  |  |   19|  32.2k|#define RB_BLACK	0
  ------------------
  126|  32.2k|				rbe_set_blackred(parent, gparent);
  127|  32.2k|				rbe = gparent;
  128|  32.2k|				continue;
  129|  32.2k|			}
  130|       |
  131|  26.5k|			if (RBE_LEFT(parent) == rbe) {
  ------------------
  |  |   25|  26.5k|#define RBE_LEFT(_rbe)		(_rbe)->rbt_left
  ------------------
  |  Branch (131:8): [True: 5.80k, False: 20.7k]
  ------------------
  132|  5.80k|				rbe_rotate_right(rbt, parent);
  133|  5.80k|				tmp = parent;
  134|  5.80k|				parent = rbe;
  135|  5.80k|				rbe = tmp;
  136|  5.80k|			}
  137|       |
  138|  26.5k|			rbe_set_blackred(parent, gparent);
  139|  26.5k|			rbe_rotate_left(rbt, gparent);
  140|  26.5k|		}
  141|  88.4k|	}
  142|       |
  143|  86.4k|	RBE_COLOR(RBH_ROOT(rbt)) = RB_BLACK;
  ------------------
  |  |   28|  86.4k|#define RBE_COLOR(_rbe)		(_rbe)->rbt_color
  ------------------
              	RBE_COLOR(RBH_ROOT(rbt)) = RB_BLACK;
  ------------------
  |  |   19|  86.4k|#define RB_BLACK	0
  ------------------
  144|  86.4k|}

pim_oil.c:rb_pim_oil_init:
   70|      1|macro_inline void prefix ## _init(struct prefix##_head *h)                     \
   71|      1|{                                                                              \
   72|      1|	memset(h, 0, sizeof(*h));                                              \
   73|      1|}                                                                              \
pim_oil.c:rb_pim_oil__cmp:
  171|   830k|		const struct typed_rb_entry *b)                                \
  172|   830k|{                                                                              \
  173|   830k|	return cmpfn(container_of(a, type, field.re),                          \
  ------------------
  |  |  281|   830k|	(__builtin_choose_expr(                                                \
  |  |  282|   830k|		__builtin_types_compatible_p(typeof(&((type *)0)->member),     \
  |  |  ------------------
  |  |  |  Branch (282:3): [Folded, False: 0]
  |  |  ------------------
  |  |  283|   830k|			typeof(ptr))                                           \
  |  |  284|   830k|		    ||  __builtin_types_compatible_p(void *, typeof(ptr)),     \
  |  |  ------------------
  |  |  |  Branch (284:11): [Folded, False: 0]
  |  |  ------------------
  |  |  285|   830k|		({                                                             \
  |  |  286|   830k|			typeof(((type *)0)->member) *__mptr = (void *)(ptr);   \
  |  |  287|   830k|			(type *)((char *)__mptr - offsetof(type, member));     \
  |  |  ------------------
  |  |  |  |  253|   830k|#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
  |  |  ------------------
  |  |  288|   830k|		}),                                                            \
  |  |  289|   830k|		({                                                             \
  |  |  290|   830k|			typeof(((const type *)0)->member) *__mptr = (ptr);     \
  |  |  291|   830k|			(const type *)((const char *)__mptr -                  \
  |  |  292|   830k|					offsetof(type, member));               \
  |  |  ------------------
  |  |  |  |  253|   830k|#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
  |  |  ------------------
  |  |  293|   830k|		})                                                             \
  |  |  294|   830k|	))
  ------------------
  174|   830k|			container_of(b, type, field.re));                      \
  ------------------
  |  |  281|   830k|	(__builtin_choose_expr(                                                \
  |  |  282|   830k|		__builtin_types_compatible_p(typeof(&((type *)0)->member),     \
  |  |  ------------------
  |  |  |  Branch (282:3): [Folded, False: 0]
  |  |  ------------------
  |  |  283|   830k|			typeof(ptr))                                           \
  |  |  284|   830k|		    ||  __builtin_types_compatible_p(void *, typeof(ptr)),     \
  |  |  ------------------
  |  |  |  Branch (284:11): [Folded, False: 0]
  |  |  ------------------
  |  |  285|   830k|		({                                                             \
  |  |  286|   830k|			typeof(((type *)0)->member) *__mptr = (void *)(ptr);   \
  |  |  287|   830k|			(type *)((char *)__mptr - offsetof(type, member));     \
  |  |  ------------------
  |  |  |  |  253|   830k|#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
  |  |  ------------------
  |  |  288|   830k|		}),                                                            \
  |  |  289|   830k|		({                                                             \
  |  |  290|   830k|			typeof(((const type *)0)->member) *__mptr = (ptr);     \
  |  |  291|   830k|			(const type *)((const char *)__mptr -                  \
  |  |  292|   830k|					offsetof(type, member));               \
  |  |  ------------------
  |  |  |  |  253|   830k|#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
  |  |  ------------------
  |  |  293|   830k|		})                                                             \
  |  |  294|   830k|	))
  ------------------
  175|   830k|}                                                                              \
pim_upstream.c:rb_pim_upstream__cmp:
  171|  1.61M|		const struct typed_rb_entry *b)                                \
  172|  1.61M|{                                                                              \
  173|  1.61M|	return cmpfn(container_of(a, type, field.re),                          \
  ------------------
  |  |  281|  1.61M|	(__builtin_choose_expr(                                                \
  |  |  282|  1.61M|		__builtin_types_compatible_p(typeof(&((type *)0)->member),     \
  |  |  ------------------
  |  |  |  Branch (282:3): [Folded, False: 0]
  |  |  ------------------
  |  |  283|  1.61M|			typeof(ptr))                                           \
  |  |  284|  1.61M|		    ||  __builtin_types_compatible_p(void *, typeof(ptr)),     \
  |  |  ------------------
  |  |  |  Branch (284:11): [Folded, False: 0]
  |  |  ------------------
  |  |  285|  1.61M|		({                                                             \
  |  |  286|  1.61M|			typeof(((type *)0)->member) *__mptr = (void *)(ptr);   \
  |  |  287|  1.61M|			(type *)((char *)__mptr - offsetof(type, member));     \
  |  |  ------------------
  |  |  |  |  253|  1.61M|#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
  |  |  ------------------
  |  |  288|  1.61M|		}),                                                            \
  |  |  289|  1.61M|		({                                                             \
  |  |  290|  1.61M|			typeof(((const type *)0)->member) *__mptr = (ptr);     \
  |  |  291|  1.61M|			(const type *)((const char *)__mptr -                  \
  |  |  292|  1.61M|					offsetof(type, member));               \
  |  |  ------------------
  |  |  |  |  253|  1.61M|#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
  |  |  ------------------
  |  |  293|  1.61M|		})                                                             \
  |  |  294|  1.61M|	))
  ------------------
  174|  1.61M|			container_of(b, type, field.re));                      \
  ------------------
  |  |  281|  1.61M|	(__builtin_choose_expr(                                                \
  |  |  282|  1.61M|		__builtin_types_compatible_p(typeof(&((type *)0)->member),     \
  |  |  ------------------
  |  |  |  Branch (282:3): [Folded, False: 0]
  |  |  ------------------
  |  |  283|  1.61M|			typeof(ptr))                                           \
  |  |  284|  1.61M|		    ||  __builtin_types_compatible_p(void *, typeof(ptr)),     \
  |  |  ------------------
  |  |  |  Branch (284:11): [Folded, False: 0]
  |  |  ------------------
  |  |  285|  1.61M|		({                                                             \
  |  |  286|  1.61M|			typeof(((type *)0)->member) *__mptr = (void *)(ptr);   \
  |  |  287|  1.61M|			(type *)((char *)__mptr - offsetof(type, member));     \
  |  |  ------------------
  |  |  |  |  253|  1.61M|#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
  |  |  ------------------
  |  |  288|  1.61M|		}),                                                            \
  |  |  289|  1.61M|		({                                                             \
  |  |  290|  1.61M|			typeof(((const type *)0)->member) *__mptr = (ptr);     \
  |  |  291|  1.61M|			(const type *)((const char *)__mptr -                  \
  |  |  292|  1.61M|					offsetof(type, member));               \
  |  |  ------------------
  |  |  |  |  253|  1.61M|#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
  |  |  ------------------
  |  |  293|  1.61M|		})                                                             \
  |  |  294|  1.61M|	))
  ------------------
  175|  1.61M|}                                                                              \
pim_upstream.c:rb_pim_upstream_init:
   70|      1|macro_inline void prefix ## _init(struct prefix##_head *h)                     \
   71|      1|{                                                                              \
   72|      1|	memset(h, 0, sizeof(*h));                                              \
   73|      1|}                                                                              \
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|     22|{
   85|     22|	uint32_t newsize = head->count, i, j;
   86|     22|	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|     22|	assert(head->count > 0);
  ------------------
  |  |   51|     22|	({                                                                     \
  |  |   52|     22|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|     22|			(used)) = {                                            \
  |  |   54|     22|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|     22|	{                                                                      \
  |  |  |  |  284|     22|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|     22|		/* .type = */ (type_),                                         \
  |  |  |  |  286|     22|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|     22|		/* .func = */ func_,                                           \
  |  |  |  |  289|     22|	}                                                                      \
  |  |  ------------------
  |  |   55|     22|			.expr = #expr_,                                        \
  |  |   56|     22|		};                                                             \
  |  |   57|     22|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|     22|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|     22|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|     22|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|     22|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 22]
  |  |  |  Branch (58:24): [True: 22, False: 0]
  |  |  ------------------
  |  |   59|     22|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|     22|	})
  ------------------
   96|       |
   97|     22|	hash_consistency_check(head);
   98|       |
   99|     22|	newsize |= newsize >> 1;
  100|     22|	newsize |= newsize >> 2;
  101|     22|	newsize |= newsize >> 4;
  102|     22|	newsize |= newsize >> 8;
  103|     22|	newsize |= newsize >> 16;
  104|     22|	newsize++;
  105|     22|	newshift = __builtin_ctz(newsize) + 1;
  106|       |
  107|     22|	if (head->maxshift && newshift > head->maxshift)
  ------------------
  |  Branch (107:6): [True: 0, False: 22]
  |  Branch (107:24): [True: 0, False: 0]
  ------------------
  108|      0|		newshift = head->maxshift;
  109|     22|	if (newshift == head->tabshift)
  ------------------
  |  Branch (109:6): [True: 0, False: 22]
  ------------------
  110|      0|		return;
  111|     22|	newsize = _HASH_SIZE(newshift);
  ------------------
  |  |  797|     22|	((1U << (tabshift)) >> 1)
  ------------------
  112|       |
  113|     22|	head->entries = XREALLOC(MTYPE_TYPEDHASH_BUCKET, head->entries,
  ------------------
  |  |  166|     22|#define XREALLOC(mtype, ptr, size)	qrealloc(mtype, ptr, size)
  ------------------
  114|     22|			sizeof(head->entries[0]) * newsize);
  115|     22|	memset(head->entries + HASH_SIZE(*head), 0,
  ------------------
  |  |  799|     22|	_HASH_SIZE((head).tabshift)
  |  |  ------------------
  |  |  |  |  797|     22|	((1U << (tabshift)) >> 1)
  |  |  ------------------
  ------------------
  116|     22|			sizeof(head->entries[0]) *
  117|     22|				(newsize - HASH_SIZE(*head)));
  ------------------
  |  |  799|     22|	_HASH_SIZE((head).tabshift)
  |  |  ------------------
  |  |  |  |  797|     22|	((1U << (tabshift)) >> 1)
  |  |  ------------------
  ------------------
  118|       |
  119|     22|	delta = newshift - head->tabshift;
  120|       |
  121|     22|	i = HASH_SIZE(*head);
  ------------------
  |  |  799|     22|	_HASH_SIZE((head).tabshift)
  |  |  ------------------
  |  |  |  |  797|     22|	((1U << (tabshift)) >> 1)
  |  |  ------------------
  ------------------
  122|     22|	if (i == 0)
  ------------------
  |  Branch (122:6): [True: 3, False: 19]
  ------------------
  123|      3|		goto out;
  124|  1.79k|	do {
  125|  1.79k|		struct thash_item **apos, *item;
  126|       |
  127|  1.79k|		i--;
  128|  1.79k|		apos = &head->entries[i];
  129|       |
  130|  5.37k|		for (j = 0; j < (1U << delta); j++) {
  ------------------
  |  Branch (130:15): [True: 3.58k, False: 1.79k]
  ------------------
  131|  3.58k|			item = *apos;
  132|  3.58k|			*apos = NULL;
  133|       |
  134|  3.58k|			head->entries[(i << delta) + j] = item;
  135|  3.58k|			apos = &head->entries[(i << delta) + j];
  136|       |
  137|  5.35k|			while ((item = *apos)) {
  ------------------
  |  Branch (137:11): [True: 2.41k, False: 2.93k]
  ------------------
  138|  2.41k|				uint32_t midbits;
  139|  2.41k|				midbits = _HASH_KEY(newshift, item->hashval);
  ------------------
  |  |  801|  2.41k|	({                                                                     \
  |  |  802|  2.41k|		assume((tabshift) >= 2 && (tabshift) <= 33);                   \
  |  |  803|  2.41k|		(val) >> (33 - (tabshift));                                    \
  |  |  804|  2.41k|	})
  ------------------
  140|  2.41k|				midbits &= (1 << delta) - 1;
  141|  2.41k|				if (midbits > j)
  ------------------
  |  Branch (141:9): [True: 642, False: 1.77k]
  ------------------
  142|    642|					break;
  143|  1.77k|				apos = &item->next;
  144|  1.77k|			}
  145|  3.58k|		}
  146|  1.79k|	} while (i > 0);
  ------------------
  |  Branch (146:11): [True: 1.77k, False: 19]
  ------------------
  147|       |
  148|     22|out:
  149|     22|	head->tabshift = newshift;
  150|     22|	hash_consistency_check(head);
  151|     22|}
typesafe_hash_shrink:
  154|      1|{
  155|      1|	uint32_t newsize = head->count, i, j;
  156|      1|	uint8_t newshift, delta;
  157|       |
  158|      1|	hash_consistency_check(head);
  159|       |
  160|      1|	if (!head->count) {
  ------------------
  |  Branch (160:6): [True: 0, False: 1]
  ------------------
  161|      0|		XFREE(MTYPE_TYPEDHASH_BUCKET, head->entries);
  ------------------
  |  |  170|      0|	do {                                                                   \
  |  |  171|      0|		qfree(mtype, ptr);                                             \
  |  |  172|      0|		ptr = NULL;                                                    \
  |  |  173|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  162|      0|		head->tabshift = 0;
  163|      0|		return;
  164|      0|	}
  165|       |
  166|      1|	newsize |= newsize >> 1;
  167|      1|	newsize |= newsize >> 2;
  168|      1|	newsize |= newsize >> 4;
  169|      1|	newsize |= newsize >> 8;
  170|      1|	newsize |= newsize >> 16;
  171|      1|	newsize++;
  172|      1|	newshift = __builtin_ctz(newsize) + 1;
  173|       |
  174|      1|	if (head->minshift && newshift < head->minshift)
  ------------------
  |  Branch (174:6): [True: 0, False: 1]
  |  Branch (174:24): [True: 0, False: 0]
  ------------------
  175|      0|		newshift = head->minshift;
  176|      1|	if (newshift == head->tabshift)
  ------------------
  |  Branch (176:6): [True: 0, False: 1]
  ------------------
  177|      0|		return;
  178|      1|	newsize = _HASH_SIZE(newshift);
  ------------------
  |  |  797|      1|	((1U << (tabshift)) >> 1)
  ------------------
  179|       |
  180|      1|	delta = head->tabshift - newshift;
  181|       |
  182|    257|	for (i = 0; i < newsize; i++) {
  ------------------
  |  Branch (182:14): [True: 256, False: 1]
  ------------------
  183|    256|		struct thash_item **apos = &head->entries[i];
  184|       |
  185|    768|		for (j = 0; j < (1U << delta); j++) {
  ------------------
  |  Branch (185:15): [True: 512, False: 256]
  ------------------
  186|    512|			*apos = head->entries[(i << delta) + j];
  187|    767|			while (*apos)
  ------------------
  |  Branch (187:11): [True: 255, False: 512]
  ------------------
  188|    255|				apos = &(*apos)->next;
  189|    512|		}
  190|    256|	}
  191|      1|	head->entries = XREALLOC(MTYPE_TYPEDHASH_BUCKET, head->entries,
  ------------------
  |  |  166|      1|#define XREALLOC(mtype, ptr, size)	qrealloc(mtype, ptr, size)
  ------------------
  192|      1|			sizeof(head->entries[0]) * newsize);
  193|      1|	head->tabshift = newshift;
  194|       |
  195|      1|	hash_consistency_check(head);
  196|      1|}

pim_bsm.c:bsm_frags_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|}                                                                              \
pim_bsm.c:bsm_frags_count:
  466|    211|macro_pure size_t prefix ## _count(const struct prefix##_head *h)              \
  467|    211|{                                                                              \
  468|    211|	return h->dh.count;                                                    \
  469|    211|}                                                                              \
pim_bsm.c:bsm_frags_first:
   59|    130|macro_pure type *prefix ## _first(struct prefix##_head *h)                     \
   60|    130|{                                                                              \
   61|    130|	return (type *)prefix ## _const_first(h);                              \
   62|    130|}                                                                              \
pim_bsm.c:bsm_frags_next:
   63|    157|macro_pure type *prefix ## _next(struct prefix##_head *h, type *item)          \
   64|    157|{                                                                              \
   65|    157|	return (type *)prefix ## _const_next(h, item);                         \
   66|    157|}                                                                              \
pim_bsm.c:bsm_rpinfos_first:
   59|   333k|macro_pure type *prefix ## _first(struct prefix##_head *h)                     \
   60|   333k|{                                                                              \
   61|   333k|	return (type *)prefix ## _const_first(h);                              \
   62|   333k|}                                                                              \
pim_bsm.c:bsm_rpinfos_init:
  646|  83.2k|macro_inline void prefix ## _init(struct prefix##_head *h)                     \
  647|  83.2k|{                                                                              \
  648|  83.2k|	memset(h, 0, sizeof(*h));                                              \
  649|  83.2k|}                                                                              \
pim_bsm.c:bsm_rpinfos_swap_all:
  130|  74.9k|				      struct prefix##_head *b)                 \
  131|  74.9k|{                                                                              \
  132|  74.9k|	struct prefix##_head tmp = *a;                                         \
  133|  74.9k|	*a = *b;                                                               \
  134|  74.9k|	*b = tmp;                                                              \
  135|  74.9k|}                                                                              \
pim_bsm.c:bsm_frags_add_tail:
  386|    594|macro_inline void prefix ## _add_tail(struct prefix##_head *h, type *item)     \
  387|    594|{                                                                              \
  388|    594|	typesafe_dlist_add(&h->dh, h->dh.hitem.prev, &item->field.di);         \
  389|    594|}                                                                              \
pim_bsm.c:typesafe_dlist_add:
  302|    594|{
  303|       |	/* SA on clang-11 thinks this can happen, but in reality -assuming no
  304|       |	 * memory corruption- it can't.  DLIST uses a "closed" ring, i.e. the
  305|       |	 * termination at the end of the list is not NULL but rather a pointer
  306|       |	 * back to the head.  (This eliminates special-casing the first or last
  307|       |	 * item.)
  308|       |	 *
  309|       |	 * Sadly, can't use assert() here since the libfrr assert / xref code
  310|       |	 * uses typesafe lists itself...  that said, if an assert tripped here
  311|       |	 * we'd already be way past some memory corruption, so we might as
  312|       |	 * well just take the SEGV.  (In the presence of corruption, we'd see
  313|       |	 * random SEGVs from places that make no sense at all anyway, an
  314|       |	 * assert might actually be a red herring.)
  315|       |	 *
  316|       |	 * ("assume()" tells the compiler to produce code as if the condition
  317|       |	 * will always hold;  it doesn't have any actual effect here, it'll
  318|       |	 * just SEGV out on "item->next->prev = item".)
  319|       |	 */
  320|    594|	assume(prev->next != NULL);
  321|       |
  322|    594|	item->next = prev->next;
  323|    594|	item->next->prev = item;
  324|    594|	item->prev = prev;
  325|    594|	prev->next = item;
  326|    594|	head->count++;
  327|    594|}
pim_nht.c:rb_pim_upstream_first:
   59|  32.8k|macro_pure type *prefix ## _first(struct prefix##_head *h)                     \
   60|  32.8k|{                                                                              \
   61|  32.8k|	return (type *)prefix ## _const_first(h);                              \
   62|  32.8k|}                                                                              \
pim_nht.c:rb_pim_upstream_next:
   63|  21.5M|macro_pure type *prefix ## _next(struct prefix##_head *h, type *item)          \
   64|  21.5M|{                                                                              \
   65|  21.5M|	return (type *)prefix ## _const_next(h, item);                         \
   66|  21.5M|}                                                                              \
pim_oil.c:rb_pim_oil_find:
   80|  43.2k|				   const type *item)                           \
   81|  43.2k|{                                                                              \
   82|  43.2k|	return (type *)prefix ## _const_find(h, item);                         \
   83|  43.2k|}                                                                              \
pim_rp.c:rb_pim_upstream_first:
   59|  57.9k|macro_pure type *prefix ## _first(struct prefix##_head *h)                     \
   60|  57.9k|{                                                                              \
   61|  57.9k|	return (type *)prefix ## _const_first(h);                              \
   62|  57.9k|}                                                                              \
pim_rp.c:rb_pim_upstream_next:
   63|  38.0M|macro_pure type *prefix ## _next(struct prefix##_head *h, type *item)          \
   64|  38.0M|{                                                                              \
   65|  38.0M|	return (type *)prefix ## _const_next(h, item);                         \
   66|  38.0M|}                                                                              \
pim_upstream.c:rb_pim_upstream_first:
   59|  27.3k|macro_pure type *prefix ## _first(struct prefix##_head *h)                     \
   60|  27.3k|{                                                                              \
   61|  27.3k|	return (type *)prefix ## _const_first(h);                              \
   62|  27.3k|}                                                                              \
pim_upstream.c:rb_pim_upstream_next:
   63|  17.5M|macro_pure type *prefix ## _next(struct prefix##_head *h, type *item)          \
   64|  17.5M|{                                                                              \
   65|  17.5M|	return (type *)prefix ## _const_next(h, item);                         \
   66|  17.5M|}                                                                              \
pim_upstream.c:rb_pim_upstream_find:
   80|   130k|				   const type *item)                           \
   81|   130k|{                                                                              \
   82|   130k|	return (type *)prefix ## _const_find(h, item);                         \
   83|   130k|}                                                                              \
pim_register.c:rb_pim_upstream_first:
   59|      9|macro_pure type *prefix ## _first(struct prefix##_head *h)                     \
   60|      9|{                                                                              \
   61|      9|	return (type *)prefix ## _const_first(h);                              \
   62|      9|}                                                                              \
pim_register.c:rb_pim_upstream_next:
   63|    383|macro_pure type *prefix ## _next(struct prefix##_head *h, type *item)          \
   64|    383|{                                                                              \
   65|    383|	return (type *)prefix ## _const_next(h, item);                         \
   66|    383|}                                                                              \
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|      3|				   const type *item)                           \
   81|      3|{                                                                              \
   82|      3|	return (type *)prefix ## _const_find(h, item);                         \
   83|      3|}                                                                              \
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|      2|macro_inline void prefix ## _init(struct prefix##_head *h)                     \
  833|      2|{                                                                              \
  834|      2|	memset(h, 0, sizeof(*h));                                              \
  835|      2|}                                                                              \
table.c:rn_hash_node_find:
   80|   522k|				   const type *item)                           \
   81|   522k|{                                                                              \
   82|   522k|	return (type *)prefix ## _const_find(h, item);                         \
   83|   522k|}                                                                              \
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|     69|{
   17|     69|	vector v = XCALLOC(MTYPE_VECTOR, sizeof(struct _vector));
  ------------------
  |  |  165|     69|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
   18|       |
   19|       |	/* allocate at least one slot */
   20|     69|	if (size == 0)
  ------------------
  |  Branch (20:6): [True: 0, False: 69]
  ------------------
   21|      0|		size = 1;
   22|       |
   23|     69|	v->alloced = size;
   24|     69|	v->active = 0;
   25|     69|	v->count = 0;
   26|     69|	v->index = XCALLOC(MTYPE_VECTOR_INDEX, sizeof(void *) * size);
  ------------------
  |  |  165|     69|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
   27|     69|	return v;
   28|     69|}
vector_ensure:
   54|     36|{
   55|     36|	if (v->alloced > num)
  ------------------
  |  Branch (55:6): [True: 29, False: 7]
  ------------------
   56|     29|		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|     17|{
   72|     17|	unsigned int i;
   73|       |
   74|     17|	if (v->active == v->count)
  ------------------
  |  Branch (74:6): [True: 17, False: 0]
  ------------------
   75|     17|		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|     17|{
   90|     17|	unsigned int i;
   91|       |
   92|     17|	i = vector_empty_slot(v);
   93|     17|	vector_ensure(v, i);
   94|       |
   95|     17|	if (v->index[i])
  ------------------
  |  Branch (95:6): [True: 0, False: 17]
  ------------------
   96|      0|		v->count--;
   97|     17|	if (val)
  ------------------
  |  Branch (97:6): [True: 17, False: 0]
  ------------------
   98|     17|		v->count++;
   99|     17|	v->index[i] = val;
  100|       |
  101|     17|	if (v->active <= i)
  ------------------
  |  Branch (101:6): [True: 17, False: 0]
  ------------------
  102|     17|		v->active = i + 1;
  103|       |
  104|     17|	return i;
  105|     17|}
vector_set_index:
  109|     17|{
  110|     17|	vector_ensure(v, i);
  111|       |
  112|     17|	if (v->index[i])
  ------------------
  |  Branch (112:6): [True: 0, False: 17]
  ------------------
  113|      0|		v->count--;
  114|     17|	if (val)
  ------------------
  |  Branch (114:6): [True: 17, False: 0]
  ------------------
  115|     17|		v->count++;
  116|     17|	v->index[i] = val;
  117|       |
  118|     17|	if (v->active <= i)
  ------------------
  |  Branch (118:6): [True: 5, False: 12]
  ------------------
  119|      5|		v->active = i + 1;
  120|       |
  121|     17|	return i;
  122|     17|}

vrf_lookup_by_name:
   65|      3|{
   66|      3|	struct vrf vrf;
   67|      3|	strlcpy(vrf.name, name, sizeof(vrf.name));
   68|      3|	return (RB_FIND(vrf_name_head, &vrfs_by_name, &vrf));
  ------------------
  |  |  511|      3|#define RB_FIND(_name, _head, _key)	_name##_RB_FIND(_head, _key)
  ------------------
   69|      3|}
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|  1.12k|{
  262|  1.12k|	struct vrf vrf;
  263|  1.12k|	vrf.vrf_id = vrf_id;
  264|  1.12k|	return (RB_FIND(vrf_id_head, &vrfs_by_id, &vrf));
  ------------------
  |  |  511|  1.12k|#define RB_FIND(_name, _head, _key)	_name##_RB_FIND(_head, _key)
  ------------------
  265|  1.12k|}
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_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|      2|{
  581|      2|	if (!vrf_backend_configured)
  ------------------
  |  Branch (581:6): [True: 0, False: 2]
  ------------------
  582|      0|		return VRF_BACKEND_UNKNOWN;
  583|      2|	return vrf_backend;
  584|      2|}
vrf_configure_backend:
  587|      1|{
  588|       |	/* Work around issue in old gcc */
  589|      1|	switch (backend) {
  ------------------
  |  Branch (589:10): [True: 1, False: 0]
  ------------------
  590|      0|	case VRF_BACKEND_UNKNOWN:
  ------------------
  |  Branch (590:2): [True: 0, False: 1]
  ------------------
  591|      0|	case VRF_BACKEND_NETNS:
  ------------------
  |  Branch (591:2): [True: 0, False: 1]
  ------------------
  592|      1|	case VRF_BACKEND_VRF_LITE:
  ------------------
  |  Branch (592:2): [True: 1, False: 0]
  ------------------
  593|      1|		break;
  594|      0|	case VRF_BACKEND_MAX:
  ------------------
  |  Branch (594:2): [True: 0, False: 1]
  ------------------
  595|      0|		return -1;
  596|      1|	}
  597|       |
  598|      1|	vrf_backend = backend;
  599|      1|	vrf_backend_configured = 1;
  600|       |
  601|      1|	return 0;
  602|      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|      1|{
  761|      1|	return vrf_default_name;
  762|      1|}
vrf.c:vrf_id_compare:
   72|  1.12k|{
   73|  1.12k|	return (a->vrf_id - b->vrf_id);
   74|  1.12k|}
vrf.c:vrf_name_compare:
   77|      2|{
   78|      2|	return strcmp(a->name, b->name);
   79|      2|}

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|}

wheel_init:
   67|      1|{
   68|      1|	struct timer_wheel *wheel;
   69|      1|	size_t i;
   70|       |
   71|      1|	wheel = XCALLOC(MTYPE_TIMER_WHEEL, sizeof(struct timer_wheel));
  ------------------
  |  |  165|      1|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
   72|       |
   73|      1|	wheel->name = XSTRDUP(MTYPE_TIMER_WHEEL, run_name);
  ------------------
  |  |  167|      1|#define XSTRDUP(mtype, str)		qstrdup(mtype, str)
  ------------------
   74|      1|	wheel->slot_key = slot_key;
   75|      1|	wheel->slot_run = slot_run;
   76|       |
   77|      1|	wheel->period = period;
   78|      1|	wheel->slots = slots;
   79|      1|	wheel->curr_slot = 0;
   80|      1|	wheel->master = master;
   81|      1|	wheel->nexttime = period / slots;
   82|       |
   83|      1|	wheel->wheel_slot_lists = XCALLOC(MTYPE_TIMER_WHEEL_LIST,
  ------------------
  |  |  165|      1|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
   84|      1|					  slots * sizeof(struct list *));
   85|    101|	for (i = 0; i < slots; i++)
  ------------------
  |  Branch (85:14): [True: 100, False: 1]
  ------------------
   86|    100|		wheel->wheel_slot_lists[i] = list_new();
   87|       |
   88|      1|	event_add_timer_msec(wheel->master, wheel_timer_thread, wheel,
  ------------------
  |  |  217|      1|#define event_add_timer_msec(m, f, a, v, t) 0
  ------------------
   89|      1|			     wheel->nexttime, &wheel->timer);
   90|       |
   91|      1|	return wheel;
   92|      1|}
wheel_add_item:
  109|  43.0k|{
  110|  43.0k|	long long slot;
  111|       |
  112|  43.0k|	slot = (*wheel->slot_key)(item);
  113|       |
  114|  43.0k|	if (debug_timer_wheel)
  ------------------
  |  Branch (114:6): [True: 0, False: 43.0k]
  ------------------
  115|      0|		zlog_debug("%s: Inserting %p: %lld %lld", __func__, item, slot,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  116|  43.0k|			   slot % wheel->slots);
  117|  43.0k|	listnode_add(wheel->wheel_slot_lists[slot % wheel->slots], item);
  118|       |
  119|  43.0k|	return 0;
  120|  43.0k|}
wheel_remove_item:
  123|  42.5k|{
  124|  42.5k|	long long slot;
  125|       |
  126|  42.5k|	slot = (*wheel->slot_key)(item);
  127|       |
  128|  42.5k|	if (debug_timer_wheel)
  ------------------
  |  Branch (128:6): [True: 0, False: 42.5k]
  ------------------
  129|      0|		zlog_debug("%s: Removing %p: %lld %lld", __func__, item, slot,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  130|  42.5k|			   slot % wheel->slots);
  131|  42.5k|	listnode_delete(wheel->wheel_slot_lists[slot % wheel->slots], item);
  132|       |
  133|  42.5k|	return 0;
  134|  42.5k|}

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|  9.40k|	for (xrefp = block->start; xrefp < block->stop; xrefp++)
  ------------------
  |  Branch (119:29): [True: 9.40k, False: 4]
  ------------------
  120|  9.40k|		xref_add_one(*xrefp);
  121|      4|}
xref.c:xref_add_one:
   58|  9.40k|{
   59|  9.40k|	SHA256_CTX sha;
   60|  9.40k|	struct xrefdata *xrefdata;
   61|       |
   62|  9.40k|	const char *filename, *p, *q;
   63|  9.40k|	uint8_t hash[32], *h = hash;
   64|  9.40k|	uint32_t be_val;
   65|  9.40k|	int bitpos;
   66|       |
   67|  9.40k|	if (!xref || !xref->xrefdata)
  ------------------
  |  Branch (67:6): [True: 0, False: 9.40k]
  |  Branch (67:15): [True: 9.40k, False: 0]
  ------------------
   68|  9.40k|		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|     32|{
   25|       |	embed->next = NULL;
   26|     32|	*embedupd = embed;
   27|     32|	embedupd = &embed->next;
   28|     32|}

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_send_message:
  286|  60.2k|{
  287|  60.2k|	if (zclient->sock < 0)
  ------------------
  |  Branch (287:6): [True: 60.2k, False: 0]
  ------------------
  288|  60.2k|		return ZCLIENT_SEND_FAILURE;
  289|      0|	switch (buffer_write(zclient->wb, zclient->sock,
  ------------------
  |  Branch (289:10): [True: 0, False: 0]
  ------------------
  290|      0|			     STREAM_DATA(zclient->obuf),
  ------------------
  |  |  126|      0|#define STREAM_DATA(S)  ((S)->data)
  ------------------
  291|      0|			     stream_get_endp(zclient->obuf))) {
  292|      0|	case BUFFER_ERROR:
  ------------------
  |  Branch (292:2): [True: 0, False: 0]
  ------------------
  293|      0|		flog_err(EC_LIB_ZAPI_SOCKET,
  ------------------
  |  |  136|      0|#define flog_err(ferr_id, format, ...) 0
  ------------------
  294|      0|			 "%s: buffer_write failed to zclient fd %d, closing",
  295|      0|			 __func__, zclient->sock);
  296|      0|		return zclient_failed(zclient);
  297|      0|	case BUFFER_EMPTY:
  ------------------
  |  Branch (297:2): [True: 0, False: 0]
  ------------------
  298|      0|		EVENT_OFF(zclient->t_write);
  ------------------
  |  |  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]
  |  |  ------------------
  ------------------
  299|      0|		return ZCLIENT_SEND_SUCCESS;
  300|      0|	case BUFFER_PENDING:
  ------------------
  |  Branch (300:2): [True: 0, False: 0]
  ------------------
  301|      0|		event_add_write(zclient->master, zclient_flush_data, zclient,
  ------------------
  |  |  215|      0|#define event_add_write(m, f, a, v, t) 0
  ------------------
  302|      0|				zclient->sock, &zclient->t_write);
  303|      0|		return ZCLIENT_SEND_BUFFERED;
  304|      0|	}
  305|       |
  306|       |	/* should not get here */
  307|      0|	return ZCLIENT_SEND_SUCCESS;
  308|      0|}
zclient_create_header:
  315|  60.2k|{
  316|       |	/* length placeholder, caller can update */
  317|  60.2k|	stream_putw(s, ZEBRA_HEADER_SIZE);
  ------------------
  |  |   52|  60.2k|#define ZEBRA_HEADER_SIZE             10
  ------------------
  318|  60.2k|	stream_putc(s, ZEBRA_HEADER_MARKER);
  ------------------
  |  |   45|  60.2k|#define ZEBRA_HEADER_MARKER              254
  ------------------
  319|  60.2k|	stream_putc(s, ZSERV_VERSION);
  ------------------
  |  |  387|  60.2k|#define ZSERV_VERSION 6
  ------------------
  320|  60.2k|	stream_putl(s, vrf_id);
  321|  60.2k|	stream_putw(s, command);
  322|  60.2k|}
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_send_rnh:
  769|  60.2k|{
  770|  60.2k|	struct stream *s;
  771|       |
  772|  60.2k|	s = zclient->obuf;
  773|  60.2k|	stream_reset(s);
  774|  60.2k|	zclient_create_header(s, command, vrf_id);
  775|  60.2k|	stream_putc(s, (connected) ? 1 : 0);
  ------------------
  |  Branch (775:17): [True: 0, False: 60.2k]
  ------------------
  776|  60.2k|	stream_putc(s, (resolve_via_def) ? 1 : 0);
  ------------------
  |  Branch (776:17): [True: 0, False: 60.2k]
  ------------------
  777|  60.2k|	stream_putw(s, safi);
  778|  60.2k|	stream_putw(s, PREFIX_FAMILY(p));
  ------------------
  |  |  372|  60.2k|#define PREFIX_FAMILY(p)  ((p)->family)
  ------------------
  779|  60.2k|	stream_putc(s, p->prefixlen);
  780|  60.2k|	switch (PREFIX_FAMILY(p)) {
  ------------------
  |  |  372|  60.2k|#define PREFIX_FAMILY(p)  ((p)->family)
  ------------------
  781|  60.2k|	case AF_INET:
  ------------------
  |  Branch (781:2): [True: 60.2k, False: 0]
  ------------------
  782|  60.2k|		stream_put_in_addr(s, &p->u.prefix4);
  783|  60.2k|		break;
  784|      0|	case AF_INET6:
  ------------------
  |  Branch (784:2): [True: 0, False: 60.2k]
  ------------------
  785|      0|		stream_put(s, &(p->u.prefix6), 16);
  786|      0|		break;
  787|      0|	default:
  ------------------
  |  Branch (787:2): [True: 0, False: 60.2k]
  ------------------
  788|      0|		break;
  789|  60.2k|	}
  790|  60.2k|	stream_putw_at(s, 0, stream_get_endp(s));
  791|       |
  792|  60.2k|	return zclient_send_message(zclient);
  793|  60.2k|}
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: 1, False: 0]
  ------------------
 1005|      1|		if (errno != EEXIST) {
  ------------------
  |  Branch (1005:7): [True: 0, False: 1]
  ------------------
 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|      1|	}
 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|}

pim_iface.c:gm_ifp_update:
  363|      1|{
  364|      1|}

pim_addr.c:printfrr_pimaddr:
   17|   203k|{
   18|   203k|	const pim_addr *addr = vptr;
   19|   203k|	bool use_star = false;
   20|       |
   21|   203k|	if (ea->fmt[0] == 's') {
  ------------------
  |  Branch (21:6): [True: 172k, False: 30.2k]
  ------------------
   22|   172k|		use_star = true;
   23|   172k|		ea->fmt++;
   24|   172k|	}
   25|       |
   26|   203k|	if (!addr)
  ------------------
  |  Branch (26:6): [True: 0, False: 203k]
  ------------------
   27|      0|		return bputs(buf, "(null)");
   28|       |
   29|   203k|	if (use_star && pim_addr_is_any(*addr))
  ------------------
  |  Branch (29:6): [True: 172k, False: 30.2k]
  |  Branch (29:18): [True: 430, False: 172k]
  ------------------
   30|    430|		return bputch(buf, '*');
   31|       |
   32|   202k|#if PIM_IPV == 4
   33|   202k|	return bprintfrr(buf, "%pI4", addr);
   34|       |#else
   35|       |	return bprintfrr(buf, "%pI6", addr);
   36|       |#endif
   37|   203k|}
pim_addr.c:printfrr_sgaddr:
   42|  86.4k|{
   43|  86.4k|	const pim_sgaddr *sga = vptr;
   44|       |
   45|  86.4k|	if (!sga)
  ------------------
  |  Branch (45:6): [True: 0, False: 86.4k]
  ------------------
   46|      0|		return bputs(buf, "(null)");
   47|       |
   48|  86.4k|	return bprintfrr(buf, "(%pPAs,%pPAs)", &sga->src, &sga->grp);
   49|  86.4k|}

pim_addr.c:pim_addr_is_any:
   84|   172k|{
   85|   172k|	pim_addr zero = {};
   86|       |
   87|   172k|	return memcmp(&addr, &zero, sizeof(zero)) == 0;
   88|   172k|}
pim_assert.c:pim_addr_cmp:
   91|  86.4k|{
   92|  86.4k|	return memcmp(&a, &b, sizeof(a));
   93|  86.4k|}
pim_bsm.c:pim_addr_cmp:
   91|   333k|{
   92|   333k|	return memcmp(&a, &b, sizeof(a));
   93|   333k|}
pim_bsm.c:pim_addr_to_prefix:
   96|   287k|{
   97|   287k|	out.p->family = PIM_AF;
  ------------------
  |  |   19|   287k|#define PIM_AF		AF_INET
  ------------------
   98|   287k|	out.p->prefixlen = PIM_MAX_BITLEN;
  ------------------
  |  |   24|   287k|#define PIM_MAX_BITLEN	IPV4_MAX_BITLEN
  |  |  ------------------
  |  |  |  |  334|   287k|#define IPV4_MAX_BITLEN    32
  |  |  ------------------
  ------------------
   99|   287k|	memcpy(out.p->u.val, &in, sizeof(in));
  100|   287k|}
pim_iface.c:pim_addr_cmp:
   91|      2|{
   92|      2|	return memcmp(&a, &b, sizeof(a));
   93|      2|}
pim_iface.c:pim_addr_is_any:
   84|      3|{
   85|      3|	pim_addr zero = {};
   86|       |
   87|      3|	return memcmp(&addr, &zero, sizeof(zero)) == 0;
   88|      3|}
pim_iface.c:pim_addr_from_prefix:
  103|      1|{
  104|      1|	pim_addr ret;
  105|       |
  106|      1|	if (in.p->family != PIM_AF)
  ------------------
  |  |   19|      1|#define PIM_AF		AF_INET
  ------------------
  |  Branch (106:6): [True: 0, False: 1]
  ------------------
  107|      0|		return PIMADDR_ANY;
  ------------------
  |  |   79|      0|#define PIMADDR_ANY (pim_addr){ }
  ------------------
  108|       |
  109|      1|	memcpy(&ret, in.p->u.val, sizeof(ret));
  110|      1|	return ret;
  111|      1|}
pim_ifchannel.c:pim_sgaddr_cmp:
  137|  3.07M|{
  138|       |	/* memcmp over the entire struct = memcmp(grp) + memcmp(src) */
  139|  3.07M|	return memcmp(&a, &b, sizeof(a));
  140|  3.07M|}
pim_ifchannel.c:pim_addr_is_any:
   84|   340k|{
   85|   340k|	pim_addr zero = {};
   86|       |
   87|   340k|	return memcmp(&addr, &zero, sizeof(zero)) == 0;
   88|   340k|}
pim_ifchannel.c:pim_addr_cmp:
   91|   119k|{
   92|   119k|	return memcmp(&a, &b, sizeof(a));
   93|   119k|}
pim_join.c:pim_addr_cmp:
   91|    412|{
   92|    412|	return memcmp(&a, &b, sizeof(a));
   93|    412|}
pim_join.c:pim_addr_is_any:
   84|  7.45k|{
   85|  7.45k|	pim_addr zero = {};
   86|       |
   87|  7.45k|	return memcmp(&addr, &zero, sizeof(zero)) == 0;
   88|  7.45k|}
pim_macro.c:pim_addr_is_any:
   84|   108k|{
   85|   108k|	pim_addr zero = {};
   86|       |
   87|   108k|	return memcmp(&addr, &zero, sizeof(zero)) == 0;
   88|   108k|}
pim_macro.c:pim_addr_cmp:
   91|      8|{
   92|      8|	return memcmp(&a, &b, sizeof(a));
   93|      8|}
pim_neighbor.c:pim_addr_cmp:
   91|   103k|{
   92|   103k|	return memcmp(&a, &b, sizeof(a));
   93|   103k|}
pim_nht.c:pim_addr_to_prefix:
   96|  5.58M|{
   97|  5.58M|	out.p->family = PIM_AF;
  ------------------
  |  |   19|  5.58M|#define PIM_AF		AF_INET
  ------------------
   98|  5.58M|	out.p->prefixlen = PIM_MAX_BITLEN;
  ------------------
  |  |   24|  5.58M|#define PIM_MAX_BITLEN	IPV4_MAX_BITLEN
  |  |  ------------------
  |  |  |  |  334|  5.58M|#define IPV4_MAX_BITLEN    32
  |  |  ------------------
  ------------------
   99|  5.58M|	memcpy(out.p->u.val, &in, sizeof(in));
  100|  5.58M|}
pim_nht.c:pim_addr_is_any:
   84|  21.5M|{
   85|  21.5M|	pim_addr zero = {};
   86|       |
   87|  21.5M|	return memcmp(&addr, &zero, sizeof(zero)) == 0;
   88|  21.5M|}
pim_oil.c:pim_addr_cmp:
   91|  1.12M|{
   92|  1.12M|	return memcmp(&a, &b, sizeof(a));
   93|  1.12M|}
pim_oil.c:pim_addr_is_any:
   84|  7.12k|{
   85|  7.12k|	pim_addr zero = {};
   86|       |
   87|  7.12k|	return memcmp(&addr, &zero, sizeof(zero)) == 0;
   88|  7.12k|}
pim_pim.c:pim_addr_cmp:
   91|  1.48k|{
   92|  1.48k|	return memcmp(&a, &b, sizeof(a));
   93|  1.48k|}
pim_rp.c:pim_addr_cmp:
   91|  12.7M|{
   92|  12.7M|	return memcmp(&a, &b, sizeof(a));
   93|  12.7M|}
pim_rp.c:pim_addr_is_any:
   84|  32.9M|{
   85|  32.9M|	pim_addr zero = {};
   86|       |
   87|  32.9M|	return memcmp(&addr, &zero, sizeof(zero)) == 0;
   88|  32.9M|}
pim_rp.c:pim_addr_to_prefix:
   96|  20.0M|{
   97|  20.0M|	out.p->family = PIM_AF;
  ------------------
  |  |   19|  20.0M|#define PIM_AF		AF_INET
  ------------------
   98|  20.0M|	out.p->prefixlen = PIM_MAX_BITLEN;
  ------------------
  |  |   24|  20.0M|#define PIM_MAX_BITLEN	IPV4_MAX_BITLEN
  |  |  ------------------
  |  |  |  |  334|  20.0M|#define IPV4_MAX_BITLEN    32
  |  |  ------------------
  ------------------
   99|  20.0M|	memcpy(out.p->u.val, &in, sizeof(in));
  100|  20.0M|}
pim_rpf.c:pim_addr_is_any:
   84|   459k|{
   85|   459k|	pim_addr zero = {};
   86|       |
   87|   459k|	return memcmp(&addr, &zero, sizeof(zero)) == 0;
   88|   459k|}
pim_rpf.c:pim_addr_cmp:
   91|   315k|{
   92|   315k|	return memcmp(&a, &b, sizeof(a));
   93|   315k|}
pim_rpf.c:pim_addr_to_prefix:
   96|  68.0k|{
   97|  68.0k|	out.p->family = PIM_AF;
  ------------------
  |  |   19|  68.0k|#define PIM_AF		AF_INET
  ------------------
   98|  68.0k|	out.p->prefixlen = PIM_MAX_BITLEN;
  ------------------
  |  |   24|  68.0k|#define PIM_MAX_BITLEN	IPV4_MAX_BITLEN
  |  |  ------------------
  |  |  |  |  334|  68.0k|#define IPV4_MAX_BITLEN    32
  |  |  ------------------
  ------------------
   99|  68.0k|	memcpy(out.p->u.val, &in, sizeof(in));
  100|  68.0k|}
pim_ssm.c:pim_addr_to_prefix:
   96|     28|{
   97|     28|	out.p->family = PIM_AF;
  ------------------
  |  |   19|     28|#define PIM_AF		AF_INET
  ------------------
   98|     28|	out.p->prefixlen = PIM_MAX_BITLEN;
  ------------------
  |  |   24|     28|#define PIM_MAX_BITLEN	IPV4_MAX_BITLEN
  |  |  ------------------
  |  |  |  |  334|     28|#define IPV4_MAX_BITLEN    32
  |  |  ------------------
  ------------------
   99|     28|	memcpy(out.p->u.val, &in, sizeof(in));
  100|     28|}
pim_ssm.c:pim_addr_from_prefix:
  103|     28|{
  104|     28|	pim_addr ret;
  105|       |
  106|     28|	if (in.p->family != PIM_AF)
  ------------------
  |  |   19|     28|#define PIM_AF		AF_INET
  ------------------
  |  Branch (106:6): [True: 0, False: 28]
  ------------------
  107|      0|		return PIMADDR_ANY;
  ------------------
  |  |   79|      0|#define PIMADDR_ANY (pim_addr){ }
  ------------------
  108|       |
  109|     28|	memcpy(&ret, in.p->u.val, sizeof(ret));
  110|     28|	return ret;
  111|     28|}
pim_ssm.c:pim_addr_ssm:
  124|     28|{
  125|     28|	return PIM_ADDR_FUNCNAME(mcast_ssm)(&addr);
  ------------------
  |  |   33|     28|#define PIM_ADDR_FUNCNAME(name) ipv4_##name
  ------------------
  126|     28|}
pim_tlv.c:pim_addr_from_prefix:
  103|    308|{
  104|    308|	pim_addr ret;
  105|       |
  106|    308|	if (in.p->family != PIM_AF)
  ------------------
  |  |   19|    308|#define PIM_AF		AF_INET
  ------------------
  |  Branch (106:6): [True: 0, False: 308]
  ------------------
  107|      0|		return PIMADDR_ANY;
  ------------------
  |  |   79|      0|#define PIMADDR_ANY (pim_addr){ }
  ------------------
  108|       |
  109|    308|	memcpy(&ret, in.p->u.val, sizeof(ret));
  110|    308|	return ret;
  111|    308|}
pim_tlv.c:pim_addr_cmp:
   91|    308|{
   92|    308|	return memcmp(&a, &b, sizeof(a));
   93|    308|}
pim_tlv.c:pim_addr_to_prefix:
   96|  3.01k|{
   97|  3.01k|	out.p->family = PIM_AF;
  ------------------
  |  |   19|  3.01k|#define PIM_AF		AF_INET
  ------------------
   98|  3.01k|	out.p->prefixlen = PIM_MAX_BITLEN;
  ------------------
  |  |   24|  3.01k|#define PIM_MAX_BITLEN	IPV4_MAX_BITLEN
  |  |  ------------------
  |  |  |  |  334|  3.01k|#define IPV4_MAX_BITLEN    32
  |  |  ------------------
  ------------------
   99|  3.01k|	memcpy(out.p->u.val, &in, sizeof(in));
  100|  3.01k|}
pim_upstream.c:pim_addr_is_any:
   84|  30.9M|{
   85|  30.9M|	pim_addr zero = {};
   86|       |
   87|  30.9M|	return memcmp(&addr, &zero, sizeof(zero)) == 0;
   88|  30.9M|}
pim_upstream.c:pim_addr_cmp:
   91|  58.5k|{
   92|  58.5k|	return memcmp(&a, &b, sizeof(a));
   93|  58.5k|}
pim_upstream.c:pim_sgaddr_cmp:
  137|  1.67M|{
  138|       |	/* memcmp over the entire struct = memcmp(grp) + memcmp(src) */
  139|  1.67M|	return memcmp(&a, &b, sizeof(a));
  140|  1.67M|}
pim_upstream.c:pim_sgaddr_hash:
  143|   226k|{
  144|   226k|	return jhash2((uint32_t *)&a, sizeof(a) / sizeof(uint32_t), initval);
  145|   226k|}
pim_register.c:pim_addr_cmp:
   91|    400|{
   92|    400|	return memcmp(&a, &b, sizeof(a));
   93|    400|}
pim_register.c:pim_addr_is_any:
   84|      9|{
   85|      9|	pim_addr zero = {};
   86|       |
   87|      9|	return memcmp(&addr, &zero, sizeof(zero)) == 0;
   88|      9|}
pim_msdp.c:pim_addr_is_any:
   84|  42.5k|{
   85|  42.5k|	pim_addr zero = {};
   86|       |
   87|  42.5k|	return memcmp(&addr, &zero, sizeof(zero)) == 0;
   88|  42.5k|}

pim_ifassert_winner_set:
   37|  43.2k|{
   38|  43.2k|	struct pim_interface *pim_ifp = ch->interface->info;
   39|  43.2k|	int winner_changed = !!pim_addr_cmp(ch->ifassert_winner, winner);
   40|  43.2k|	int metric_changed = !pim_assert_metric_match(
   41|  43.2k|		&ch->ifassert_winner_metric, &winner_metric);
   42|  43.2k|	enum pim_rpf_result rpf_result;
   43|  43.2k|	struct pim_rpf old_rpf;
   44|       |
   45|  43.2k|	if (PIM_DEBUG_PIM_EVENTS) {
  ------------------
  |  |  137|  43.2k|#define PIM_DEBUG_PIM_EVENTS (router->debugs & PIM_MASK_PIM_EVENTS)
  |  |  ------------------
  |  |  |  |   72|  43.2k|#define PIM_MASK_PIM_EVENTS          (1 << 0)
  |  |  ------------------
  |  |  |  Branch (137:30): [True: 0, False: 43.2k]
  |  |  ------------------
  ------------------
   46|      0|		if (ch->ifassert_state != new_state) {
  ------------------
  |  Branch (46:7): [True: 0, False: 0]
  ------------------
   47|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
   48|      0|				"%s: (S,G)=%s assert state changed from %s to %s on interface %s",
   49|      0|				__func__, ch->sg_str,
   50|      0|				pim_ifchannel_ifassert_name(ch->ifassert_state),
   51|      0|				pim_ifchannel_ifassert_name(new_state),
   52|      0|				ch->interface->name);
   53|      0|		}
   54|       |
   55|      0|		if (winner_changed)
  ------------------
  |  Branch (55:7): [True: 0, False: 0]
  ------------------
   56|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
   57|      0|				"%s: (S,G)=%s assert winner changed from %pPAs to %pPAs on interface %s",
   58|      0|				__func__, ch->sg_str, &ch->ifassert_winner,
   59|      0|				&winner, ch->interface->name);
   60|      0|	} /* PIM_DEBUG_PIM_EVENTS */
   61|       |
   62|  43.2k|	ch->ifassert_state = new_state;
   63|  43.2k|	ch->ifassert_winner = winner;
   64|  43.2k|	ch->ifassert_winner_metric = winner_metric;
   65|  43.2k|	ch->ifassert_creation = pim_time_monotonic_sec();
   66|       |
   67|  43.2k|	if (winner_changed || metric_changed) {
  ------------------
  |  Branch (67:6): [True: 10, False: 43.2k]
  |  Branch (67:24): [True: 3, False: 43.2k]
  ------------------
   68|     13|		if (winner_changed) {
  ------------------
  |  Branch (68:7): [True: 10, False: 3]
  ------------------
   69|     10|			old_rpf.source_nexthop.interface =
   70|     10|				ch->upstream->rpf.source_nexthop.interface;
   71|     10|			rpf_result = pim_rpf_update(pim_ifp->pim, ch->upstream,
   72|     10|						    &old_rpf, __func__);
   73|     10|			if (rpf_result == PIM_RPF_CHANGED ||
  ------------------
  |  Branch (73:8): [True: 0, False: 10]
  ------------------
   74|     10|			    (rpf_result == PIM_RPF_FAILURE &&
  ------------------
  |  Branch (74:9): [True: 2, False: 8]
  ------------------
   75|      2|			     old_rpf.source_nexthop.interface))
  ------------------
  |  Branch (75:9): [True: 0, False: 2]
  ------------------
   76|      0|				pim_zebra_upstream_rpf_changed(
   77|      0|					pim_ifp->pim, ch->upstream, &old_rpf);
   78|       |			/* update kernel multicast forwarding cache (MFC) */
   79|     10|			if (ch->upstream->rpf.source_nexthop.interface &&
  ------------------
  |  Branch (79:8): [True: 0, False: 10]
  ------------------
   80|      0|			    ch->upstream->channel_oil)
  ------------------
  |  Branch (80:8): [True: 0, False: 0]
  ------------------
   81|      0|				pim_upstream_mroute_iif_update(
   82|      0|					ch->upstream->channel_oil, __func__);
   83|     10|		}
   84|     13|		pim_upstream_update_join_desired(pim_ifp->pim, ch->upstream);
   85|     13|		pim_ifchannel_update_could_assert(ch);
   86|     13|		pim_ifchannel_update_assert_tracking_desired(ch);
   87|     13|	}
   88|  43.2k|}
pim_assert_recv:
  213|    162|{
  214|    162|	pim_sgaddr sg;
  215|    162|	pim_addr msg_source_addr;
  216|    162|	bool wrong_af = false;
  217|    162|	struct pim_assert_metric msg_metric;
  218|    162|	int offset;
  219|    162|	uint8_t *curr;
  220|    162|	int curr_size;
  221|    162|	struct pim_interface *pim_ifp = NULL;
  222|       |
  223|    162|	on_trace(__func__, ifp, src_addr);
  224|       |
  225|    162|	curr = buf;
  226|    162|	curr_size = buf_size;
  227|       |
  228|       |	/*
  229|       |	  Parse assert group addr
  230|       |	 */
  231|    162|	memset(&sg, 0, sizeof(sg));
  232|    162|	offset = pim_parse_addr_group(&sg, curr, curr_size);
  233|    162|	if (offset < 1) {
  ------------------
  |  Branch (233:6): [True: 4, False: 158]
  ------------------
  234|      4|		zlog_warn(
  ------------------
  |  |  131|      4|#define zlog_warn(...) 0
  ------------------
  235|      4|			"%s: pim_parse_addr_group() failure: from %pPAs on %s",
  236|      4|			__func__, &src_addr, ifp->name);
  237|      4|		return -1;
  238|      4|	}
  239|    158|	curr += offset;
  240|    158|	curr_size -= offset;
  241|       |
  242|       |	/*
  243|       |	  Parse assert source addr
  244|       |	*/
  245|    158|	offset = pim_parse_addr_ucast(&msg_source_addr, curr, curr_size,
  246|    158|				      &wrong_af);
  247|    158|	if (offset < 1 || wrong_af) {
  ------------------
  |  Branch (247:6): [True: 4, False: 154]
  |  Branch (247:20): [True: 0, False: 154]
  ------------------
  248|      4|		zlog_warn(
  ------------------
  |  |  131|      4|#define zlog_warn(...) 0
  ------------------
  249|      4|			"%s: pim_parse_addr_ucast() failure: from %pPAs on %s",
  250|      4|			__func__, &src_addr, ifp->name);
  251|      4|		return -2;
  252|      4|	}
  253|    154|	curr += offset;
  254|    154|	curr_size -= offset;
  255|       |
  256|    154|	if (curr_size < 8) {
  ------------------
  |  Branch (256:6): [True: 5, False: 149]
  ------------------
  257|      5|		zlog_warn(
  ------------------
  |  |  131|      5|#define zlog_warn(...) 0
  ------------------
  258|      5|			"%s: preference/metric size is less than 8 bytes: size=%d from %pPAs on interface %s",
  259|      5|			__func__, curr_size, &src_addr, ifp->name);
  260|      5|		return -3;
  261|      5|	}
  262|       |
  263|       |	/*
  264|       |	  Parse assert metric preference
  265|       |	*/
  266|       |
  267|    149|	msg_metric.metric_preference = pim_read_uint32_host(curr);
  268|       |
  269|    149|	msg_metric.rpt_bit_flag = msg_metric.metric_preference
  270|    149|				  & 0x80000000;      /* save highest bit */
  271|    149|	msg_metric.metric_preference &= ~0x80000000; /* clear highest bit */
  272|       |
  273|    149|	curr += 4;
  274|       |
  275|       |	/*
  276|       |	  Parse assert route metric
  277|       |	*/
  278|       |
  279|    149|	msg_metric.route_metric = pim_read_uint32_host(curr);
  280|       |
  281|    149|	if (PIM_DEBUG_PIM_TRACE)
  ------------------
  |  |  146|    149|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|    149|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|    149|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 149]
  |  |  ------------------
  ------------------
  282|      0|		zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  283|    149|			"%s: from %pPAs on %s: (S,G)=(%pPAs,%pPAs) pref=%u metric=%u rpt_bit=%u",
  284|    149|			__func__, &src_addr, ifp->name, &msg_source_addr,
  285|    149|			&sg.grp, msg_metric.metric_preference,
  286|    149|			msg_metric.route_metric,
  287|    149|			PIM_FORCE_BOOLEAN(msg_metric.rpt_bit_flag));
  288|       |
  289|    149|	msg_metric.ip_address = src_addr;
  290|       |
  291|    149|	pim_ifp = ifp->info;
  292|    149|	assert(pim_ifp);
  ------------------
  |  |   51|    149|	({                                                                     \
  |  |   52|    149|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|    149|			(used)) = {                                            \
  |  |   54|    149|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|    149|	{                                                                      \
  |  |  |  |  284|    149|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|    149|		/* .type = */ (type_),                                         \
  |  |  |  |  286|    149|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|    149|		/* .func = */ func_,                                           \
  |  |  |  |  289|    149|	}                                                                      \
  |  |  ------------------
  |  |   55|    149|			.expr = #expr_,                                        \
  |  |   56|    149|		};                                                             \
  |  |   57|    149|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|    149|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|    149|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|    149|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|    149|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 149]
  |  |  |  Branch (58:24): [True: 149, False: 0]
  |  |  ------------------
  |  |   59|    149|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|    149|	})
  ------------------
  293|       |
  294|    149|	if (pim_ifp->pim_passive_enable) {
  ------------------
  |  Branch (294:6): [True: 0, False: 149]
  ------------------
  295|      0|		if (PIM_DEBUG_PIM_PACKETS)
  ------------------
  |  |  140|      0|#define PIM_DEBUG_PIM_PACKETS (router->debugs & PIM_MASK_PIM_PACKETS)
  |  |  ------------------
  |  |  |  |   74|      0|#define PIM_MASK_PIM_PACKETS         (1 << 2)
  |  |  ------------------
  |  |  |  Branch (140:31): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  296|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  297|      0|				"skip receiving PIM message on passive interface %s",
  298|      0|				ifp->name);
  299|      0|		return 0;
  300|      0|	}
  301|       |
  302|    149|	++pim_ifp->pim_ifstat_assert_recv;
  303|       |
  304|    149|	return dispatch_assert(ifp, msg_source_addr, sg.grp, msg_metric);
  305|    149|}
pim_assert_metric_better:
  320|    201|{
  321|    201|	if (m1->rpt_bit_flag < m2->rpt_bit_flag)
  ------------------
  |  Branch (321:6): [True: 101, False: 100]
  ------------------
  322|    101|		return 1;
  323|    100|	if (m1->rpt_bit_flag > m2->rpt_bit_flag)
  ------------------
  |  Branch (323:6): [True: 100, False: 0]
  ------------------
  324|    100|		return 0;
  325|       |
  326|      0|	if (m1->metric_preference < m2->metric_preference)
  ------------------
  |  Branch (326:6): [True: 0, False: 0]
  ------------------
  327|      0|		return 1;
  328|      0|	if (m1->metric_preference > m2->metric_preference)
  ------------------
  |  Branch (328:6): [True: 0, False: 0]
  ------------------
  329|      0|		return 0;
  330|       |
  331|      0|	if (m1->route_metric < m2->route_metric)
  ------------------
  |  Branch (331:6): [True: 0, False: 0]
  ------------------
  332|      0|		return 1;
  333|      0|	if (m1->route_metric > m2->route_metric)
  ------------------
  |  Branch (333:6): [True: 0, False: 0]
  ------------------
  334|      0|		return 0;
  335|       |
  336|      0|	return pim_addr_cmp(m1->ip_address, m2->ip_address) > 0;
  337|      0|}
pim_assert_metric_match:
  341|  43.2k|{
  342|  43.2k|	if (m1->rpt_bit_flag != m2->rpt_bit_flag)
  ------------------
  |  Branch (342:6): [True: 10, False: 43.2k]
  ------------------
  343|     10|		return 0;
  344|  43.2k|	if (m1->metric_preference != m2->metric_preference)
  ------------------
  |  Branch (344:6): [True: 3, False: 43.2k]
  ------------------
  345|      3|		return 0;
  346|  43.2k|	if (m1->route_metric != m2->route_metric)
  ------------------
  |  Branch (346:6): [True: 0, False: 43.2k]
  ------------------
  347|      0|		return 0;
  348|       |
  349|  43.2k|	return !pim_addr_cmp(m1->ip_address, m2->ip_address);
  350|  43.2k|}
assert_action_a5:
  696|      5|{
  697|      5|	reset_ifassert_state(ch);
  698|      5|	if (ch->ifassert_state != PIM_IFASSERT_NOINFO) {
  ------------------
  |  Branch (698:6): [True: 0, False: 5]
  ------------------
  699|      0|		if (PIM_DEBUG_PIM_EVENTS)
  ------------------
  |  |  137|      0|#define PIM_DEBUG_PIM_EVENTS (router->debugs & PIM_MASK_PIM_EVENTS)
  |  |  ------------------
  |  |  |  |   72|      0|#define PIM_MASK_PIM_EVENTS          (1 << 0)
  |  |  ------------------
  |  |  |  Branch (137:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  700|      0|			zlog_warn(
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
  701|      0|				"%s: channel%s not in PIM_IFSSERT_NOINFO state as expected",
  702|      0|				__func__, ch->sg_str);
  703|      0|	}
  704|      5|}
pim_assert.c:on_trace:
   91|    162|{
   92|    162|	if (PIM_DEBUG_PIM_TRACE)
  ------------------
  |  |  146|    162|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|    162|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|    162|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 162]
  |  |  ------------------
  ------------------
   93|      0|		zlog_debug("%s: from %pPAs on %s", label, &src, ifp->name);
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
   94|    162|}
pim_assert.c:dispatch_assert:
  138|    149|{
  139|    149|	struct pim_ifchannel *ch;
  140|    149|	pim_sgaddr sg;
  141|       |
  142|    149|	memset(&sg, 0, sizeof(sg));
  143|    149|	sg.src = source_addr;
  144|    149|	sg.grp = group_addr;
  145|    149|	ch = pim_ifchannel_add(ifp, &sg, 0, 0);
  146|       |
  147|    149|	switch (ch->ifassert_state) {
  148|    144|	case PIM_IFASSERT_NOINFO:
  ------------------
  |  Branch (148:2): [True: 144, False: 5]
  ------------------
  149|    144|		if (recv_metric.rpt_bit_flag) {
  ------------------
  |  Branch (149:7): [True: 48, False: 96]
  ------------------
  150|       |			/* RPT bit set */
  151|     48|			if_could_assert_do_a1(__func__, ch);
  152|     96|		} else {
  153|       |			/* RPT bit clear */
  154|     96|			if (inferior_assert(&ch->ifassert_my_metric,
  ------------------
  |  Branch (154:8): [True: 0, False: 96]
  ------------------
  155|     96|					    &recv_metric)) {
  156|      0|				if_could_assert_do_a1(__func__, ch);
  157|     96|			} else if (acceptable_assert(&ch->ifassert_my_metric,
  ------------------
  |  Branch (157:15): [True: 96, False: 0]
  ------------------
  158|     96|						     &recv_metric)) {
  159|     96|				if (PIM_IF_FLAG_TEST_ASSERT_TRACKING_DESIRED(
  ------------------
  |  |   44|     96|#define PIM_IF_FLAG_TEST_ASSERT_TRACKING_DESIRED(flags) ((flags) & PIM_IF_FLAG_MASK_ASSERT_TRACKING_DESIRED)
  |  |  ------------------
  |  |  |  |   43|     96|#define PIM_IF_FLAG_MASK_ASSERT_TRACKING_DESIRED (1 << 1)
  |  |  ------------------
  |  |  |  Branch (44:57): [True: 5, False: 91]
  |  |  ------------------
  ------------------
  160|     96|					    ch->flags)) {
  161|      5|					assert_action_a6(ch, recv_metric);
  162|      5|				}
  163|     96|			}
  164|     96|		}
  165|    144|		break;
  166|      0|	case PIM_IFASSERT_I_AM_WINNER:
  ------------------
  |  Branch (166:2): [True: 0, False: 149]
  ------------------
  167|      0|		if (preferred_assert(ch, &recv_metric)) {
  ------------------
  |  Branch (167:7): [True: 0, False: 0]
  ------------------
  168|      0|			assert_action_a2(ch, recv_metric);
  169|      0|		} else {
  170|      0|			if (inferior_assert(&ch->ifassert_my_metric,
  ------------------
  |  Branch (170:8): [True: 0, False: 0]
  ------------------
  171|      0|					    &recv_metric)) {
  172|      0|				assert_action_a3(ch);
  173|      0|			}
  174|      0|		}
  175|      0|		break;
  176|      5|	case PIM_IFASSERT_I_AM_LOSER:
  ------------------
  |  Branch (176:2): [True: 5, False: 144]
  ------------------
  177|      5|		if (!pim_addr_cmp(recv_metric.ip_address,
  ------------------
  |  Branch (177:7): [True: 5, False: 0]
  ------------------
  178|      5|				  ch->ifassert_winner)) {
  179|       |			/* Assert from current winner */
  180|       |
  181|      5|			if (cancel_assert(&recv_metric)) {
  ------------------
  |  Branch (181:8): [True: 0, False: 5]
  ------------------
  182|      0|				assert_action_a5(ch);
  183|      5|			} else {
  184|      5|				if (inferior_assert(&ch->ifassert_my_metric,
  ------------------
  |  Branch (184:9): [True: 1, False: 4]
  ------------------
  185|      5|						    &recv_metric)) {
  186|      1|					assert_action_a5(ch);
  187|      4|				} else if (acceptable_assert(
  ------------------
  |  Branch (187:16): [True: 4, False: 0]
  ------------------
  188|      4|						   &ch->ifassert_my_metric,
  189|      4|						   &recv_metric)) {
  190|      4|					if (!recv_metric.rpt_bit_flag) {
  ------------------
  |  Branch (190:10): [True: 4, False: 0]
  ------------------
  191|      4|						assert_action_a2(ch,
  192|      4|								 recv_metric);
  193|      4|					}
  194|      4|				}
  195|      5|			}
  196|      5|		} else if (preferred_assert(ch, &recv_metric)) {
  ------------------
  |  Branch (196:14): [True: 0, False: 0]
  ------------------
  197|      0|			assert_action_a2(ch, recv_metric);
  198|      0|		}
  199|      5|		break;
  200|      0|	default: {
  ------------------
  |  Branch (200:2): [True: 0, False: 149]
  ------------------
  201|      0|		zlog_warn(
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
  202|      0|			"%s: (S,G)=%s invalid assert state %d on interface %s",
  203|      0|			__func__, ch->sg_str, ch->ifassert_state, ifp->name);
  204|      0|	}
  205|      0|		return -2;
  206|    149|	}
  207|       |
  208|    149|	return 0;
  209|    149|}
pim_assert.c:if_could_assert_do_a1:
  123|     48|{
  124|     48|	if (PIM_IF_FLAG_TEST_COULD_ASSERT(ch->flags)) {
  ------------------
  |  |   35|     48|#define PIM_IF_FLAG_TEST_COULD_ASSERT(flags) ((flags) & PIM_IF_FLAG_MASK_COULD_ASSERT)
  |  |  ------------------
  |  |  |  |   34|     48|#define PIM_IF_FLAG_MASK_COULD_ASSERT (1 << 0)
  |  |  ------------------
  |  |  |  Branch (35:46): [True: 0, False: 48]
  |  |  ------------------
  ------------------
  125|      0|		if (assert_action_a1(ch)) {
  ------------------
  |  Branch (125:7): [True: 0, False: 0]
  ------------------
  126|      0|			zlog_warn(
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
  127|      0|				"%s: %s: (S,G)=%s assert_action_a1 failure on interface %s",
  128|      0|				__func__, caller, ch->sg_str,
  129|      0|				ch->interface->name);
  130|       |			/* log warning only */
  131|      0|		}
  132|      0|	}
  133|     48|}
pim_assert.c:inferior_assert:
  111|    101|{
  112|    101|	return pim_assert_metric_better(my_metric, recv_metric);
  113|    101|}
pim_assert.c:acceptable_assert:
  105|    100|{
  106|    100|	return pim_assert_metric_better(recv_metric, my_metric);
  107|    100|}
pim_assert.c:assert_action_a6:
  719|      5|{
  720|      5|	assert_action_a2(ch, winner_metric);
  721|       |
  722|       |	/*
  723|       |	  If (I is RPF_interface(S)) AND (UpstreamJPState(S,G) == true) set
  724|       |	  SPTbit(S,G) to true.
  725|       |	*/
  726|      5|	if (ch->upstream->rpf.source_nexthop.interface == ch->interface)
  ------------------
  |  Branch (726:6): [True: 0, False: 5]
  ------------------
  727|      0|		if (ch->upstream->join_state == PIM_UPSTREAM_JOINED)
  ------------------
  |  Branch (727:7): [True: 0, False: 0]
  ------------------
  728|      0|			ch->upstream->sptbit = PIM_UPSTREAM_SPTBIT_TRUE;
  729|       |
  730|      5|	if (ch->ifassert_state != PIM_IFASSERT_I_AM_LOSER) {
  ------------------
  |  Branch (730:6): [True: 0, False: 5]
  ------------------
  731|      0|		if (PIM_DEBUG_PIM_EVENTS)
  ------------------
  |  |  137|      0|#define PIM_DEBUG_PIM_EVENTS (router->debugs & PIM_MASK_PIM_EVENTS)
  |  |  ------------------
  |  |  |  |   72|      0|#define PIM_MASK_PIM_EVENTS          (1 << 0)
  |  |  ------------------
  |  |  |  Branch (137:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  732|      0|			zlog_warn(
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
  733|      0|				"%s: channel%s not in PIM_IFASSERT_I_AM_LOSER state as expected",
  734|      0|				__func__, ch->sg_str);
  735|      0|	}
  736|      5|}
pim_assert.c:assert_action_a2:
  616|      9|{
  617|      9|	pim_ifassert_winner_set(ch, PIM_IFASSERT_I_AM_LOSER,
  618|      9|				winner_metric.ip_address, winner_metric);
  619|       |
  620|      9|	pim_assert_timer_set(ch, PIM_ASSERT_TIME);
  ------------------
  |  |   39|      9|#define PIM_ASSERT_TIME              (180) /* seconds */
  ------------------
  621|       |
  622|      9|	if (ch->ifassert_state != PIM_IFASSERT_I_AM_LOSER) {
  ------------------
  |  Branch (622:6): [True: 0, False: 9]
  ------------------
  623|      0|		if (PIM_DEBUG_PIM_EVENTS)
  ------------------
  |  |  137|      0|#define PIM_DEBUG_PIM_EVENTS (router->debugs & PIM_MASK_PIM_EVENTS)
  |  |  ------------------
  |  |  |  |   72|      0|#define PIM_MASK_PIM_EVENTS          (1 << 0)
  |  |  ------------------
  |  |  |  Branch (137:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  624|      0|			zlog_warn(
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
  625|      0|				"%s: channel%s not in expected PIM_IFASSERT_I_AM_LOSER state",
  626|      0|				__func__, ch->sg_str);
  627|      0|	}
  628|      9|}
pim_assert.c:pim_assert_timer_set:
  542|      9|{
  543|      9|	assert_timer_off(ch);
  544|       |
  545|      9|	if (PIM_DEBUG_PIM_TRACE) {
  ------------------
  |  |  146|      9|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|      9|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|      9|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 9]
  |  |  ------------------
  ------------------
  546|      0|		zlog_debug("%s: (S,G)=%s starting %u sec timer on interface %s",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  547|      0|			   __func__, ch->sg_str, interval, ch->interface->name);
  548|      0|	}
  549|       |
  550|      9|	event_add_timer(router->master, on_assert_timer, ch, interval,
  ------------------
  |  |  216|      9|#define event_add_timer(m, f, a, v, t) 0
  ------------------
  551|      9|			&ch->t_ifassert_timer);
  552|      9|}
pim_assert.c:assert_timer_off:
  530|      9|{
  531|      9|	if (PIM_DEBUG_PIM_TRACE) {
  ------------------
  |  |  146|      9|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|      9|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|      9|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 9]
  |  |  ------------------
  ------------------
  532|      0|		if (ch->t_ifassert_timer) {
  ------------------
  |  Branch (532:7): [True: 0, False: 0]
  ------------------
  533|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  534|      0|				"%s: (S,G)=%s cancelling timer on interface %s",
  535|      0|				__func__, ch->sg_str, ch->interface->name);
  536|      0|		}
  537|      0|	}
  538|      9|	EVENT_OFF(ch->t_ifassert_timer);
  ------------------
  |  |  164|      9|	do {                                                                   \
  |  |  165|      9|		if ((thread))                                                  \
  |  |  ------------------
  |  |  |  Branch (165:7): [True: 0, False: 9]
  |  |  ------------------
  |  |  166|      9|			event_cancel(&(thread));                               \
  |  |  167|      9|	} while (0)
  |  |  ------------------
  |  |  |  Branch (167:11): [Folded, False: 9]
  |  |  ------------------
  ------------------
  539|      9|}
pim_assert.c:cancel_assert:
  116|      5|{
  117|      5|	return (recv_metric->metric_preference
  ------------------
  |  Branch (117:9): [True: 0, False: 5]
  ------------------
  118|      5|		== PIM_ASSERT_METRIC_PREFERENCE_MAX)
  ------------------
  |  |   41|      5|#define PIM_ASSERT_METRIC_PREFERENCE_MAX (0xFFFFFFFF)
  ------------------
  119|      0|	       && (recv_metric->route_metric == PIM_ASSERT_ROUTE_METRIC_MAX);
  ------------------
  |  |   42|      0|#define PIM_ASSERT_ROUTE_METRIC_MAX      (0xFFFFFFFF)
  ------------------
  |  Branch (119:12): [True: 0, False: 0]
  ------------------
  120|      5|}

pim_bfd_info_nbr_create:
   72|    212|{
   73|       |	/* Check if Pim Interface BFD is enabled */
   74|    212|	if (!pim_ifp || !pim_ifp->bfd_config.enabled)
  ------------------
  |  Branch (74:6): [True: 0, False: 212]
  |  Branch (74:18): [True: 212, False: 0]
  ------------------
   75|    212|		return;
   76|       |
   77|      0|	if (neigh->bfd_session == NULL)
  ------------------
  |  Branch (77:6): [True: 0, False: 0]
  ------------------
   78|      0|		neigh->bfd_session = bfd_sess_new(pim_neighbor_bfd_cb, neigh);
   79|       |
   80|      0|	bfd_sess_set_timers(
   81|      0|		neigh->bfd_session, pim_ifp->bfd_config.detection_multiplier,
   82|      0|		pim_ifp->bfd_config.min_rx, pim_ifp->bfd_config.min_tx);
   83|      0|#if PIM_IPV == 4
   84|      0|	bfd_sess_set_ipv4_addrs(neigh->bfd_session, NULL, &neigh->source_addr);
   85|       |#else
   86|       |	bfd_sess_set_ipv6_addrs(neigh->bfd_session, NULL, &neigh->source_addr);
   87|       |#endif
   88|      0|	bfd_sess_set_interface(neigh->bfd_session, neigh->interface->name);
   89|      0|	bfd_sess_set_vrf(neigh->bfd_session, neigh->interface->vrf->vrf_id);
   90|      0|	bfd_sess_set_profile(neigh->bfd_session, pim_ifp->bfd_config.profile);
   91|      0|	bfd_sess_install(neigh->bfd_session);
   92|      0|}
pim_bfd_init:
  119|      1|{
  120|      1|	bfd_protocol_integration_init(pim_zebra_zclient_get(), router->master);
  121|      1|}

pim_bsm_rpinfo_cmp:
  103|  16.2M|{
  104|       |	/* RP election Algo :
  105|       |	 * Step-1 : Loweset Rp priority  will have higher precedance.
  106|       |	 * Step-2 : If priority same then higher hash val will have
  107|       |	 *	    higher precedance.
  108|       |	 * Step-3 : If Hash val is same then highest rp address will
  109|       |	 *	    become elected RP.
  110|       |	 */
  111|  16.2M|	if (node1->rp_prio < node2->rp_prio)
  ------------------
  |  Branch (111:6): [True: 12.7M, False: 3.53M]
  ------------------
  112|  12.7M|		return -1;
  113|  3.53M|	if (node1->rp_prio > node2->rp_prio)
  ------------------
  |  Branch (113:6): [True: 39.5k, False: 3.49M]
  ------------------
  114|  39.5k|		return 1;
  115|  3.49M|	if (node1->hash < node2->hash)
  ------------------
  |  Branch (115:6): [True: 76.5k, False: 3.42M]
  ------------------
  116|  76.5k|		return 1;
  117|  3.42M|	if (node1->hash > node2->hash)
  ------------------
  |  Branch (117:6): [True: 3.12M, False: 292k]
  ------------------
  118|  3.12M|		return -1;
  119|   292k|	return pim_addr_cmp(node2->rp_address, node1->rp_address);
  120|  3.42M|}
pim_bsm_proc_init:
  216|      1|{
  217|      1|	memset(&pim->global_scope, 0, sizeof(struct bsm_scope));
  218|       |
  219|      1|	pim->global_scope.sz_id = PIM_GBL_SZ_ID;
  ------------------
  |  |   20|      1|#define PIM_GBL_SZ_ID 0		    /* global scope zone id set to 0 */
  ------------------
  220|      1|	pim->global_scope.bsrp_table = route_table_init();
  221|      1|	pim->global_scope.accept_nofwd_bsm = true;
  222|      1|	pim->global_scope.state = NO_INFO;
  223|      1|	pim->global_scope.pim = pim;
  224|      1|	bsm_frags_init(pim->global_scope.bsm_frags);
  225|      1|	pim_bs_timer_start(&pim->global_scope, PIM_BS_TIME);
  ------------------
  |  |   21|      1|#define PIM_BS_TIME 60		    /* RFC 5059 - Sec 5 */
  ------------------
  226|      1|}
pim_bsm_new_nbr_fwd:
  917|    211|{
  918|    211|	pim_addr dst_addr;
  919|    211|	struct pim_interface *pim_ifp;
  920|    211|	struct bsm_scope *scope;
  921|    211|	struct bsm_frag *bsfrag;
  922|    211|	uint32_t pim_mtu;
  923|    211|	bool no_fwd = true;
  924|    211|	bool ret = false;
  925|       |
  926|    211|	if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|    211|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|    211|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 211]
  |  |  ------------------
  ------------------
  927|      0|		zlog_debug("%s: New neighbor %pPA seen on %s", __func__,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  928|    211|			   &neigh->source_addr, ifp->name);
  929|       |
  930|    211|	pim_ifp = ifp->info;
  931|       |
  932|       |	/* DR only forwards BSM packet */
  933|    211|	if (!pim_addr_cmp(pim_ifp->pim_dr_addr, pim_ifp->primary_address)) {
  ------------------
  |  Branch (933:6): [True: 3, False: 208]
  ------------------
  934|      3|		if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|      3|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|      3|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 3]
  |  |  ------------------
  ------------------
  935|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  936|      3|				"%s: It is not DR, so don't forward BSM packet",
  937|      3|				__func__);
  938|      3|	}
  939|       |
  940|    211|	if (!pim_ifp->bsm_enable) {
  ------------------
  |  Branch (940:6): [True: 0, False: 211]
  ------------------
  941|      0|		if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|      0|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|      0|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  942|      0|			zlog_debug("%s: BSM proc not enabled on %s", __func__,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  943|      0|				   ifp->name);
  944|      0|		return ret;
  945|      0|	}
  946|       |
  947|    211|	scope = &pim_ifp->pim->global_scope;
  948|       |
  949|    211|	if (!bsm_frags_count(scope->bsm_frags)) {
  ------------------
  |  Branch (949:6): [True: 81, False: 130]
  ------------------
  950|     81|		if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|     81|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|     81|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 81]
  |  |  ------------------
  ------------------
  951|      0|			zlog_debug("%s: BSM list for the scope is empty",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  952|     81|				   __func__);
  953|     81|		return ret;
  954|     81|	}
  955|       |
  956|    130|	if (!pim_ifp->ucast_bsm_accept) {
  ------------------
  |  Branch (956:6): [True: 0, False: 130]
  ------------------
  957|      0|		dst_addr = qpim_all_pim_routers_addr;
  958|      0|		if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|      0|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|      0|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  959|      0|			zlog_debug("%s: Sending BSM mcast to %pPA", __func__,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  960|      0|				   &neigh->source_addr);
  961|    130|	} else {
  962|    130|		dst_addr = neigh->source_addr;
  963|    130|		if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|    130|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|    130|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 130]
  |  |  ------------------
  ------------------
  964|      0|			zlog_debug("%s: Sending BSM ucast to %pPA", __func__,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  965|    130|				   &neigh->source_addr);
  966|    130|	}
  967|    130|	pim_mtu = ifp->mtu - MAX_IP_HDR_LEN;
  ------------------
  |  |   40|    130|#define MAX_IP_HDR_LEN 24
  ------------------
  968|    130|	pim_hello_require(ifp);
  969|       |
  970|    157|	frr_each (bsm_frags, scope->bsm_frags, bsfrag) {
  ------------------
  |  |   21|    287|	for (item = prefix##_first(head); item;                                \
  |  |  ------------------
  |  |  |  Branch (21:36): [True: 157, False: 130]
  |  |  ------------------
  |  |   22|    157|			item = prefix##_next(head, item))
  ------------------
  971|    157|		if (pim_mtu < bsfrag->size) {
  ------------------
  |  Branch (971:7): [True: 0, False: 157]
  ------------------
  972|      0|			ret = pim_bsm_frag_send(bsfrag->data, bsfrag->size, ifp,
  973|      0|						pim_mtu, dst_addr, no_fwd);
  974|      0|			if (!ret) {
  ------------------
  |  Branch (974:8): [True: 0, False: 0]
  ------------------
  975|      0|				if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|      0|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|      0|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  976|      0|					zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  977|      0|						"%s: pim_bsm_frag_send failed",
  978|      0|						__func__);
  979|      0|			}
  980|    157|		} else {
  981|       |			/* Pim header needs to be constructed */
  982|    157|			pim_msg_build_header(pim_ifp->primary_address, dst_addr,
  983|    157|					     bsfrag->data, bsfrag->size,
  984|    157|					     PIM_MSG_TYPE_BOOTSTRAP, no_fwd);
  985|    157|			ret = pim_bsm_send_intf(bsfrag->data, bsfrag->size, ifp,
  986|    157|						dst_addr);
  987|    157|			if (!ret) {
  ------------------
  |  Branch (987:8): [True: 157, False: 0]
  ------------------
  988|    157|				if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|    157|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|    157|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 157]
  |  |  ------------------
  ------------------
  989|      0|					zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  990|    157|						"%s: pim_bsm_frag_send failed",
  991|    157|						__func__);
  992|    157|			}
  993|    157|		}
  994|    157|	}
  995|    130|	return ret;
  996|    211|}
pim_bsm_get_bsgrp_node:
 1000|   287k|{
 1001|   287k|	struct route_node *rn;
 1002|   287k|	struct bsgrp_node *bsgrp;
 1003|       |
 1004|   287k|	rn = route_node_lookup(scope->bsrp_table, grp);
 1005|   287k|	if (!rn) {
  ------------------
  |  Branch (1005:6): [True: 45.1k, False: 242k]
  ------------------
 1006|  45.1k|		if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|  45.1k|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|  45.1k|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 45.1k]
  |  |  ------------------
  ------------------
 1007|      0|			zlog_debug("%s: Route node doesn't exist for the group",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1008|  45.1k|				   __func__);
 1009|  45.1k|		return NULL;
 1010|  45.1k|	}
 1011|   242k|	bsgrp = rn->info;
 1012|   242k|	route_unlock_node(rn);
 1013|       |
 1014|   242k|	return bsgrp;
 1015|   287k|}
pim_bsm_process:
 1260|  1.10k|{
 1261|  1.10k|	struct bsm_hdr *bshdr;
 1262|  1.10k|	int sz = PIM_GBL_SZ_ID;
  ------------------
  |  |   20|  1.10k|#define PIM_GBL_SZ_ID 0		    /* global scope zone id set to 0 */
  ------------------
 1263|  1.10k|	struct bsmmsg_grpinfo *msg_grp;
 1264|  1.10k|	struct pim_interface *pim_ifp = NULL;
 1265|  1.10k|	struct bsm_frag *bsfrag;
 1266|  1.10k|	struct pim_instance *pim;
 1267|  1.10k|	uint16_t frag_tag;
 1268|  1.10k|	pim_addr bsr_addr;
 1269|  1.10k|	bool empty_bsm = false;
 1270|       |
 1271|       |	/* BSM Packet acceptance validation */
 1272|  1.10k|	pim_ifp = ifp->info;
 1273|  1.10k|	if (!pim_ifp) {
  ------------------
  |  Branch (1273:6): [True: 0, False: 1.10k]
  ------------------
 1274|      0|		if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|      0|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|      0|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1275|      0|			zlog_debug("%s: multicast not enabled on interface %s",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1276|      0|				   __func__, ifp->name);
 1277|      0|		return -1;
 1278|      0|	}
 1279|       |
 1280|  1.10k|	if (pim_ifp->pim_passive_enable) {
  ------------------
  |  Branch (1280:6): [True: 0, False: 1.10k]
  ------------------
 1281|      0|		if (PIM_DEBUG_PIM_PACKETS)
  ------------------
  |  |  140|      0|#define PIM_DEBUG_PIM_PACKETS (router->debugs & PIM_MASK_PIM_PACKETS)
  |  |  ------------------
  |  |  |  |   74|      0|#define PIM_MASK_PIM_PACKETS         (1 << 2)
  |  |  ------------------
  |  |  |  Branch (140:31): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1282|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1283|      0|				"skip receiving PIM message on passive interface %s",
 1284|      0|				ifp->name);
 1285|      0|		return 0;
 1286|      0|	}
 1287|       |
 1288|  1.10k|	pim_ifp->pim_ifstat_bsm_rx++;
 1289|  1.10k|	pim = pim_ifp->pim;
 1290|  1.10k|	pim->bsm_rcvd++;
 1291|       |
 1292|       |	/* Drop if bsm processing is disabled on interface */
 1293|  1.10k|	if (!pim_ifp->bsm_enable) {
  ------------------
  |  Branch (1293:6): [True: 0, False: 1.10k]
  ------------------
 1294|      0|		zlog_warn("%s: BSM not enabled on interface %s", __func__,
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
 1295|      0|			  ifp->name);
 1296|      0|		pim_ifp->pim_ifstat_bsm_cfg_miss++;
 1297|      0|		pim->bsm_dropped++;
 1298|      0|		return -1;
 1299|      0|	}
 1300|       |
 1301|  1.10k|	if (buf_size < (PIM_MSG_HEADER_LEN + sizeof(struct bsm_hdr))) {
  ------------------
  |  |   38|  1.10k|#define PIM_MSG_HEADER_LEN            (4)
  ------------------
  |  Branch (1301:6): [True: 6, False: 1.09k]
  ------------------
 1302|      6|		if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|      6|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|      6|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 6]
  |  |  ------------------
  ------------------
 1303|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1304|      6|				"%s: received buffer length of %d which is too small to properly decode",
 1305|      6|				__func__, buf_size);
 1306|      6|		return -1;
 1307|      6|	}
 1308|       |
 1309|  1.09k|	bshdr = (struct bsm_hdr *)(buf + PIM_MSG_HEADER_LEN);
  ------------------
  |  |   38|  1.09k|#define PIM_MSG_HEADER_LEN            (4)
  ------------------
 1310|  1.09k|	if (bshdr->hm_len > PIM_MAX_BITLEN) {
  ------------------
  |  |   24|  1.09k|#define PIM_MAX_BITLEN	IPV4_MAX_BITLEN
  |  |  ------------------
  |  |  |  |  334|  1.09k|#define IPV4_MAX_BITLEN    32
  |  |  ------------------
  ------------------
  |  Branch (1310:6): [True: 3, False: 1.09k]
  ------------------
 1311|      3|		zlog_warn(
  ------------------
  |  |  131|      3|#define zlog_warn(...) 0
  ------------------
 1312|      3|			"Bad hashmask length for %s; got %hhu, expected value in range 0-32",
 1313|      3|			PIM_AF_NAME, bshdr->hm_len);
 1314|      3|		pim->bsm_dropped++;
 1315|      3|		return -1;
 1316|      3|	}
 1317|  1.09k|	pim->global_scope.hashMasklen = bshdr->hm_len;
 1318|  1.09k|	frag_tag = ntohs(bshdr->frag_tag);
 1319|       |	/* NB: bshdr->bsr_addr.addr is packed/unaligned => memcpy */
 1320|  1.09k|	memcpy(&bsr_addr, &bshdr->bsr_addr.addr, sizeof(bsr_addr));
 1321|       |
 1322|       |	/* Identify empty BSM */
 1323|  1.09k|	if ((buf_size - PIM_BSM_HDR_LEN - PIM_MSG_HEADER_LEN) < PIM_BSM_GRP_LEN)
  ------------------
  |  |   25|  1.09k|#define PIM_BSM_HDR_LEN sizeof(struct bsm_hdr)
  ------------------
              	if ((buf_size - PIM_BSM_HDR_LEN - PIM_MSG_HEADER_LEN) < PIM_BSM_GRP_LEN)
  ------------------
  |  |   38|  1.09k|#define PIM_MSG_HEADER_LEN            (4)
  ------------------
              	if ((buf_size - PIM_BSM_HDR_LEN - PIM_MSG_HEADER_LEN) < PIM_BSM_GRP_LEN)
  ------------------
  |  |   26|  1.09k|#define PIM_BSM_GRP_LEN sizeof(struct bsmmsg_grpinfo)
  ------------------
  |  Branch (1323:6): [True: 64, False: 1.02k]
  ------------------
 1324|     64|		empty_bsm = true;
 1325|       |
 1326|  1.09k|	if (!empty_bsm) {
  ------------------
  |  Branch (1326:6): [True: 1.02k, False: 64]
  ------------------
 1327|  1.02k|		msg_grp = (struct bsmmsg_grpinfo *)(buf + PIM_MSG_HEADER_LEN
  ------------------
  |  |   38|  1.02k|#define PIM_MSG_HEADER_LEN            (4)
  ------------------
 1328|  1.02k|						    + PIM_BSM_HDR_LEN);
  ------------------
  |  |   25|  1.02k|#define PIM_BSM_HDR_LEN sizeof(struct bsm_hdr)
  ------------------
 1329|       |		/* Currently we don't support scope zoned BSM */
 1330|  1.02k|		if (msg_grp->group.sz) {
  ------------------
  |  Branch (1330:7): [True: 2, False: 1.02k]
  ------------------
 1331|      2|			if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|      2|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|      2|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1332|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1333|      2|					"%s : Administratively scoped range BSM received",
 1334|      2|					__func__);
 1335|      2|			pim_ifp->pim_ifstat_bsm_invalid_sz++;
 1336|      2|			pim->bsm_dropped++;
 1337|      2|			return -1;
 1338|      2|		}
 1339|  1.02k|	}
 1340|       |
 1341|       |	/* Drop if bsr is not preferred bsr */
 1342|  1.09k|	if (!is_preferred_bsr(pim, bsr_addr, bshdr->bsr_prio)) {
  ------------------
  |  Branch (1342:6): [True: 15, False: 1.07k]
  ------------------
 1343|     15|		if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|     15|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|     15|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 15]
  |  |  ------------------
  ------------------
 1344|      0|			zlog_debug("%s : Received a non-preferred BSM",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1345|     15|				   __func__);
 1346|     15|		pim->bsm_dropped++;
 1347|     15|		return -1;
 1348|     15|	}
 1349|       |
 1350|  1.07k|	if (no_fwd) {
  ------------------
  |  Branch (1350:6): [True: 15, False: 1.06k]
  ------------------
 1351|       |		/* only accept no-forward BSM if quick refresh on startup */
 1352|     15|		if ((pim->global_scope.accept_nofwd_bsm)
  ------------------
  |  Branch (1352:7): [True: 0, False: 15]
  ------------------
 1353|     15|		    || (frag_tag == pim->global_scope.bsm_frag_tag)) {
  ------------------
  |  Branch (1353:10): [True: 2, False: 13]
  ------------------
 1354|      2|			pim->global_scope.accept_nofwd_bsm = false;
 1355|     13|		} else {
 1356|     13|			if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|     13|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|     13|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 13]
  |  |  ------------------
  ------------------
 1357|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1358|     13|					"%s : nofwd_bsm received on %pPAs when accpt_nofwd_bsm false",
 1359|     13|					__func__, &bsr_addr);
 1360|     13|			pim->bsm_dropped++;
 1361|     13|			pim_ifp->pim_ifstat_ucast_bsm_cfg_miss++;
 1362|     13|			return -1;
 1363|     13|		}
 1364|     15|	}
 1365|       |
 1366|       |	/* BSM packet is seen, so resetting accept_nofwd_bsm to false */
 1367|  1.06k|	if (pim->global_scope.accept_nofwd_bsm)
  ------------------
  |  Branch (1367:6): [True: 1, False: 1.06k]
  ------------------
 1368|      1|		pim->global_scope.accept_nofwd_bsm = false;
 1369|       |
 1370|  1.06k|	if (!pim_addr_cmp(sg->grp, qpim_all_pim_routers_addr)) {
  ------------------
  |  Branch (1370:6): [True: 1, False: 1.06k]
  ------------------
 1371|       |		/* Multicast BSMs are only accepted if source interface & IP
 1372|       |		 * match RPF towards the BSR's IP address, or they have
 1373|       |		 * no-forward set
 1374|       |		 */
 1375|      1|		if (!no_fwd &&
  ------------------
  |  Branch (1375:7): [True: 1, False: 0]
  ------------------
 1376|      1|		    !pim_nht_bsr_rpf_check(pim, bsr_addr, ifp, sg->src)) {
  ------------------
  |  Branch (1376:7): [True: 1, False: 0]
  ------------------
 1377|      1|			if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|      1|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|      1|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 1]
  |  |  ------------------
  ------------------
 1378|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1379|      1|					"BSM check: RPF to BSR %pPAs is not %pPA%%%s",
 1380|      1|					&bsr_addr, &sg->src, ifp->name);
 1381|      1|			pim->bsm_dropped++;
 1382|      1|			return -1;
 1383|      1|		}
 1384|  1.06k|	} else if (if_address_is_local(&sg->grp, PIM_AF, pim->vrf->vrf_id)) {
  ------------------
  |  |   19|  1.06k|#define PIM_AF		AF_INET
  ------------------
  |  Branch (1384:13): [True: 1.03k, False: 31]
  ------------------
 1385|       |		/* Unicast BSM received - if ucast bsm not enabled on
 1386|       |		 * the interface, drop it
 1387|       |		 */
 1388|  1.03k|		if (!pim_ifp->ucast_bsm_accept) {
  ------------------
  |  Branch (1388:7): [True: 0, False: 1.03k]
  ------------------
 1389|      0|			if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|      0|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|      0|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1390|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1391|      0|					"%s : Unicast BSM not enabled on interface %s",
 1392|      0|					__func__, ifp->name);
 1393|      0|			pim_ifp->pim_ifstat_ucast_bsm_cfg_miss++;
 1394|      0|			pim->bsm_dropped++;
 1395|      0|			return -1;
 1396|      0|		}
 1397|       |
 1398|  1.03k|	} else {
 1399|     31|		if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|     31|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|     31|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 31]
  |  |  ------------------
  ------------------
 1400|      0|			zlog_debug("%s : Invalid destination address",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1401|     31|				   __func__);
 1402|     31|		pim->bsm_dropped++;
 1403|     31|		return -1;
 1404|     31|	}
 1405|       |
 1406|  1.03k|	if (empty_bsm) {
  ------------------
  |  Branch (1406:6): [True: 19, False: 1.01k]
  ------------------
 1407|     19|		if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|     19|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|     19|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 19]
  |  |  ------------------
  ------------------
 1408|      0|			zlog_debug("%s : Empty Pref BSM received", __func__);
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1409|     19|	}
 1410|       |	/* Parse Update bsm rp table and install/uninstall rp if required */
 1411|  1.03k|	if (!pim_bsm_parse_install_g2rp(
  ------------------
  |  Branch (1411:6): [True: 436, False: 595]
  ------------------
 1412|  1.03k|		    &pim_ifp->pim->global_scope,
 1413|  1.03k|		    (buf + PIM_BSM_HDR_LEN + PIM_MSG_HEADER_LEN),
  ------------------
  |  |   25|  1.03k|#define PIM_BSM_HDR_LEN sizeof(struct bsm_hdr)
  ------------------
              		    (buf + PIM_BSM_HDR_LEN + PIM_MSG_HEADER_LEN),
  ------------------
  |  |   38|  1.03k|#define PIM_MSG_HEADER_LEN            (4)
  ------------------
 1414|  1.03k|		    (buf_size - PIM_BSM_HDR_LEN - PIM_MSG_HEADER_LEN),
  ------------------
  |  |   25|  1.03k|#define PIM_BSM_HDR_LEN sizeof(struct bsm_hdr)
  ------------------
              		    (buf_size - PIM_BSM_HDR_LEN - PIM_MSG_HEADER_LEN),
  ------------------
  |  |   38|  1.03k|#define PIM_MSG_HEADER_LEN            (4)
  ------------------
 1415|  1.03k|		    frag_tag)) {
 1416|    436|		if (PIM_DEBUG_BSM) {
  ------------------
  |  |  172|    436|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|    436|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 436]
  |  |  ------------------
  ------------------
 1417|      0|			zlog_debug("%s, Parsing BSM failed.", __func__);
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1418|      0|		}
 1419|    436|		pim->bsm_dropped++;
 1420|    436|		return -1;
 1421|    436|	}
 1422|       |	/* Restart the bootstrap timer */
 1423|    595|	pim_bs_timer_restart(&pim_ifp->pim->global_scope,
 1424|    595|			     PIM_BSR_DEFAULT_TIMEOUT);
  ------------------
  |  |   22|    595|#define PIM_BSR_DEFAULT_TIMEOUT 130 /* RFC 5059 - Sec 5 */
  ------------------
 1425|       |
 1426|       |	/* If new BSM received, clear the old bsm database */
 1427|    595|	if (pim_ifp->pim->global_scope.bsm_frag_tag != frag_tag) {
  ------------------
  |  Branch (1427:6): [True: 484, False: 111]
  ------------------
 1428|    484|		if (PIM_DEBUG_BSM) {
  ------------------
  |  |  172|    484|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|    484|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 484]
  |  |  ------------------
  ------------------
 1429|      0|			zlog_debug("%s: Current frag tag: %d Frag teg rcvd: %d",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1430|      0|				   __func__,
 1431|      0|				   pim_ifp->pim->global_scope.bsm_frag_tag,
 1432|      0|				   frag_tag);
 1433|      0|		}
 1434|    484|		pim_bsm_frags_free(&pim_ifp->pim->global_scope);
 1435|    484|		pim_ifp->pim->global_scope.bsm_frag_tag = frag_tag;
 1436|    484|	}
 1437|       |
 1438|       |	/* update the scope information from bsm */
 1439|    595|	pim_bsm_update(pim, bsr_addr, bshdr->bsr_prio);
 1440|       |
 1441|    595|	if (!no_fwd) {
  ------------------
  |  Branch (1441:6): [True: 594, False: 1]
  ------------------
 1442|    594|		pim_bsm_fwd_whole_sz(pim_ifp->pim, buf, buf_size, sz);
 1443|    594|		bsfrag = XCALLOC(MTYPE_PIM_BSM_FRAG,
  ------------------
  |  |  165|    594|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
 1444|    594|				 sizeof(struct bsm_frag) + buf_size);
 1445|       |
 1446|    594|		bsfrag->size = buf_size;
 1447|    594|		memcpy(bsfrag->data, buf, buf_size);
 1448|    594|		bsm_frags_add_tail(pim_ifp->pim->global_scope.bsm_frags,
 1449|    594|				   bsfrag);
 1450|    594|	}
 1451|       |
 1452|    595|	return 0;
 1453|  1.03k|}
pim_bsm.c:pim_bs_timer_start:
  195|    596|{
  196|    596|	if (!scope) {
  ------------------
  |  Branch (196:6): [True: 0, False: 596]
  ------------------
  197|      0|		if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|      0|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|      0|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  198|      0|			zlog_debug("%s : Invalid scope(NULL).", __func__);
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  199|      0|		return;
  200|      0|	}
  201|    596|	EVENT_OFF(scope->bs_timer);
  ------------------
  |  |  164|    596|	do {                                                                   \
  |  |  165|    596|		if ((thread))                                                  \
  |  |  ------------------
  |  |  |  Branch (165:7): [True: 0, False: 596]
  |  |  ------------------
  |  |  166|    596|			event_cancel(&(thread));                               \
  |  |  167|    596|	} while (0)
  |  |  ------------------
  |  |  |  Branch (167:11): [Folded, False: 596]
  |  |  ------------------
  ------------------
  202|    596|	if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|    596|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|    596|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 596]
  |  |  ------------------
  ------------------
  203|      0|		zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  204|    596|			"%s : starting bs timer for scope %d with timeout %d secs",
  205|    596|			__func__, scope->sz_id, bs_timeout);
  206|    596|	event_add_timer(router->master, pim_on_bs_timer, scope, bs_timeout,
  ------------------
  |  |  216|    596|#define event_add_timer(m, f, a, v, t) 0
  ------------------
  207|    596|			&scope->bs_timer);
  208|    596|}
pim_bsm.c:pim_bsm_frags_free:
   94|    484|{
   95|    484|	struct bsm_frag *bsfrag;
   96|       |
   97|  1.06k|	while ((bsfrag = bsm_frags_pop(scope->bsm_frags)))
  ------------------
  |  Branch (97:9): [True: 583, False: 484]
  ------------------
   98|    583|		pim_bsm_frag_free(bsfrag);
   99|    484|}
pim_bsm.c:pim_bsm_frag_free:
   89|    583|{
   90|       |	XFREE(MTYPE_PIM_BSM_FRAG, bsfrag);
  ------------------
  |  |  170|    583|	do {                                                                   \
  |  |  171|    583|		qfree(mtype, ptr);                                             \
  |  |  172|    583|		ptr = NULL;                                                    \
  |  |  173|    583|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 583]
  |  |  ------------------
  ------------------
   91|    583|}
pim_bsm.c:pim_free_bsgrp_data:
   70|  41.2k|{
   71|  41.2k|	pim_bsm_rpinfos_free(bsgrp_node->bsrp_list);
   72|  41.2k|	pim_bsm_rpinfos_free(bsgrp_node->partial_bsrp_list);
   73|       |	XFREE(MTYPE_PIM_BSGRP_NODE, bsgrp_node);
  ------------------
  |  |  170|  41.2k|	do {                                                                   \
  |  |  171|  41.2k|		qfree(mtype, ptr);                                             \
  |  |  172|  41.2k|		ptr = NULL;                                                    \
  |  |  173|  41.2k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 41.2k]
  |  |  ------------------
  ------------------
   74|  41.2k|}
pim_bsm.c:pim_bsm_rpinfos_free:
   62|   157k|{
   63|   157k|	struct bsm_rpinfo *bsrp_info;
   64|       |
   65|   356k|	while ((bsrp_info = bsm_rpinfos_pop(head)))
  ------------------
  |  Branch (65:9): [True: 199k, False: 157k]
  ------------------
   66|   199k|		pim_bsm_rpinfo_free(bsrp_info);
   67|   157k|}
pim_bsm.c:pim_bsm_rpinfo_free:
   56|   233k|{
   57|   233k|	EVENT_OFF(bsrp_info->g2rp_timer);
  ------------------
  |  |  164|   233k|	do {                                                                   \
  |  |  165|   233k|		if ((thread))                                                  \
  |  |  ------------------
  |  |  |  Branch (165:7): [True: 0, False: 233k]
  |  |  ------------------
  |  |  166|   233k|			event_cancel(&(thread));                               \
  |  |  167|   233k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (167:11): [Folded, False: 233k]
  |  |  ------------------
  ------------------
   58|       |	XFREE(MTYPE_PIM_BSRP_INFO, bsrp_info);
  ------------------
  |  |  170|   233k|	do {                                                                   \
  |  |  171|   233k|		qfree(mtype, ptr);                                             \
  |  |  172|   233k|		ptr = NULL;                                                    \
  |  |  173|   233k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 233k]
  |  |  ------------------
  ------------------
   59|   233k|}
pim_bsm.c:pim_free_bsgrp_node:
   77|  41.2k|{
   78|  41.2k|	struct route_node *rn;
   79|       |
   80|  41.2k|	rn = route_node_lookup(rt, grp);
   81|  41.2k|	if (rn) {
  ------------------
  |  Branch (81:6): [True: 41.2k, False: 0]
  ------------------
   82|       |		rn->info = NULL;
   83|  41.2k|		route_unlock_node(rn);
   84|  41.2k|		route_unlock_node(rn);
   85|  41.2k|	}
   86|  41.2k|}
pim_bsm.c:pim_bsm_send_intf:
  662|    751|{
  663|    751|	struct pim_interface *pim_ifp;
  664|       |
  665|    751|	pim_ifp = ifp->info;
  666|       |
  667|    751|	if (!pim_ifp) {
  ------------------
  |  Branch (667:6): [True: 0, False: 751]
  ------------------
  668|      0|		if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|      0|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|      0|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  669|      0|			zlog_debug("%s: Pim interface not available for %s",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  670|      0|				   __func__, ifp->name);
  671|      0|		return false;
  672|      0|	}
  673|       |
  674|    751|	if (pim_ifp->pim_sock_fd == -1) {
  ------------------
  |  Branch (674:6): [True: 751, False: 0]
  ------------------
  675|    751|		if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|    751|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|    751|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 751]
  |  |  ------------------
  ------------------
  676|      0|			zlog_debug("%s: Pim sock not available for %s",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  677|    751|				   __func__, ifp->name);
  678|    751|		return false;
  679|    751|	}
  680|       |
  681|      0|	if (pim_msg_send(pim_ifp->pim_sock_fd, pim_ifp->primary_address,
  ------------------
  |  Branch (681:6): [True: 0, False: 0]
  ------------------
  682|      0|			 dst_addr, buf, len, ifp)) {
  683|      0|		zlog_warn("%s: Could not send BSM message on interface: %s",
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
  684|      0|			  __func__, ifp->name);
  685|      0|		return false;
  686|      0|	}
  687|       |
  688|      0|	if (!pim_ifp->pim_passive_enable)
  ------------------
  |  Branch (688:6): [True: 0, False: 0]
  ------------------
  689|      0|		pim_ifp->pim_ifstat_bsm_tx++;
  690|       |
  691|      0|	pim_ifp->pim->bsm_sent++;
  692|       |	return true;
  693|      0|}
pim_bsm.c:is_preferred_bsr:
  514|  1.09k|{
  515|  1.09k|	if (!pim_addr_cmp(bsr, pim->global_scope.current_bsr))
  ------------------
  |  Branch (515:6): [True: 1.06k, False: 31]
  ------------------
  516|  1.06k|		return true;
  517|       |
  518|     31|	if (bsr_prio > pim->global_scope.current_bsr_prio)
  ------------------
  |  Branch (518:6): [True: 10, False: 21]
  ------------------
  519|     10|		return true;
  520|       |
  521|     21|	else if (bsr_prio == pim->global_scope.current_bsr_prio) {
  ------------------
  |  Branch (521:11): [True: 9, False: 12]
  ------------------
  522|      9|		if (pim_addr_cmp(bsr, pim->global_scope.current_bsr) >= 0)
  ------------------
  |  Branch (522:7): [True: 6, False: 3]
  ------------------
  523|      6|			return true;
  524|      3|		else
  525|      3|			return false;
  526|      9|	} else
  527|     12|		return false;
  528|     31|}
pim_bsm.c:pim_bsm_parse_install_g2rp:
 1121|  1.03k|{
 1122|  1.03k|	struct bsmmsg_grpinfo grpinfo;
 1123|  1.03k|	struct bsmmsg_rpinfo rpinfo;
 1124|  1.03k|	struct prefix group;
 1125|  1.03k|	struct bsgrp_node *bsgrp = NULL;
 1126|  1.03k|	int frag_rp_cnt = 0;
 1127|  1.03k|	int offset = 0;
 1128|  1.03k|	int ins_count = 0;
 1129|  1.03k|	pim_addr grp_addr;
 1130|       |
 1131|   288k|	while (buflen > offset) {
  ------------------
  |  Branch (1131:9): [True: 287k, False: 595]
  ------------------
 1132|   287k|		if (offset + (int)sizeof(struct bsmmsg_grpinfo) > buflen) {
  ------------------
  |  Branch (1132:7): [True: 110, False: 287k]
  ------------------
 1133|    110|			if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|    110|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|    110|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 110]
  |  |  ------------------
  ------------------
 1134|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1135|    110|					"%s: buflen received %d is less than the internal data structure of the packet would suggest",
 1136|    110|					__func__, buflen);
 1137|    110|			return false;
 1138|    110|		}
 1139|       |		/* Extract Group tlv from BSM */
 1140|   287k|		memcpy(&grpinfo, buf, sizeof(struct bsmmsg_grpinfo));
 1141|   287k|		grp_addr = grpinfo.group.addr;
 1142|       |
 1143|   287k|		if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|   287k|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|   287k|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 287k]
  |  |  ------------------
  ------------------
 1144|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1145|   287k|				"%s, Group %pPAs  Rpcount:%d Fragment-Rp-count:%d",
 1146|   287k|				__func__, &grp_addr, grpinfo.rp_count,
 1147|   287k|				grpinfo.frag_rp_count);
 1148|       |
 1149|   287k|		buf += sizeof(struct bsmmsg_grpinfo);
 1150|   287k|		offset += sizeof(struct bsmmsg_grpinfo);
 1151|       |
 1152|   287k|		group.family = PIM_AF;
  ------------------
  |  |   19|   287k|#define PIM_AF		AF_INET
  ------------------
 1153|   287k|		if (grpinfo.group.mask > PIM_MAX_BITLEN) {
  ------------------
  |  |   24|   287k|#define PIM_MAX_BITLEN	IPV4_MAX_BITLEN
  |  |  ------------------
  |  |  |  |  334|   287k|#define IPV4_MAX_BITLEN    32
  |  |  ------------------
  ------------------
  |  Branch (1153:7): [True: 151, False: 287k]
  ------------------
 1154|    151|			if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|    151|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|    151|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 151]
  |  |  ------------------
  ------------------
 1155|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1156|    151|					"%s, prefix length specified: %d is too long",
 1157|    151|					__func__, grpinfo.group.mask);
 1158|    151|			return false;
 1159|    151|		}
 1160|       |
 1161|   287k|		pim_addr_to_prefix(&group, grp_addr);
 1162|   287k|		group.prefixlen = grpinfo.group.mask;
 1163|       |
 1164|       |		/* Get the Group node for the BSM rp table */
 1165|   287k|		bsgrp = pim_bsm_get_bsgrp_node(scope, &group);
 1166|       |
 1167|   287k|		if (grpinfo.rp_count == 0) {
  ------------------
  |  Branch (1167:7): [True: 10.8k, False: 276k]
  ------------------
 1168|  10.8k|			struct bsm_rpinfo *old_rpinfo;
 1169|       |
 1170|       |			/* BSR explicitly no longer has RPs for this group */
 1171|  10.8k|			if (!bsgrp)
  ------------------
  |  Branch (1171:8): [True: 3.47k, False: 7.35k]
  ------------------
 1172|  3.47k|				continue;
 1173|       |
 1174|  7.35k|			if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|  7.35k|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|  7.35k|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 7.35k]
  |  |  ------------------
  ------------------
 1175|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1176|  7.35k|					"%s, Rp count is zero for group: %pPAs",
 1177|  7.35k|					__func__, &grp_addr);
 1178|       |
 1179|  7.35k|			old_rpinfo = bsm_rpinfos_first(bsgrp->bsrp_list);
 1180|  7.35k|			if (old_rpinfo)
  ------------------
  |  Branch (1180:8): [True: 4.41k, False: 2.94k]
  ------------------
 1181|  4.41k|				pim_rp_del(scope->pim, old_rpinfo->rp_address,
 1182|  4.41k|					   group, NULL, RP_SRC_BSR);
 1183|       |
 1184|  7.35k|			pim_free_bsgrp_node(scope->bsrp_table, &bsgrp->group);
 1185|  7.35k|			pim_free_bsgrp_data(bsgrp);
 1186|  7.35k|			continue;
 1187|  10.8k|		}
 1188|       |
 1189|   276k|		if (!bsgrp) {
  ------------------
  |  Branch (1189:7): [True: 41.6k, False: 234k]
  ------------------
 1190|  41.6k|			if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|  41.6k|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|  41.6k|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 41.6k]
  |  |  ------------------
  ------------------
 1191|      0|				zlog_debug("%s, Create new  BSM Group node.",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1192|  41.6k|					   __func__);
 1193|       |
 1194|       |			/* create a new node to be added to the tree. */
 1195|  41.6k|			bsgrp = pim_bsm_new_bsgrp_node(scope->bsrp_table,
 1196|  41.6k|						       &group);
 1197|       |
 1198|  41.6k|			if (!bsgrp) {
  ------------------
  |  Branch (1198:8): [True: 0, False: 41.6k]
  ------------------
 1199|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1200|      0|					"%s, Failed to get the BSM group node.",
 1201|      0|					__func__);
 1202|      0|				continue;
 1203|      0|			}
 1204|       |
 1205|  41.6k|			bsgrp->scope = scope;
 1206|  41.6k|		}
 1207|       |
 1208|   276k|		pim_update_pending_rp_cnt(scope, bsgrp, bsm_frag_tag,
 1209|   276k|					  grpinfo.rp_count);
 1210|   276k|		frag_rp_cnt = grpinfo.frag_rp_count;
 1211|   276k|		ins_count = 0;
 1212|       |
 1213|   805k|		while (frag_rp_cnt--) {
  ------------------
  |  Branch (1213:10): [True: 529k, False: 276k]
  ------------------
 1214|   529k|			if (offset + (int)sizeof(struct bsmmsg_rpinfo)
  ------------------
  |  Branch (1214:8): [True: 175, False: 528k]
  ------------------
 1215|   529k|			    > buflen) {
 1216|    175|				if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|    175|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|    175|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 175]
  |  |  ------------------
  ------------------
 1217|      0|					zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1218|    175|						"%s, buflen received: %u is less than the internal data structure of the packet would suggest",
 1219|    175|						__func__, buflen);
 1220|    175|				return false;
 1221|    175|			}
 1222|       |
 1223|       |			/* Extract RP address tlv from BSM */
 1224|   528k|			memcpy(&rpinfo, buf, sizeof(struct bsmmsg_rpinfo));
 1225|   528k|			rpinfo.rp_holdtime = ntohs(rpinfo.rp_holdtime);
 1226|   528k|			buf += sizeof(struct bsmmsg_rpinfo);
 1227|   528k|			offset += sizeof(struct bsmmsg_rpinfo);
 1228|       |
 1229|   528k|			if (PIM_DEBUG_BSM) {
  ------------------
  |  |  172|   528k|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|   528k|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 528k]
  |  |  ------------------
  ------------------
 1230|      0|				pim_addr rp_addr;
 1231|       |
 1232|      0|				rp_addr = rpinfo.rpaddr.addr;
 1233|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1234|      0|					"%s, Rp address - %pPAs; pri:%d hold:%d",
 1235|      0|					__func__, &rp_addr, rpinfo.rp_pri,
 1236|      0|					rpinfo.rp_holdtime);
 1237|      0|			}
 1238|       |
 1239|       |			/* Call Install api to update grp-rp mappings */
 1240|   528k|			if (pim_install_bsm_grp_rp(scope->pim, bsgrp, &rpinfo))
  ------------------
  |  Branch (1240:8): [True: 237k, False: 291k]
  ------------------
 1241|   237k|				ins_count++;
 1242|   528k|		}
 1243|       |
 1244|   276k|		bsgrp->pend_rp_cnt -= ins_count;
 1245|       |
 1246|   276k|		if (!bsgrp->pend_rp_cnt) {
  ------------------
  |  Branch (1246:7): [True: 108k, False: 167k]
  ------------------
 1247|   108k|			if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|   108k|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|   108k|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 108k]
  |  |  ------------------
  ------------------
 1248|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1249|   108k|					"%s, Recvd all the rps for this group, so bsrp list with penidng rp list.",
 1250|   108k|					__func__);
 1251|       |			/* replace the bsrp_list with pending list */
 1252|   108k|			pim_instate_pend_list(bsgrp);
 1253|   108k|		}
 1254|   276k|	}
 1255|    595|	return true;
 1256|  1.03k|}
pim_bsm.c:pim_bsm_new_bsgrp_node:
  124|  41.6k|{
  125|  41.6k|	struct route_node *rn;
  126|  41.6k|	struct bsgrp_node *bsgrp;
  127|       |
  128|  41.6k|	rn = route_node_get(rt, grp);
  129|  41.6k|	if (!rn) {
  ------------------
  |  Branch (129:6): [True: 0, False: 41.6k]
  ------------------
  130|      0|		zlog_warn("%s: route node creation failed", __func__);
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
  131|      0|		return NULL;
  132|      0|	}
  133|  41.6k|	bsgrp = XCALLOC(MTYPE_PIM_BSGRP_NODE, sizeof(struct bsgrp_node));
  ------------------
  |  |  165|  41.6k|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  134|       |
  135|  41.6k|	rn->info = bsgrp;
  136|  41.6k|	bsm_rpinfos_init(bsgrp->bsrp_list);
  137|  41.6k|	bsm_rpinfos_init(bsgrp->partial_bsrp_list);
  138|       |
  139|  41.6k|	prefix_copy(&bsgrp->group, grp);
  140|  41.6k|	return bsgrp;
  141|  41.6k|}
pim_bsm.c:pim_update_pending_rp_cnt:
 1099|   276k|{
 1100|   276k|	if (bsgrp->pend_rp_cnt) {
  ------------------
  |  Branch (1100:6): [True: 163k, False: 112k]
  ------------------
 1101|       |		/* received bsm is different packet ,
 1102|       |		 * it is not same fragment.
 1103|       |		 */
 1104|   163k|		if (bsm_frag_tag != bsgrp->frag_tag) {
  ------------------
  |  Branch (1104:7): [True: 347, False: 163k]
  ------------------
 1105|    347|			if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|    347|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|    347|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 347]
  |  |  ------------------
  ------------------
 1106|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1107|    347|					"%s,Received a new BSM ,so clear the pending bs_rpinfo list.",
 1108|    347|					__func__);
 1109|    347|			pim_bsm_rpinfos_free(bsgrp->partial_bsrp_list);
 1110|    347|			bsgrp->pend_rp_cnt = total_rp_count;
 1111|    347|		}
 1112|   163k|	} else
 1113|   112k|		bsgrp->pend_rp_cnt = total_rp_count;
 1114|       |
 1115|   276k|	bsgrp->frag_tag = bsm_frag_tag;
 1116|   276k|}
pim_bsm.c:pim_install_bsm_grp_rp:
 1062|   528k|{
 1063|   528k|	struct bsm_rpinfo *bsm_rpinfo;
 1064|   528k|	uint8_t hashMask_len = pim->global_scope.hashMasklen;
 1065|       |
 1066|       |	/*memory allocation for bsm_rpinfo */
 1067|   528k|	bsm_rpinfo = XCALLOC(MTYPE_PIM_BSRP_INFO, sizeof(*bsm_rpinfo));
  ------------------
  |  |  165|   528k|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
 1068|       |
 1069|   528k|	bsm_rpinfo->rp_prio = rp->rp_pri;
 1070|   528k|	bsm_rpinfo->rp_holdtime = rp->rp_holdtime;
 1071|   528k|	bsm_rpinfo->rp_address = rp->rpaddr.addr;
 1072|   528k|	bsm_rpinfo->elapse_time = 0;
 1073|       |
 1074|       |	/* Back pointer to the group node. */
 1075|   528k|	bsm_rpinfo->bsgrp_node = grpnode;
 1076|       |
 1077|       |	/* update hash for this rp node */
 1078|   528k|	bsm_rpinfo->hash = hash_calc_on_grp_rp(grpnode->group, rp->rpaddr.addr,
 1079|   528k|					       hashMask_len);
 1080|   528k|	if (bsm_rpinfos_add(grpnode->partial_bsrp_list, bsm_rpinfo) == NULL) {
  ------------------
  |  Branch (1080:6): [True: 237k, False: 291k]
  ------------------
 1081|   237k|		if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|   237k|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|   237k|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 237k]
  |  |  ------------------
  ------------------
 1082|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1083|   237k|				"%s, bs_rpinfo node added to the partial bs_rplist.",
 1084|   237k|				__func__);
 1085|   237k|		return true;
 1086|   237k|	}
 1087|       |
 1088|   291k|	if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|   291k|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|   291k|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 291k]
  |  |  ------------------
  ------------------
 1089|      0|		zlog_debug("%s: list node not added", __func__);
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1090|       |
 1091|   291k|	XFREE(MTYPE_PIM_BSRP_INFO, bsm_rpinfo);
  ------------------
  |  |  170|   291k|	do {                                                                   \
  |  |  171|   291k|		qfree(mtype, ptr);                                             \
  |  |  172|   291k|		ptr = NULL;                                                    \
  |  |  173|   291k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 291k]
  |  |  ------------------
  ------------------
 1092|       |	return false;
 1093|   528k|}
pim_bsm.c:hash_calc_on_grp_rp:
 1019|   528k|{
 1020|   528k|	uint64_t temp;
  ------------------
  |  |  392|   528k|#define uint64_t _uint64_t
  ------------------
 1021|   528k|	uint32_t hash;
 1022|   528k|	uint32_t grpaddr;
 1023|   528k|	uint32_t rp_add;
 1024|   528k|	uint32_t mask = 0xffffffff;
 1025|       |
 1026|       |	/* mask to be made zero if hashmasklen is 0 because mask << 32
 1027|       |	 * may not give 0. hashmasklen can be 0 to 32.
 1028|       |	 */
 1029|   528k|	if (hashmasklen == 0)
  ------------------
  |  Branch (1029:6): [True: 499k, False: 29.7k]
  ------------------
 1030|   499k|		mask = 0;
 1031|       |
 1032|       |	/* in_addr stores ip in big endian, hence network byte order
 1033|       |	 * convert to uint32 before processing hash
 1034|       |	 */
 1035|   528k|#if PIM_IPV == 4
 1036|   528k|	grpaddr = ntohl(group.u.prefix4.s_addr);
 1037|       |#else
 1038|       |	grpaddr = group.u.prefix6.s6_addr32[0] ^ group.u.prefix6.s6_addr32[1] ^
 1039|       |		  group.u.prefix6.s6_addr32[2] ^ group.u.prefix6.s6_addr32[3];
 1040|       |#endif
 1041|       |	/* Avoid shifting by 32 bit on a 32 bit register */
 1042|   528k|	if (hashmasklen)
  ------------------
  |  Branch (1042:6): [True: 29.7k, False: 499k]
  ------------------
 1043|  29.7k|		grpaddr = grpaddr & ((mask << (32 - hashmasklen)));
 1044|   499k|	else
 1045|   499k|		grpaddr = grpaddr & mask;
 1046|       |
 1047|   528k|#if PIM_IPV == 4
 1048|   528k|	rp_add = ntohl(rp.s_addr);
 1049|       |#else
 1050|       |	rp_add = rp.s6_addr32[0] ^ rp.s6_addr32[1] ^ rp.s6_addr32[2] ^
 1051|       |		 rp.s6_addr32[3];
 1052|       |#endif
 1053|   528k|	temp = 1103515245 * ((1103515245 * (uint64_t)grpaddr + 12345) ^ rp_add)
 1054|   528k|	       + 12345;
 1055|   528k|	hash = temp & (0x7fffffff);
 1056|   528k|	return hash;
 1057|   528k|}
pim_bsm.c:pim_instate_pend_list:
  376|   108k|{
  377|   108k|	struct bsm_rpinfo *active;
  378|   108k|	struct bsm_rpinfo *pend;
  379|   108k|	struct rp_info *rp_info;
  380|   108k|	struct route_node *rn;
  381|   108k|	struct pim_instance *pim;
  382|   108k|	struct rp_info *rp_all;
  383|   108k|	struct prefix group_all;
  384|   108k|	bool had_rp_node = true;
  385|       |
  386|   108k|	pim = bsgrp_node->scope->pim;
  387|   108k|	active = bsm_rpinfos_first(bsgrp_node->bsrp_list);
  388|       |
  389|       |	/* Remove nodes with hold time 0 & check if list still has a head */
  390|   111k|	frr_each_safe (bsm_rpinfos, bsgrp_node->partial_bsrp_list, pend) {
  ------------------
  |  |   27|   108k|	for (typeof(prefix##_next_safe(head, NULL)) prefix##_safe =            \
  |  |   28|   108k|			prefix##_next_safe(head,                               \
  |  |   29|   108k|				(item = prefix##_first(head)));                \
  |  |   30|   220k|		item;                                                          \
  |  |  ------------------
  |  |  |  Branch (30:3): [True: 111k, False: 108k]
  |  |  ------------------
  |  |   31|   111k|		item = prefix##_safe,                                          \
  |  |   32|   111k|			prefix##_safe = prefix##_next_safe(head, prefix##_safe))
  ------------------
  391|   111k|		if (is_hold_time_zero(pend)) {
  ------------------
  |  Branch (391:7): [True: 34.6k, False: 77.0k]
  ------------------
  392|  34.6k|			bsm_rpinfos_del(bsgrp_node->partial_bsrp_list, pend);
  393|  34.6k|			pim_bsm_rpinfo_free(pend);
  394|  34.6k|		}
  395|   111k|	}
  396|       |
  397|   108k|	pend = bsm_rpinfos_first(bsgrp_node->partial_bsrp_list);
  398|       |
  399|   108k|	if (!pim_get_all_mcast_group(&group_all))
  ------------------
  |  Branch (399:6): [True: 0, False: 108k]
  ------------------
  400|      0|		return;
  401|       |
  402|   108k|	rp_all = pim_rp_find_match_group(pim, &group_all);
  403|   108k|	rn = route_node_lookup(pim->rp_table, &bsgrp_node->group);
  404|       |
  405|   108k|	if (pend)
  ------------------
  |  Branch (405:6): [True: 74.9k, False: 33.8k]
  ------------------
  406|  74.9k|		pim_g2rp_timer_start(pend, pend->rp_holdtime);
  407|       |
  408|       |	/* if rp node doesn't exist or exist but not configured(rp_all),
  409|       |	 * install the rp from head(if exists) of partial list. List is
  410|       |	 * is sorted such that head is the elected RP for the group.
  411|       |	 */
  412|   108k|	if (!rn || (prefix_same(&rp_all->group, &bsgrp_node->group) &&
  ------------------
  |  Branch (412:6): [True: 20.9k, False: 87.9k]
  |  Branch (412:14): [True: 45.0k, False: 42.8k]
  ------------------
  413|  45.0k|		    pim_rpf_addr_is_inaddr_any(&rp_all->rp))) {
  ------------------
  |  Branch (413:7): [True: 23.8k, False: 21.1k]
  ------------------
  414|  44.7k|		if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|  44.7k|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|  44.7k|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 44.7k]
  |  |  ------------------
  ------------------
  415|      0|			zlog_debug("%s: Route node doesn't exist", __func__);
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  416|  44.7k|		if (pend)
  ------------------
  |  Branch (416:7): [True: 29.2k, False: 15.5k]
  ------------------
  417|  29.2k|			pim_rp_new(pim, pend->rp_address, bsgrp_node->group,
  418|  29.2k|				   NULL, RP_SRC_BSR);
  419|  44.7k|		had_rp_node = false;
  420|  64.0k|	} else {
  421|  64.0k|		rp_info = (struct rp_info *)rn->info;
  422|  64.0k|		if (!rp_info) {
  ------------------
  |  Branch (422:7): [True: 0, False: 64.0k]
  ------------------
  423|      0|			route_unlock_node(rn);
  424|      0|			if (pend)
  ------------------
  |  Branch (424:8): [True: 0, False: 0]
  ------------------
  425|      0|				pim_rp_new(pim, pend->rp_address,
  426|      0|					   bsgrp_node->group, NULL, RP_SRC_BSR);
  427|      0|			had_rp_node = false;
  428|      0|		}
  429|  64.0k|	}
  430|       |
  431|       |	/* We didn't have rp node and pending list is empty(unlikely), cleanup*/
  432|   108k|	if ((!had_rp_node) && (!pend)) {
  ------------------
  |  Branch (432:6): [True: 44.7k, False: 64.0k]
  |  Branch (432:24): [True: 15.5k, False: 29.2k]
  ------------------
  433|  15.5k|		pim_free_bsgrp_node(bsgrp_node->scope->bsrp_table,
  434|  15.5k|				    &bsgrp_node->group);
  435|  15.5k|		pim_free_bsgrp_data(bsgrp_node);
  436|  15.5k|		return;
  437|  15.5k|	}
  438|       |
  439|  93.2k|	if ((had_rp_node) && (rp_info->rp_src != RP_SRC_STATIC)) {
  ------------------
  |  Branch (439:6): [True: 64.0k, False: 29.2k]
  |  Branch (439:23): [True: 64.0k, False: 0]
  ------------------
  440|       |		/* This means we searched and got rp node, needs unlock */
  441|  64.0k|		route_unlock_node(rn);
  442|       |
  443|  64.0k|		if (active && pend) {
  ------------------
  |  Branch (443:7): [True: 54.3k, False: 9.66k]
  |  Branch (443:17): [True: 38.1k, False: 16.2k]
  ------------------
  444|  38.1k|			if (pim_addr_cmp(active->rp_address, pend->rp_address))
  ------------------
  |  Branch (444:8): [True: 26.1k, False: 12.0k]
  ------------------
  445|  26.1k|				pim_rp_change(pim, pend->rp_address,
  446|  26.1k|					      bsgrp_node->group, RP_SRC_BSR);
  447|  38.1k|		}
  448|       |
  449|       |		/* Possible when the first BSM has group with 0 rp count */
  450|  64.0k|		if ((!active) && (!pend)) {
  ------------------
  |  Branch (450:7): [True: 9.66k, False: 54.3k]
  |  Branch (450:20): [True: 2.10k, False: 7.56k]
  ------------------
  451|  2.10k|			if (PIM_DEBUG_BSM) {
  ------------------
  |  |  172|  2.10k|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|  2.10k|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 2.10k]
  |  |  ------------------
  ------------------
  452|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  453|      0|					"%s: Both bsrp and partial list are empty",
  454|      0|					__func__);
  455|      0|			}
  456|  2.10k|			pim_free_bsgrp_node(bsgrp_node->scope->bsrp_table,
  457|  2.10k|					    &bsgrp_node->group);
  458|  2.10k|			pim_free_bsgrp_data(bsgrp_node);
  459|  2.10k|			return;
  460|  2.10k|		}
  461|       |
  462|       |		/* Possible when a group with 0 rp count received in BSM */
  463|  61.9k|		if ((active) && (!pend)) {
  ------------------
  |  Branch (463:7): [True: 54.3k, False: 7.56k]
  |  Branch (463:19): [True: 16.2k, False: 38.1k]
  ------------------
  464|  16.2k|			pim_rp_del(pim, active->rp_address, bsgrp_node->group,
  465|  16.2k|				   NULL, RP_SRC_BSR);
  466|  16.2k|			pim_free_bsgrp_node(bsgrp_node->scope->bsrp_table,
  467|  16.2k|					    &bsgrp_node->group);
  468|  16.2k|			if (PIM_DEBUG_BSM) {
  ------------------
  |  |  172|  16.2k|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|  16.2k|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 16.2k]
  |  |  ------------------
  ------------------
  469|      0|				zlog_debug("%s:Pend List is null,del grp node",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  470|      0|					   __func__);
  471|      0|			}
  472|  16.2k|			pim_free_bsgrp_data(bsgrp_node);
  473|  16.2k|			return;
  474|  16.2k|		}
  475|  61.9k|	}
  476|       |
  477|  74.9k|	if ((had_rp_node) && (rp_info->rp_src == RP_SRC_STATIC)) {
  ------------------
  |  Branch (477:6): [True: 45.7k, False: 29.2k]
  |  Branch (477:23): [True: 0, False: 45.7k]
  ------------------
  478|       |		/* We need to unlock rn this case */
  479|      0|		route_unlock_node(rn);
  480|       |		/* there is a chance that static rp exist and bsrp cleaned
  481|       |		 * so clean bsgrp node if pending list empty
  482|       |		 */
  483|      0|		if (!pend) {
  ------------------
  |  Branch (483:7): [True: 0, False: 0]
  ------------------
  484|      0|			if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|      0|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|      0|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  485|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  486|      0|					"%s: Partial list is empty, static rp exists",
  487|      0|					__func__);
  488|      0|			pim_free_bsgrp_node(bsgrp_node->scope->bsrp_table,
  489|      0|					    &bsgrp_node->group);
  490|      0|			pim_free_bsgrp_data(bsgrp_node);
  491|      0|			return;
  492|      0|		}
  493|      0|	}
  494|       |
  495|       |	/* swap the list & delete all nodes in partial list (old bsrp_list)
  496|       |	 * before swap
  497|       |	 *    active is head of bsrp list
  498|       |	 *    pend is head of partial list
  499|       |	 * After swap
  500|       |	 *    active is head of partial list
  501|       |	 *    pend is head of bsrp list
  502|       |	 * So check appriate head after swap and clean the new partial list
  503|       |	 */
  504|  74.9k|	bsm_rpinfos_swap_all(bsgrp_node->bsrp_list,
  505|  74.9k|			     bsgrp_node->partial_bsrp_list);
  506|       |
  507|  74.9k|	if (active)
  ------------------
  |  Branch (507:6): [True: 50.4k, False: 24.5k]
  ------------------
  508|  50.4k|		pim_g2rp_timer_stop(active);
  509|  74.9k|	pim_bsm_rpinfos_free(bsgrp_node->partial_bsrp_list);
  510|  74.9k|}
pim_bsm.c:is_hold_time_zero:
  364|   111k|{
  365|   111k|	struct bsm_rpinfo *bsrp;
  366|       |
  367|   111k|	bsrp = data;
  368|       |
  369|   111k|	if (bsrp->rp_holdtime)
  ------------------
  |  Branch (369:6): [True: 77.0k, False: 34.6k]
  ------------------
  370|  77.0k|		return false;
  371|  34.6k|	else
  372|  34.6k|		return true;
  373|   111k|}
pim_bsm.c:pim_g2rp_timer_start:
  327|  74.9k|{
  328|  74.9k|	if (!bsrp) {
  ------------------
  |  Branch (328:6): [True: 0, False: 74.9k]
  ------------------
  329|      0|		if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|      0|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|      0|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  330|      0|			zlog_debug("%s : Invalid brsp(NULL).", __func__);
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  331|      0|		return;
  332|      0|	}
  333|  74.9k|	EVENT_OFF(bsrp->g2rp_timer);
  ------------------
  |  |  164|  74.9k|	do {                                                                   \
  |  |  165|  74.9k|		if ((thread))                                                  \
  |  |  ------------------
  |  |  |  Branch (165:7): [True: 0, False: 74.9k]
  |  |  ------------------
  |  |  166|  74.9k|			event_cancel(&(thread));                               \
  |  |  167|  74.9k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (167:11): [Folded, False: 74.9k]
  |  |  ------------------
  ------------------
  334|  74.9k|	if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|  74.9k|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|  74.9k|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 74.9k]
  |  |  ------------------
  ------------------
  335|      0|		zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  336|  74.9k|			"%s : starting g2rp timer for grp: %pFX - rp: %pPAs with timeout  %d secs(Actual Hold time : %d secs)",
  337|  74.9k|			__func__, &bsrp->bsgrp_node->group, &bsrp->rp_address,
  338|  74.9k|			hold_time, bsrp->rp_holdtime);
  339|       |
  340|  74.9k|	event_add_timer(router->master, pim_on_g2rp_timer, bsrp, hold_time,
  ------------------
  |  |  216|  74.9k|#define event_add_timer(m, f, a, v, t) 0
  ------------------
  341|  74.9k|			&bsrp->g2rp_timer);
  342|  74.9k|}
pim_bsm.c:pim_g2rp_timer_stop:
  351|  50.4k|{
  352|  50.4k|	if (!bsrp)
  ------------------
  |  Branch (352:6): [True: 0, False: 50.4k]
  ------------------
  353|      0|		return;
  354|       |
  355|  50.4k|	if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|  50.4k|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|  50.4k|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 50.4k]
  |  |  ------------------
  ------------------
  356|      0|		zlog_debug("%s : stopping g2rp timer for grp: %pFX - rp: %pPAs",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  357|  50.4k|			   __func__, &bsrp->bsgrp_node->group,
  358|  50.4k|			   &bsrp->rp_address);
  359|       |
  360|  50.4k|	EVENT_OFF(bsrp->g2rp_timer);
  ------------------
  |  |  164|  50.4k|	do {                                                                   \
  |  |  165|  50.4k|		if ((thread))                                                  \
  |  |  ------------------
  |  |  |  Branch (165:7): [True: 0, False: 50.4k]
  |  |  ------------------
  |  |  166|  50.4k|			event_cancel(&(thread));                               \
  |  |  167|  50.4k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (167:11): [Folded, False: 50.4k]
  |  |  ------------------
  ------------------
  361|  50.4k|}
pim_bsm.c:pim_bs_timer_restart:
  211|    595|{
  212|    595|	pim_bs_timer_start(scope, bs_timeout);
  213|    595|}
pim_bsm.c:pim_bsm_update:
  532|    595|{
  533|    595|	if (pim_addr_cmp(bsr, pim->global_scope.current_bsr)) {
  ------------------
  |  Branch (533:6): [True: 4, False: 591]
  ------------------
  534|      4|		pim_nht_bsr_del(pim, pim->global_scope.current_bsr);
  535|      4|		pim_nht_bsr_add(pim, bsr);
  536|       |
  537|      4|		pim->global_scope.current_bsr = bsr;
  538|      4|		pim->global_scope.current_bsr_first_ts =
  539|      4|			pim_time_monotonic_sec();
  540|      4|		pim->global_scope.state = ACCEPT_PREFERRED;
  541|      4|	}
  542|    595|	pim->global_scope.current_bsr_prio = bsr_prio;
  543|    595|	pim->global_scope.current_bsr_last_ts = pim_time_monotonic_sec();
  544|    595|}
pim_bsm.c:pim_bsm_fwd_whole_sz:
  867|    594|{
  868|    594|	struct interface *ifp;
  869|    594|	struct pim_interface *pim_ifp;
  870|    594|	pim_addr dst_addr;
  871|    594|	uint32_t pim_mtu;
  872|    594|	bool no_fwd = false;
  873|    594|	bool ret = false;
  874|       |
  875|       |	/* For now only global scope zone is supported, so send on all
  876|       |	 * pim interfaces in the vrf
  877|       |	 */
  878|    594|	dst_addr = qpim_all_pim_routers_addr;
  879|  1.18k|	FOR_ALL_INTERFACES (pim->vrf, ifp) {
  ------------------
  |  |  372|    594|	if (vrf)                                                               \
  |  |  ------------------
  |  |  |  Branch (372:6): [True: 594, False: 0]
  |  |  ------------------
  |  |  373|    594|		RB_FOREACH (ifp, if_name_head, &vrf->ifaces_by_name)
  |  |  ------------------
  |  |  |  |  529|  1.78k|	for ((_e) = RB_MIN(_name, (_head)); (_e) != NULL;                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  515|    594|#define RB_MIN(_name, _head)		_name##_RB_MIN(_head)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (529:38): [True: 1.18k, False: 594]
  |  |  |  |  ------------------
  |  |  |  |  530|  1.18k|	     (_e) = RB_NEXT(_name, (_e)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  517|  1.18k|#define RB_NEXT(_name, _elm)		_name##_RB_NEXT(_elm)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  880|  1.18k|		pim_ifp = ifp->info;
  881|  1.18k|		if ((!pim_ifp) || (!pim_ifp->bsm_enable))
  ------------------
  |  Branch (881:7): [True: 0, False: 1.18k]
  |  Branch (881:21): [True: 0, False: 1.18k]
  ------------------
  882|      0|			continue;
  883|       |
  884|       |		/*
  885|       |		 * RFC 5059 Sec 3.4:
  886|       |		 * When a Bootstrap message is forwarded, it is forwarded out
  887|       |		 * of every multicast-capable interface that has PIM neighbors.
  888|       |		 *
  889|       |		 * So skipping pim interfaces with no neighbors.
  890|       |		 */
  891|  1.18k|		if (listcount(pim_ifp->pim_neighbor_list) == 0)
  ------------------
  |  |   55|  1.18k|#define listcount(X) ((X)->count)
  ------------------
  |  Branch (891:7): [True: 594, False: 594]
  ------------------
  892|    594|			continue;
  893|       |
  894|    594|		pim_hello_require(ifp);
  895|    594|		pim_mtu = ifp->mtu - MAX_IP_HDR_LEN;
  ------------------
  |  |   40|    594|#define MAX_IP_HDR_LEN 24
  ------------------
  896|    594|		if (pim_mtu < len) {
  ------------------
  |  Branch (896:7): [True: 0, False: 594]
  ------------------
  897|      0|			ret = pim_bsm_frag_send(buf, len, ifp, pim_mtu,
  898|      0|						dst_addr, no_fwd);
  899|      0|			if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|      0|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|      0|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  900|      0|				zlog_debug("%s: pim_bsm_frag_send returned %s",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  901|      0|					   __func__, ret ? "TRUE" : "FALSE");
  902|    594|		} else {
  903|    594|			pim_msg_build_header(pim_ifp->primary_address, dst_addr,
  904|    594|					     buf, len, PIM_MSG_TYPE_BOOTSTRAP,
  905|    594|					     no_fwd);
  906|    594|			if (!pim_bsm_send_intf(buf, len, ifp, dst_addr)) {
  ------------------
  |  Branch (906:8): [True: 594, False: 0]
  ------------------
  907|    594|				if (PIM_DEBUG_BSM)
  ------------------
  |  |  172|    594|#define PIM_DEBUG_BSM	(router->debugs & PIM_MASK_BSM_PROC)
  |  |  ------------------
  |  |  |  |   99|    594|#define PIM_MASK_BSM_PROC            (1 << 27)
  |  |  ------------------
  |  |  |  Branch (172:23): [True: 0, False: 594]
  |  |  ------------------
  ------------------
  908|      0|					zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  909|    594|						"%s: pim_bsm_send_intf returned false",
  910|    594|						__func__);
  911|    594|			}
  912|    594|		}
  913|    594|	}
  914|    594|}

pim_cmd_init:
 6417|      1|{
 6418|      1|	if_cmd_init(pim_interface_config_write);
 6419|       |
 6420|      1|	install_node(&debug_node);
 6421|       |
 6422|      1|	install_element(ENABLE_NODE, &pim_test_sg_keepalive_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6423|       |
 6424|      1|	install_element(CONFIG_NODE, &ip_pim_rp_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6425|      1|	install_element(VRF_NODE, &ip_pim_rp_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6426|      1|	install_element(CONFIG_NODE, &no_ip_pim_rp_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6427|      1|	install_element(VRF_NODE, &no_ip_pim_rp_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6428|      1|	install_element(CONFIG_NODE, &ip_pim_rp_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]
  |  |  ------------------
  ------------------
 6429|      1|	install_element(VRF_NODE, &ip_pim_rp_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]
  |  |  ------------------
  ------------------
 6430|      1|	install_element(CONFIG_NODE, &no_ip_pim_rp_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]
  |  |  ------------------
  ------------------
 6431|      1|	install_element(VRF_NODE, &no_ip_pim_rp_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]
  |  |  ------------------
  ------------------
 6432|      1|	install_element(CONFIG_NODE, &no_ip_pim_ssm_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]
  |  |  ------------------
  ------------------
 6433|      1|	install_element(VRF_NODE, &no_ip_pim_ssm_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]
  |  |  ------------------
  ------------------
 6434|      1|	install_element(CONFIG_NODE, &no_ip_pim_ssm_prefix_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]
  |  |  ------------------
  ------------------
 6435|      1|	install_element(VRF_NODE, &no_ip_pim_ssm_prefix_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]
  |  |  ------------------
  ------------------
 6436|      1|	install_element(CONFIG_NODE, &ip_pim_ssm_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]
  |  |  ------------------
  ------------------
 6437|      1|	install_element(VRF_NODE, &ip_pim_ssm_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]
  |  |  ------------------
  ------------------
 6438|      1|	install_element(CONFIG_NODE, &ip_pim_register_suppress_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6439|      1|	install_element(CONFIG_NODE, &no_ip_pim_register_suppress_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6440|      1|	install_element(CONFIG_NODE, &ip_pim_spt_switchover_infinity_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6441|      1|	install_element(VRF_NODE, &ip_pim_spt_switchover_infinity_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6442|      1|	install_element(CONFIG_NODE, &ip_pim_spt_switchover_infinity_plist_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6443|      1|	install_element(VRF_NODE, &ip_pim_spt_switchover_infinity_plist_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6444|      1|	install_element(CONFIG_NODE, &no_ip_pim_spt_switchover_infinity_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6445|      1|	install_element(VRF_NODE, &no_ip_pim_spt_switchover_infinity_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6446|      1|	install_element(CONFIG_NODE,
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6447|      1|			&no_ip_pim_spt_switchover_infinity_plist_cmd);
 6448|      1|	install_element(VRF_NODE, &no_ip_pim_spt_switchover_infinity_plist_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6449|      1|	install_element(CONFIG_NODE, &pim_register_accept_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]
  |  |  ------------------
  ------------------
 6450|      1|	install_element(VRF_NODE, &pim_register_accept_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]
  |  |  ------------------
  ------------------
 6451|      1|	install_element(CONFIG_NODE, &ip_pim_joinprune_time_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6452|      1|	install_element(CONFIG_NODE, &no_ip_pim_joinprune_time_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6453|      1|	install_element(CONFIG_NODE, &ip_pim_keep_alive_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6454|      1|	install_element(VRF_NODE, &ip_pim_keep_alive_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6455|      1|	install_element(CONFIG_NODE, &ip_pim_rp_keep_alive_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6456|      1|	install_element(VRF_NODE, &ip_pim_rp_keep_alive_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6457|      1|	install_element(CONFIG_NODE, &no_ip_pim_keep_alive_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6458|      1|	install_element(VRF_NODE, &no_ip_pim_keep_alive_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6459|      1|	install_element(CONFIG_NODE, &no_ip_pim_rp_keep_alive_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6460|      1|	install_element(VRF_NODE, &no_ip_pim_rp_keep_alive_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6461|      1|	install_element(CONFIG_NODE, &ip_pim_packets_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6462|      1|	install_element(CONFIG_NODE, &no_ip_pim_packets_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6463|      1|	install_element(CONFIG_NODE, &ip_pim_v6_secondary_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6464|      1|	install_element(VRF_NODE, &ip_pim_v6_secondary_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6465|      1|	install_element(CONFIG_NODE, &no_ip_pim_v6_secondary_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6466|      1|	install_element(VRF_NODE, &no_ip_pim_v6_secondary_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6467|      1|	install_element(CONFIG_NODE, &ip_ssmpingd_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6468|      1|	install_element(VRF_NODE, &ip_ssmpingd_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6469|      1|	install_element(CONFIG_NODE, &no_ip_ssmpingd_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6470|      1|	install_element(VRF_NODE, &no_ip_ssmpingd_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6471|      1|	install_element(CONFIG_NODE, &ip_msdp_peer_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6472|      1|	install_element(VRF_NODE, &ip_msdp_peer_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6473|      1|	install_element(CONFIG_NODE, &no_ip_msdp_peer_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6474|      1|	install_element(VRF_NODE, &no_ip_msdp_peer_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6475|      1|	install_element(CONFIG_NODE, &ip_pim_ecmp_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6476|      1|	install_element(VRF_NODE, &ip_pim_ecmp_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6477|      1|	install_element(CONFIG_NODE, &no_ip_pim_ecmp_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6478|      1|	install_element(VRF_NODE, &no_ip_pim_ecmp_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6479|      1|	install_element(CONFIG_NODE, &ip_pim_ecmp_rebalance_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6480|      1|	install_element(VRF_NODE, &ip_pim_ecmp_rebalance_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6481|      1|	install_element(CONFIG_NODE, &no_ip_pim_ecmp_rebalance_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6482|      1|	install_element(VRF_NODE, &no_ip_pim_ecmp_rebalance_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6483|      1|	install_element(CONFIG_NODE, &ip_pim_mlag_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6484|      1|	install_element(CONFIG_NODE, &no_ip_pim_mlag_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6485|      1|	install_element(CONFIG_NODE, &ip_igmp_group_watermark_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6486|      1|	install_element(VRF_NODE, &ip_igmp_group_watermark_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6487|      1|	install_element(CONFIG_NODE, &no_ip_igmp_group_watermark_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6488|      1|	install_element(VRF_NODE, &no_ip_igmp_group_watermark_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6489|       |
 6490|      1|	install_element(INTERFACE_NODE, &interface_ip_igmp_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6491|      1|	install_element(INTERFACE_NODE, &interface_no_ip_igmp_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6492|      1|	install_element(INTERFACE_NODE, &interface_ip_igmp_join_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6493|      1|	install_element(INTERFACE_NODE, &interface_no_ip_igmp_join_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6494|      1|	install_element(INTERFACE_NODE, &interface_ip_igmp_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]
  |  |  ------------------
  ------------------
 6495|      1|	install_element(INTERFACE_NODE, &interface_no_ip_igmp_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]
  |  |  ------------------
  ------------------
 6496|      1|	install_element(INTERFACE_NODE, &interface_ip_igmp_query_interval_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6497|      1|	install_element(INTERFACE_NODE,
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6498|      1|			&interface_no_ip_igmp_query_interval_cmd);
 6499|      1|	install_element(INTERFACE_NODE,
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6500|      1|			&interface_ip_igmp_query_max_response_time_cmd);
 6501|      1|	install_element(INTERFACE_NODE,
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6502|      1|			&interface_no_ip_igmp_query_max_response_time_cmd);
 6503|      1|	install_element(INTERFACE_NODE,
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6504|      1|			&interface_ip_igmp_query_max_response_time_dsec_cmd);
 6505|      1|	install_element(INTERFACE_NODE,
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6506|      1|			&interface_no_ip_igmp_query_max_response_time_dsec_cmd);
 6507|      1|	install_element(INTERFACE_NODE,
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6508|      1|			&interface_ip_igmp_last_member_query_count_cmd);
 6509|      1|	install_element(INTERFACE_NODE,
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6510|      1|			&interface_no_ip_igmp_last_member_query_count_cmd);
 6511|      1|	install_element(INTERFACE_NODE,
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6512|      1|			&interface_ip_igmp_last_member_query_interval_cmd);
 6513|      1|	install_element(INTERFACE_NODE,
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6514|      1|			&interface_no_ip_igmp_last_member_query_interval_cmd);
 6515|      1|	install_element(INTERFACE_NODE, &interface_ip_pim_activeactive_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6516|      1|	install_element(INTERFACE_NODE, &interface_ip_pim_ssm_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6517|      1|	install_element(INTERFACE_NODE, &interface_no_ip_pim_ssm_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6518|      1|	install_element(INTERFACE_NODE, &interface_ip_pim_sm_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6519|      1|	install_element(INTERFACE_NODE, &interface_no_ip_pim_sm_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6520|      1|	install_element(INTERFACE_NODE, &interface_ip_pim_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6521|      1|	install_element(INTERFACE_NODE, &interface_no_ip_pim_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6522|      1|	install_element(INTERFACE_NODE, &interface_ip_pim_drprio_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6523|      1|	install_element(INTERFACE_NODE, &interface_no_ip_pim_drprio_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6524|      1|	install_element(INTERFACE_NODE, &interface_ip_pim_hello_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6525|      1|	install_element(INTERFACE_NODE, &interface_no_ip_pim_hello_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6526|      1|	install_element(INTERFACE_NODE, &interface_ip_pim_boundary_oil_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6527|      1|	install_element(INTERFACE_NODE, &interface_no_ip_pim_boundary_oil_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6528|      1|	install_element(INTERFACE_NODE, &interface_ip_igmp_query_generate_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6529|       |
 6530|       |	// Static mroutes NEB
 6531|      1|	install_element(INTERFACE_NODE, &interface_ip_mroute_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6532|      1|	install_element(INTERFACE_NODE, &interface_no_ip_mroute_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6533|       |
 6534|      1|	install_element(VIEW_NODE, &show_ip_igmp_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]
  |  |  ------------------
  ------------------
 6535|      1|	install_element(VIEW_NODE, &show_ip_igmp_interface_vrf_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]
  |  |  ------------------
  ------------------
 6536|      1|	install_element(VIEW_NODE, &show_ip_igmp_join_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6537|      1|	install_element(VIEW_NODE, &show_ip_igmp_join_vrf_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]
  |  |  ------------------
  ------------------
 6538|      1|	install_element(VIEW_NODE, &show_ip_igmp_groups_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6539|      1|	install_element(VIEW_NODE, &show_ip_igmp_groups_vrf_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]
  |  |  ------------------
  ------------------
 6540|      1|	install_element(VIEW_NODE, &show_ip_igmp_groups_retransmissions_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6541|      1|	install_element(VIEW_NODE, &show_ip_igmp_sources_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6542|      1|	install_element(VIEW_NODE, &show_ip_igmp_sources_retransmissions_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6543|      1|	install_element(VIEW_NODE, &show_ip_igmp_statistics_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6544|      1|	install_element(VIEW_NODE, &show_ip_pim_assert_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6545|      1|	install_element(VIEW_NODE, &show_ip_pim_assert_internal_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6546|      1|	install_element(VIEW_NODE, &show_ip_pim_assert_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]
  |  |  ------------------
  ------------------
 6547|      1|	install_element(VIEW_NODE, &show_ip_pim_assert_winner_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]
  |  |  ------------------
  ------------------
 6548|      1|	install_element(VIEW_NODE, &show_ip_pim_interface_traffic_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6549|      1|	install_element(VIEW_NODE, &show_ip_pim_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]
  |  |  ------------------
  ------------------
 6550|      1|	install_element(VIEW_NODE, &show_ip_pim_interface_vrf_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]
  |  |  ------------------
  ------------------
 6551|      1|	install_element(VIEW_NODE, &show_ip_pim_join_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6552|      1|	install_element(VIEW_NODE, &show_ip_pim_join_vrf_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]
  |  |  ------------------
  ------------------
 6553|      1|	install_element(VIEW_NODE, &show_ip_pim_jp_agg_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6554|      1|	install_element(VIEW_NODE, &show_ip_pim_local_membership_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6555|      1|	install_element(VIEW_NODE, &show_ip_pim_mlag_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]
  |  |  ------------------
  ------------------
 6556|      1|	install_element(VIEW_NODE, &show_ip_pim_mlag_up_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6557|      1|	install_element(VIEW_NODE, &show_ip_pim_mlag_up_vrf_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]
  |  |  ------------------
  ------------------
 6558|      1|	install_element(VIEW_NODE, &show_ip_pim_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]
  |  |  ------------------
  ------------------
 6559|      1|	install_element(VIEW_NODE, &show_ip_pim_neighbor_vrf_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]
  |  |  ------------------
  ------------------
 6560|      1|	install_element(VIEW_NODE, &show_ip_pim_rpf_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6561|      1|	install_element(VIEW_NODE, &show_ip_pim_rpf_vrf_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]
  |  |  ------------------
  ------------------
 6562|      1|	install_element(VIEW_NODE, &show_ip_pim_secondary_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6563|      1|	install_element(VIEW_NODE, &show_ip_pim_state_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6564|      1|	install_element(VIEW_NODE, &show_ip_pim_state_vrf_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]
  |  |  ------------------
  ------------------
 6565|      1|	install_element(VIEW_NODE, &show_ip_pim_upstream_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6566|      1|	install_element(VIEW_NODE, &show_ip_pim_upstream_vrf_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]
  |  |  ------------------
  ------------------
 6567|      1|	install_element(VIEW_NODE, &show_ip_pim_channel_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6568|      1|	install_element(VIEW_NODE, &show_ip_pim_upstream_join_desired_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6569|      1|	install_element(VIEW_NODE, &show_ip_pim_upstream_rpf_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6570|      1|	install_element(VIEW_NODE, &show_ip_pim_rp_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6571|      1|	install_element(VIEW_NODE, &show_ip_pim_rp_vrf_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]
  |  |  ------------------
  ------------------
 6572|      1|	install_element(VIEW_NODE, &show_ip_pim_bsr_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6573|      1|	install_element(VIEW_NODE, &show_ip_multicast_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6574|      1|	install_element(VIEW_NODE, &show_ip_multicast_vrf_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]
  |  |  ------------------
  ------------------
 6575|      1|	install_element(VIEW_NODE, &show_ip_multicast_count_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6576|      1|	install_element(VIEW_NODE, &show_ip_multicast_count_vrf_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]
  |  |  ------------------
  ------------------
 6577|      1|	install_element(VIEW_NODE, &show_ip_mroute_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6578|      1|	install_element(VIEW_NODE, &show_ip_mroute_vrf_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]
  |  |  ------------------
  ------------------
 6579|      1|	install_element(VIEW_NODE, &show_ip_mroute_count_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6580|      1|	install_element(VIEW_NODE, &show_ip_mroute_count_vrf_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]
  |  |  ------------------
  ------------------
 6581|      1|	install_element(VIEW_NODE, &show_ip_mroute_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]
  |  |  ------------------
  ------------------
 6582|      1|	install_element(VIEW_NODE, &show_ip_mroute_summary_vrf_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]
  |  |  ------------------
  ------------------
 6583|      1|	install_element(VIEW_NODE, &show_ip_rib_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6584|      1|	install_element(VIEW_NODE, &show_ip_ssmpingd_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6585|      1|	install_element(VIEW_NODE, &show_ip_pim_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]
  |  |  ------------------
  ------------------
 6586|      1|	install_element(VIEW_NODE, &show_ip_pim_nexthop_lookup_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6587|      1|	install_element(VIEW_NODE, &show_ip_pim_bsrp_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6588|      1|	install_element(VIEW_NODE, &show_ip_pim_bsm_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]
  |  |  ------------------
  ------------------
 6589|      1|	install_element(VIEW_NODE, &show_ip_pim_statistics_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6590|       |
 6591|      1|	install_element(ENABLE_NODE, &clear_ip_mroute_count_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6592|      1|	install_element(ENABLE_NODE, &clear_ip_interfaces_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6593|      1|	install_element(ENABLE_NODE, &clear_ip_igmp_interfaces_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6594|      1|	install_element(ENABLE_NODE, &clear_ip_mroute_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6595|      1|	install_element(ENABLE_NODE, &clear_ip_pim_interfaces_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6596|      1|	install_element(ENABLE_NODE, &clear_ip_pim_interface_traffic_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6597|      1|	install_element(ENABLE_NODE, &clear_ip_pim_oil_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6598|      1|	install_element(ENABLE_NODE, &clear_ip_pim_statistics_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6599|      1|	install_element(ENABLE_NODE, &clear_ip_pim_bsr_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]
  |  |  ------------------
  ------------------
 6600|       |
 6601|      1|	install_element(ENABLE_NODE, &show_debugging_pim_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6602|       |
 6603|      1|	install_element(ENABLE_NODE, &debug_igmp_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6604|      1|	install_element(ENABLE_NODE, &no_debug_igmp_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6605|      1|	install_element(ENABLE_NODE, &debug_igmp_events_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6606|      1|	install_element(ENABLE_NODE, &no_debug_igmp_events_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6607|      1|	install_element(ENABLE_NODE, &debug_igmp_packets_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6608|      1|	install_element(ENABLE_NODE, &no_debug_igmp_packets_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6609|      1|	install_element(ENABLE_NODE, &debug_igmp_trace_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6610|      1|	install_element(ENABLE_NODE, &no_debug_igmp_trace_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6611|      1|	install_element(ENABLE_NODE, &debug_igmp_trace_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]
  |  |  ------------------
  ------------------
 6612|      1|	install_element(ENABLE_NODE, &no_debug_igmp_trace_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]
  |  |  ------------------
  ------------------
 6613|      1|	install_element(ENABLE_NODE, &debug_mroute_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6614|      1|	install_element(ENABLE_NODE, &debug_mroute_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]
  |  |  ------------------
  ------------------
 6615|      1|	install_element(ENABLE_NODE, &no_debug_mroute_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6616|      1|	install_element(ENABLE_NODE, &no_debug_mroute_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]
  |  |  ------------------
  ------------------
 6617|      1|	install_element(ENABLE_NODE, &debug_pim_static_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6618|      1|	install_element(ENABLE_NODE, &no_debug_pim_static_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6619|      1|	install_element(ENABLE_NODE, &debug_pim_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6620|      1|	install_element(ENABLE_NODE, &debug_pim_nht_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6621|      1|	install_element(ENABLE_NODE, &debug_pim_nht_det_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6622|      1|	install_element(ENABLE_NODE, &debug_pim_nht_rp_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6623|      1|	install_element(ENABLE_NODE, &no_debug_pim_nht_rp_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6624|      1|	install_element(ENABLE_NODE, &debug_pim_events_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6625|      1|	install_element(ENABLE_NODE, &debug_pim_packets_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6626|      1|	install_element(ENABLE_NODE, &debug_pim_packetdump_send_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6627|      1|	install_element(ENABLE_NODE, &debug_pim_packetdump_recv_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6628|      1|	install_element(ENABLE_NODE, &debug_pim_trace_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6629|      1|	install_element(ENABLE_NODE, &debug_pim_trace_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]
  |  |  ------------------
  ------------------
 6630|      1|	install_element(ENABLE_NODE, &debug_ssmpingd_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6631|      1|	install_element(ENABLE_NODE, &no_debug_ssmpingd_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6632|      1|	install_element(ENABLE_NODE, &debug_pim_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]
  |  |  ------------------
  ------------------
 6633|      1|	install_element(ENABLE_NODE, &debug_pim_mlag_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6634|      1|	install_element(ENABLE_NODE, &no_debug_pim_mlag_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6635|      1|	install_element(ENABLE_NODE, &debug_pim_vxlan_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6636|      1|	install_element(ENABLE_NODE, &no_debug_pim_vxlan_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6637|      1|	install_element(ENABLE_NODE, &debug_msdp_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6638|      1|	install_element(ENABLE_NODE, &no_debug_msdp_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6639|      1|	install_element(ENABLE_NODE, &debug_msdp_events_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6640|      1|	install_element(ENABLE_NODE, &no_debug_msdp_events_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6641|      1|	install_element(ENABLE_NODE, &debug_msdp_packets_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6642|      1|	install_element(ENABLE_NODE, &no_debug_msdp_packets_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6643|      1|	install_element(ENABLE_NODE, &debug_mtrace_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6644|      1|	install_element(ENABLE_NODE, &no_debug_mtrace_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6645|      1|	install_element(ENABLE_NODE, &debug_bsm_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6646|      1|	install_element(ENABLE_NODE, &no_debug_bsm_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6647|       |
 6648|      1|	install_element(CONFIG_NODE, &debug_igmp_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6649|      1|	install_element(CONFIG_NODE, &no_debug_igmp_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6650|      1|	install_element(CONFIG_NODE, &debug_igmp_events_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6651|      1|	install_element(CONFIG_NODE, &no_debug_igmp_events_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6652|      1|	install_element(CONFIG_NODE, &debug_igmp_packets_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6653|      1|	install_element(CONFIG_NODE, &no_debug_igmp_packets_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6654|      1|	install_element(CONFIG_NODE, &debug_igmp_trace_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6655|      1|	install_element(CONFIG_NODE, &no_debug_igmp_trace_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6656|      1|	install_element(CONFIG_NODE, &debug_igmp_trace_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]
  |  |  ------------------
  ------------------
 6657|      1|	install_element(CONFIG_NODE, &no_debug_igmp_trace_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]
  |  |  ------------------
  ------------------
 6658|      1|	install_element(CONFIG_NODE, &debug_mroute_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6659|      1|	install_element(CONFIG_NODE, &debug_mroute_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]
  |  |  ------------------
  ------------------
 6660|      1|	install_element(CONFIG_NODE, &no_debug_mroute_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6661|      1|	install_element(CONFIG_NODE, &no_debug_mroute_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]
  |  |  ------------------
  ------------------
 6662|      1|	install_element(CONFIG_NODE, &debug_pim_static_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6663|      1|	install_element(CONFIG_NODE, &no_debug_pim_static_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6664|      1|	install_element(CONFIG_NODE, &debug_pim_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6665|      1|	install_element(CONFIG_NODE, &debug_pim_nht_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6666|      1|	install_element(CONFIG_NODE, &debug_pim_nht_det_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6667|      1|	install_element(CONFIG_NODE, &debug_pim_nht_rp_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6668|      1|	install_element(CONFIG_NODE, &no_debug_pim_nht_rp_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6669|      1|	install_element(CONFIG_NODE, &debug_pim_events_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6670|      1|	install_element(CONFIG_NODE, &debug_pim_packets_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6671|      1|	install_element(CONFIG_NODE, &debug_pim_packetdump_send_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6672|      1|	install_element(CONFIG_NODE, &debug_pim_packetdump_recv_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6673|      1|	install_element(CONFIG_NODE, &debug_pim_trace_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6674|      1|	install_element(CONFIG_NODE, &debug_pim_trace_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]
  |  |  ------------------
  ------------------
 6675|      1|	install_element(CONFIG_NODE, &debug_ssmpingd_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6676|      1|	install_element(CONFIG_NODE, &no_debug_ssmpingd_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6677|      1|	install_element(CONFIG_NODE, &debug_pim_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]
  |  |  ------------------
  ------------------
 6678|      1|	install_element(CONFIG_NODE, &debug_pim_mlag_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6679|      1|	install_element(CONFIG_NODE, &no_debug_pim_mlag_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6680|      1|	install_element(CONFIG_NODE, &debug_pim_vxlan_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6681|      1|	install_element(CONFIG_NODE, &no_debug_pim_vxlan_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6682|      1|	install_element(CONFIG_NODE, &debug_msdp_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6683|      1|	install_element(CONFIG_NODE, &no_debug_msdp_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6684|      1|	install_element(CONFIG_NODE, &debug_msdp_events_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6685|      1|	install_element(CONFIG_NODE, &no_debug_msdp_events_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6686|      1|	install_element(CONFIG_NODE, &debug_msdp_packets_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6687|      1|	install_element(CONFIG_NODE, &no_debug_msdp_packets_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6688|      1|	install_element(CONFIG_NODE, &debug_mtrace_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6689|      1|	install_element(CONFIG_NODE, &no_debug_mtrace_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6690|      1|	install_element(CONFIG_NODE, &debug_bsm_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6691|      1|	install_element(CONFIG_NODE, &no_debug_bsm_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6692|       |
 6693|      1|	install_element(CONFIG_NODE, &ip_msdp_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]
  |  |  ------------------
  ------------------
 6694|      1|	install_element(VRF_NODE, &ip_msdp_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]
  |  |  ------------------
  ------------------
 6695|      1|	install_element(CONFIG_NODE, &no_ip_msdp_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]
  |  |  ------------------
  ------------------
 6696|      1|	install_element(VRF_NODE, &no_ip_msdp_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]
  |  |  ------------------
  ------------------
 6697|      1|	install_element(CONFIG_NODE, &ip_msdp_mesh_group_member_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6698|      1|	install_element(VRF_NODE, &ip_msdp_mesh_group_member_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6699|      1|	install_element(CONFIG_NODE, &no_ip_msdp_mesh_group_member_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6700|      1|	install_element(VRF_NODE, &no_ip_msdp_mesh_group_member_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6701|      1|	install_element(CONFIG_NODE, &ip_msdp_mesh_group_source_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6702|      1|	install_element(VRF_NODE, &ip_msdp_mesh_group_source_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6703|      1|	install_element(CONFIG_NODE, &no_ip_msdp_mesh_group_source_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6704|      1|	install_element(VRF_NODE, &no_ip_msdp_mesh_group_source_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6705|      1|	install_element(CONFIG_NODE, &no_ip_msdp_mesh_group_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6706|      1|	install_element(VRF_NODE, &no_ip_msdp_mesh_group_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6707|      1|	install_element(VIEW_NODE, &show_ip_msdp_peer_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]
  |  |  ------------------
  ------------------
 6708|      1|	install_element(VIEW_NODE, &show_ip_msdp_peer_detail_vrf_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]
  |  |  ------------------
  ------------------
 6709|      1|	install_element(VIEW_NODE, &show_ip_msdp_sa_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]
  |  |  ------------------
  ------------------
 6710|      1|	install_element(VIEW_NODE, &show_ip_msdp_sa_detail_vrf_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]
  |  |  ------------------
  ------------------
 6711|      1|	install_element(VIEW_NODE, &show_ip_msdp_sa_sg_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6712|      1|	install_element(VIEW_NODE, &show_ip_msdp_sa_sg_vrf_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]
  |  |  ------------------
  ------------------
 6713|      1|	install_element(VIEW_NODE, &show_ip_msdp_mesh_group_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6714|      1|	install_element(VIEW_NODE, &show_ip_msdp_mesh_group_vrf_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]
  |  |  ------------------
  ------------------
 6715|      1|	install_element(VIEW_NODE, &show_ip_pim_ssm_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]
  |  |  ------------------
  ------------------
 6716|      1|	install_element(VIEW_NODE, &show_ip_pim_group_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]
  |  |  ------------------
  ------------------
 6717|      1|	install_element(VIEW_NODE, &show_ip_pim_vxlan_sg_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6718|      1|	install_element(VIEW_NODE, &show_ip_pim_vxlan_sg_work_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6719|      1|	install_element(INTERFACE_NODE, &interface_pim_use_source_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6720|      1|	install_element(INTERFACE_NODE, &interface_no_pim_use_source_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6721|       |	/* Install BSM command */
 6722|      1|	install_element(INTERFACE_NODE, &ip_pim_bsm_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6723|      1|	install_element(INTERFACE_NODE, &no_ip_pim_bsm_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6724|      1|	install_element(INTERFACE_NODE, &ip_pim_ucast_bsm_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6725|      1|	install_element(INTERFACE_NODE, &no_ip_pim_ucast_bsm_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6726|       |	/* Install BFD command */
 6727|      1|	install_element(INTERFACE_NODE, &ip_pim_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]
  |  |  ------------------
  ------------------
 6728|      1|	install_element(INTERFACE_NODE, &ip_pim_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]
  |  |  ------------------
  ------------------
 6729|      1|	install_element(INTERFACE_NODE, &no_ip_pim_bfd_profile_cmd);
  ------------------
  |  |  512|      1|#define install_element(node_type_, cmd_element_) do {                         \
  |  |  513|      1|		static const struct xref_install_element _xref                 \
  |  |  514|      1|				__attribute__((used)) = {                      \
  |  |  515|      1|			.xref = XREF_INIT(XREFT_INSTALL_ELEMENT, NULL,         \
  |  |  ------------------
  |  |  |  |  283|      1|	{                                                                      \
  |  |  |  |  284|      1|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      1|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      1|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      1|		/* .func = */ func_,                                           \
  |  |  |  |  289|      1|	}                                                                      \
  |  |  ------------------
  |  |  516|      1|					  __func__),                           \
  |  |  517|      1|			.cmd_element = cmd_element_,                           \
  |  |  518|      1|			.node_type = node_type_,                               \
  |  |  519|      1|		};                                                             \
  |  |  520|      1|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      1|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      1|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      1|		= &(dst)                                                       \
  |  |  ------------------
  |  |  521|      1|		_install_element(node_type_, cmd_element_);                    \
  |  |  522|      1|	} while (0)
  |  |  ------------------
  |  |  |  Branch (522:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6730|      1|	install_element(INTERFACE_NODE, &no_ip_pim_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]
  |  |  ------------------
  ------------------
 6731|       |#if HAVE_BFDD == 0
 6732|       |	install_element(INTERFACE_NODE, &no_ip_pim_bfd_param_cmd);
 6733|       |#endif /* !HAVE_BFDD */
 6734|      1|}

pim_error_init:
   34|      1|{
   35|      1|	log_ref_add(ferr_pim_err);
   36|      1|}

pim_hello_recv:
   95|    481|{
   96|    481|	struct pim_interface *pim_ifp;
   97|    481|	struct pim_neighbor *neigh;
   98|    481|	uint8_t *tlv_curr;
   99|    481|	uint8_t *tlv_pastend;
  100|    481|	pim_hello_options hello_options =
  101|    481|		0; /* bit array recording options found */
  102|    481|	uint16_t hello_option_holdtime = 0;
  103|    481|	uint16_t hello_option_propagation_delay = 0;
  104|    481|	uint16_t hello_option_override_interval = 0;
  105|    481|	uint32_t hello_option_dr_priority = 0;
  106|    481|	uint32_t hello_option_generation_id = 0;
  107|    481|	struct list *hello_option_addr_list = 0;
  108|       |
  109|    481|	if (PIM_DEBUG_PIM_HELLO)
  ------------------
  |  |  160|    481|#define PIM_DEBUG_PIM_HELLO (router->debugs & PIM_MASK_PIM_HELLO)
  |  |  ------------------
  |  |  |  |   87|    481|#define PIM_MASK_PIM_HELLO           (1 << 15)
  |  |  ------------------
  |  |  |  Branch (160:29): [True: 0, False: 481]
  |  |  ------------------
  ------------------
  110|      0|		on_trace(__func__, ifp, src_addr);
  111|       |
  112|    481|	pim_ifp = ifp->info;
  113|    481|	assert(pim_ifp);
  ------------------
  |  |   51|    481|	({                                                                     \
  |  |   52|    481|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|    481|			(used)) = {                                            \
  |  |   54|    481|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|    481|	{                                                                      \
  |  |  |  |  284|    481|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|    481|		/* .type = */ (type_),                                         \
  |  |  |  |  286|    481|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|    481|		/* .func = */ func_,                                           \
  |  |  |  |  289|    481|	}                                                                      \
  |  |  ------------------
  |  |   55|    481|			.expr = #expr_,                                        \
  |  |   56|    481|		};                                                             \
  |  |   57|    481|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|    481|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|    481|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|    481|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|    481|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 481]
  |  |  |  Branch (58:24): [True: 481, False: 0]
  |  |  ------------------
  |  |   59|    481|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|    481|	})
  ------------------
  114|       |
  115|    481|	if (pim_ifp->pim_passive_enable) {
  ------------------
  |  Branch (115:6): [True: 0, False: 481]
  ------------------
  116|      0|		if (PIM_DEBUG_PIM_PACKETS)
  ------------------
  |  |  140|      0|#define PIM_DEBUG_PIM_PACKETS (router->debugs & PIM_MASK_PIM_PACKETS)
  |  |  ------------------
  |  |  |  |   74|      0|#define PIM_MASK_PIM_PACKETS         (1 << 2)
  |  |  ------------------
  |  |  |  Branch (140:31): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  117|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  118|      0|				"skip receiving PIM message on passive interface %s",
  119|      0|				ifp->name);
  120|      0|		return 0;
  121|      0|	}
  122|       |
  123|    481|	++pim_ifp->pim_ifstat_hello_recv;
  124|       |
  125|       |	/*
  126|       |	  Parse PIM hello TLVs
  127|       |	 */
  128|    481|	assert(tlv_buf_size >= 0);
  ------------------
  |  |   51|    481|	({                                                                     \
  |  |   52|    481|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|    481|			(used)) = {                                            \
  |  |   54|    481|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|    481|	{                                                                      \
  |  |  |  |  284|    481|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|    481|		/* .type = */ (type_),                                         \
  |  |  |  |  286|    481|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|    481|		/* .func = */ func_,                                           \
  |  |  |  |  289|    481|	}                                                                      \
  |  |  ------------------
  |  |   55|    481|			.expr = #expr_,                                        \
  |  |   56|    481|		};                                                             \
  |  |   57|    481|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|    481|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|    481|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|    481|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|    481|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 481]
  |  |  |  Branch (58:24): [True: 481, False: 0]
  |  |  ------------------
  |  |   59|    481|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|    481|	})
  ------------------
  129|    481|	tlv_curr = tlv_buf;
  130|    481|	tlv_pastend = tlv_buf + tlv_buf_size;
  131|       |
  132|  18.2k|	while (tlv_curr < tlv_pastend) {
  ------------------
  |  Branch (132:9): [True: 17.9k, False: 328]
  ------------------
  133|  17.9k|		uint16_t option_type;
  134|  17.9k|		uint16_t option_len;
  135|  17.9k|		int remain = tlv_pastend - tlv_curr;
  136|       |
  137|  17.9k|		if (remain < PIM_TLV_MIN_SIZE) {
  ------------------
  |  |   63|  17.9k|#define PIM_TLV_MIN_SIZE                (PIM_TLV_TYPE_SIZE + PIM_TLV_LENGTH_SIZE)
  |  |  ------------------
  |  |  |  |   61|  17.9k|#define PIM_TLV_TYPE_SIZE               (2)
  |  |  ------------------
  |  |               #define PIM_TLV_MIN_SIZE                (PIM_TLV_TYPE_SIZE + PIM_TLV_LENGTH_SIZE)
  |  |  ------------------
  |  |  |  |   62|  17.9k|#define PIM_TLV_LENGTH_SIZE             (2)
  |  |  ------------------
  ------------------
  |  Branch (137:7): [True: 4, False: 17.9k]
  ------------------
  138|      4|			if (PIM_DEBUG_PIM_HELLO)
  ------------------
  |  |  160|      4|#define PIM_DEBUG_PIM_HELLO (router->debugs & PIM_MASK_PIM_HELLO)
  |  |  ------------------
  |  |  |  |   87|      4|#define PIM_MASK_PIM_HELLO           (1 << 15)
  |  |  ------------------
  |  |  |  Branch (160:29): [True: 0, False: 4]
  |  |  ------------------
  ------------------
  139|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  140|      4|					"%s: short PIM hello TLV size=%d < min=%d from %pPAs on interface %s",
  141|      4|					__func__, remain, PIM_TLV_MIN_SIZE,
  142|      4|					&src_addr, ifp->name);
  143|      4|			FREE_ADDR_LIST_THEN_RETURN(-1);
  ------------------
  |  |   88|      4|	{                                                                      \
  |  |   89|      4|		FREE_ADDR_LIST                                                 \
  |  |  ------------------
  |  |  |  |   83|      4|	if (hello_option_addr_list) {                                          \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (83:6): [True: 1, False: 3]
  |  |  |  |  ------------------
  |  |  |  |   84|      1|		list_delete(&hello_option_addr_list);                          \
  |  |  |  |   85|      1|	}
  |  |  ------------------
  |  |   90|      4|		return (code);                                                 \
  |  |   91|      4|	}
  ------------------
  144|      0|		}
  145|       |
  146|  17.9k|		option_type = PIM_TLV_GET_TYPE(tlv_curr);
  ------------------
  |  |   52|  17.9k|#define PIM_TLV_GET_TYPE(buf) PIM_TLV_GET_UINT16(buf)
  |  |  ------------------
  |  |  |  |   41|  17.9k|	({                                                                     \
  |  |  |  |   42|  17.9k|		uint16_t _tmp;                                                 \
  |  |  |  |   43|  17.9k|		memcpy(&_tmp, (buf), sizeof(uint16_t));                        \
  |  |  |  |   44|  17.9k|		ntohs(_tmp);                                                   \
  |  |  |  |   45|  17.9k|	})
  |  |  ------------------
  ------------------
  147|  17.9k|		tlv_curr += PIM_TLV_TYPE_SIZE;
  ------------------
  |  |   61|  17.9k|#define PIM_TLV_TYPE_SIZE               (2)
  ------------------
  148|  17.9k|		option_len = PIM_TLV_GET_LENGTH(tlv_curr);
  ------------------
  |  |   53|  17.9k|#define PIM_TLV_GET_LENGTH(buf) PIM_TLV_GET_UINT16(buf)
  |  |  ------------------
  |  |  |  |   41|  17.9k|	({                                                                     \
  |  |  |  |   42|  17.9k|		uint16_t _tmp;                                                 \
  |  |  |  |   43|  17.9k|		memcpy(&_tmp, (buf), sizeof(uint16_t));                        \
  |  |  |  |   44|  17.9k|		ntohs(_tmp);                                                   \
  |  |  |  |   45|  17.9k|	})
  |  |  ------------------
  ------------------
  149|  17.9k|		tlv_curr += PIM_TLV_LENGTH_SIZE;
  ------------------
  |  |   62|  17.9k|#define PIM_TLV_LENGTH_SIZE             (2)
  ------------------
  150|       |
  151|  17.9k|		if ((tlv_curr + option_len) > tlv_pastend) {
  ------------------
  |  Branch (151:7): [True: 15, False: 17.9k]
  ------------------
  152|     15|			if (PIM_DEBUG_PIM_HELLO)
  ------------------
  |  |  160|     15|#define PIM_DEBUG_PIM_HELLO (router->debugs & PIM_MASK_PIM_HELLO)
  |  |  ------------------
  |  |  |  |   87|     15|#define PIM_MASK_PIM_HELLO           (1 << 15)
  |  |  ------------------
  |  |  |  Branch (160:29): [True: 0, False: 15]
  |  |  ------------------
  ------------------
  153|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  154|     15|					"%s: long PIM hello TLV type=%d length=%d > left=%td from %pPAs on interface %s",
  155|     15|					__func__, option_type, option_len,
  156|     15|					tlv_pastend - tlv_curr, &src_addr,
  157|     15|					ifp->name);
  158|     15|			FREE_ADDR_LIST_THEN_RETURN(-2);
  ------------------
  |  |   88|     15|	{                                                                      \
  |  |   89|     15|		FREE_ADDR_LIST                                                 \
  |  |  ------------------
  |  |  |  |   83|     15|	if (hello_option_addr_list) {                                          \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (83:6): [True: 2, False: 13]
  |  |  |  |  ------------------
  |  |  |  |   84|      2|		list_delete(&hello_option_addr_list);                          \
  |  |  |  |   85|      2|	}
  |  |  ------------------
  |  |   90|     15|		return (code);                                                 \
  |  |   91|     15|	}
  ------------------
  159|      0|		}
  160|       |
  161|  17.9k|		if (PIM_DEBUG_PIM_HELLO)
  ------------------
  |  |  160|  17.9k|#define PIM_DEBUG_PIM_HELLO (router->debugs & PIM_MASK_PIM_HELLO)
  |  |  ------------------
  |  |  |  |   87|  17.9k|#define PIM_MASK_PIM_HELLO           (1 << 15)
  |  |  ------------------
  |  |  |  Branch (160:29): [True: 0, False: 17.9k]
  |  |  ------------------
  ------------------
  162|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  163|  17.9k|				"%s: parse left_size=%d: PIM hello TLV type=%d length=%d from %pPAs on %s",
  164|  17.9k|				__func__, remain, option_type, option_len,
  165|  17.9k|				&src_addr, ifp->name);
  166|       |
  167|  17.9k|		switch (option_type) {
  168|    230|		case PIM_MSG_OPTION_TYPE_HOLDTIME:
  ------------------
  |  |   16|    230|#define PIM_MSG_OPTION_TYPE_HOLDTIME         (1)
  ------------------
  |  Branch (168:3): [True: 230, False: 17.6k]
  ------------------
  169|    230|			if (pim_tlv_parse_holdtime(ifp->name, src_addr,
  ------------------
  |  Branch (169:8): [True: 8, False: 222]
  ------------------
  170|    230|						   &hello_options,
  171|    230|						   &hello_option_holdtime,
  172|    230|						   option_len, tlv_curr)) {
  173|      8|				FREE_ADDR_LIST_THEN_RETURN(-3);
  ------------------
  |  |   88|      8|	{                                                                      \
  |  |   89|      8|		FREE_ADDR_LIST                                                 \
  |  |  ------------------
  |  |  |  |   83|      8|	if (hello_option_addr_list) {                                          \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (83:6): [True: 1, False: 7]
  |  |  |  |  ------------------
  |  |  |  |   84|      1|		list_delete(&hello_option_addr_list);                          \
  |  |  |  |   85|      1|	}
  |  |  ------------------
  |  |   90|      8|		return (code);                                                 \
  |  |   91|      8|	}
  ------------------
  174|      0|			}
  175|    222|			break;
  176|    524|		case PIM_MSG_OPTION_TYPE_LAN_PRUNE_DELAY:
  ------------------
  |  |   17|    524|#define PIM_MSG_OPTION_TYPE_LAN_PRUNE_DELAY  (2)
  ------------------
  |  Branch (176:3): [True: 524, False: 17.3k]
  ------------------
  177|    524|			if (pim_tlv_parse_lan_prune_delay(
  ------------------
  |  Branch (177:8): [True: 26, False: 498]
  ------------------
  178|    524|				    ifp->name, src_addr, &hello_options,
  179|    524|				    &hello_option_propagation_delay,
  180|    524|				    &hello_option_override_interval, option_len,
  181|    524|				    tlv_curr)) {
  182|     26|				FREE_ADDR_LIST_THEN_RETURN(-4);
  ------------------
  |  |   88|     26|	{                                                                      \
  |  |   89|     26|		FREE_ADDR_LIST                                                 \
  |  |  ------------------
  |  |  |  |   83|     26|	if (hello_option_addr_list) {                                          \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (83:6): [True: 1, False: 25]
  |  |  |  |  ------------------
  |  |  |  |   84|      1|		list_delete(&hello_option_addr_list);                          \
  |  |  |  |   85|      1|	}
  |  |  ------------------
  |  |   90|     26|		return (code);                                                 \
  |  |   91|     26|	}
  ------------------
  183|      0|			}
  184|    498|			break;
  185|    498|		case PIM_MSG_OPTION_TYPE_DR_PRIORITY:
  ------------------
  |  |   18|    335|#define PIM_MSG_OPTION_TYPE_DR_PRIORITY      (19)
  ------------------
  |  Branch (185:3): [True: 335, False: 17.5k]
  ------------------
  186|    335|			if (pim_tlv_parse_dr_priority(ifp->name, src_addr,
  ------------------
  |  Branch (186:8): [True: 24, False: 311]
  ------------------
  187|    335|						      &hello_options,
  188|    335|						      &hello_option_dr_priority,
  189|    335|						      option_len, tlv_curr)) {
  190|     24|				FREE_ADDR_LIST_THEN_RETURN(-5);
  ------------------
  |  |   88|     24|	{                                                                      \
  |  |   89|     24|		FREE_ADDR_LIST                                                 \
  |  |  ------------------
  |  |  |  |   83|     24|	if (hello_option_addr_list) {                                          \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (83:6): [True: 3, False: 21]
  |  |  |  |  ------------------
  |  |  |  |   84|      3|		list_delete(&hello_option_addr_list);                          \
  |  |  |  |   85|      3|	}
  |  |  ------------------
  |  |   90|     24|		return (code);                                                 \
  |  |   91|     24|	}
  ------------------
  191|      0|			}
  192|    311|			break;
  193|    471|		case PIM_MSG_OPTION_TYPE_GENERATION_ID:
  ------------------
  |  |   19|    471|#define PIM_MSG_OPTION_TYPE_GENERATION_ID    (20)
  ------------------
  |  Branch (193:3): [True: 471, False: 17.4k]
  ------------------
  194|    471|			if (pim_tlv_parse_generation_id(
  ------------------
  |  Branch (194:8): [True: 17, False: 454]
  ------------------
  195|    471|				    ifp->name, src_addr, &hello_options,
  196|    471|				    &hello_option_generation_id, option_len,
  197|    471|				    tlv_curr)) {
  198|     17|				FREE_ADDR_LIST_THEN_RETURN(-6);
  ------------------
  |  |   88|     17|	{                                                                      \
  |  |   89|     17|		FREE_ADDR_LIST                                                 \
  |  |  ------------------
  |  |  |  |   83|     17|	if (hello_option_addr_list) {                                          \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (83:6): [True: 2, False: 15]
  |  |  |  |  ------------------
  |  |  |  |   84|      2|		list_delete(&hello_option_addr_list);                          \
  |  |  |  |   85|      2|	}
  |  |  ------------------
  |  |   90|     17|		return (code);                                                 \
  |  |   91|     17|	}
  ------------------
  199|      0|			}
  200|    454|			break;
  201|  15.4k|		case PIM_MSG_OPTION_TYPE_ADDRESS_LIST:
  ------------------
  |  |   21|  15.4k|#define PIM_MSG_OPTION_TYPE_ADDRESS_LIST     (24)
  ------------------
  |  Branch (201:3): [True: 15.4k, False: 2.51k]
  ------------------
  202|  15.4k|			if (pim_tlv_parse_addr_list(ifp->name, src_addr,
  ------------------
  |  Branch (202:8): [True: 59, False: 15.3k]
  ------------------
  203|  15.4k|						    &hello_options,
  204|  15.4k|						    &hello_option_addr_list,
  205|  15.4k|						    option_len, tlv_curr)) {
  206|     59|				return -7;
  207|     59|			}
  208|  15.3k|			break;
  209|  15.3k|		case PIM_MSG_OPTION_TYPE_DM_STATE_REFRESH:
  ------------------
  |  |   20|      1|#define PIM_MSG_OPTION_TYPE_DM_STATE_REFRESH (21)
  ------------------
  |  Branch (209:3): [True: 1, False: 17.9k]
  ------------------
  210|      1|			if (PIM_DEBUG_PIM_HELLO)
  ------------------
  |  |  160|      1|#define PIM_DEBUG_PIM_HELLO (router->debugs & PIM_MASK_PIM_HELLO)
  |  |  ------------------
  |  |  |  |   87|      1|#define PIM_MASK_PIM_HELLO           (1 << 15)
  |  |  ------------------
  |  |  |  Branch (160:29): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  211|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  212|      1|					"%s: ignoring PIM hello dense-mode state refresh TLV option type=%d length=%d from %pPAs on interface %s",
  213|      1|					__func__, option_type, option_len,
  214|      1|					&src_addr, ifp->name);
  215|      1|			break;
  216|    949|		default:
  ------------------
  |  Branch (216:3): [True: 949, False: 16.9k]
  ------------------
  217|    949|			if (PIM_DEBUG_PIM_HELLO)
  ------------------
  |  |  160|    949|#define PIM_DEBUG_PIM_HELLO (router->debugs & PIM_MASK_PIM_HELLO)
  |  |  ------------------
  |  |  |  |   87|    949|#define PIM_MASK_PIM_HELLO           (1 << 15)
  |  |  ------------------
  |  |  |  Branch (160:29): [True: 0, False: 949]
  |  |  ------------------
  ------------------
  218|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  219|  17.9k|					"%s: ignoring unknown PIM hello TLV type=%d length=%d from %pPAs on interface %s",
  220|  17.9k|					__func__, option_type, option_len,
  221|  17.9k|					&src_addr, ifp->name);
  222|  17.9k|		}
  223|       |
  224|  17.7k|		tlv_curr += option_len;
  225|  17.7k|	}
  226|       |
  227|       |	/*
  228|       |	  Check received PIM hello options
  229|       |	*/
  230|       |
  231|    328|	if (PIM_DEBUG_PIM_HELLO) {
  ------------------
  |  |  160|    328|#define PIM_DEBUG_PIM_HELLO (router->debugs & PIM_MASK_PIM_HELLO)
  |  |  ------------------
  |  |  |  |   87|    328|#define PIM_MASK_PIM_HELLO           (1 << 15)
  |  |  ------------------
  |  |  |  Branch (160:29): [True: 0, False: 328]
  |  |  ------------------
  ------------------
  232|      0|		tlv_trace_uint16(__func__, "holdtime", ifp->name, src_addr,
  233|      0|				 PIM_OPTION_IS_SET(hello_options,
  ------------------
  |  |   38|      0|#define PIM_OPTION_IS_SET(options, option_mask) ((options) & (option_mask))
  ------------------
  234|      0|						   PIM_OPTION_MASK_HOLDTIME),
  235|      0|				 hello_option_holdtime);
  236|      0|		tlv_trace_uint16(
  237|      0|			__func__, "propagation_delay", ifp->name, src_addr,
  238|      0|			PIM_OPTION_IS_SET(hello_options,
  ------------------
  |  |   38|      0|#define PIM_OPTION_IS_SET(options, option_mask) ((options) & (option_mask))
  ------------------
  239|      0|					  PIM_OPTION_MASK_LAN_PRUNE_DELAY),
  240|      0|			hello_option_propagation_delay);
  241|      0|		tlv_trace_uint16(
  242|      0|			__func__, "override_interval", ifp->name, src_addr,
  243|      0|			PIM_OPTION_IS_SET(hello_options,
  ------------------
  |  |   38|      0|#define PIM_OPTION_IS_SET(options, option_mask) ((options) & (option_mask))
  ------------------
  244|      0|					  PIM_OPTION_MASK_LAN_PRUNE_DELAY),
  245|      0|			hello_option_override_interval);
  246|      0|		tlv_trace_bool(
  247|      0|			__func__, "can_disable_join_suppression", ifp->name,
  248|      0|			src_addr,
  249|      0|			PIM_OPTION_IS_SET(hello_options,
  ------------------
  |  |   38|      0|#define PIM_OPTION_IS_SET(options, option_mask) ((options) & (option_mask))
  ------------------
  250|      0|					  PIM_OPTION_MASK_LAN_PRUNE_DELAY),
  251|      0|			PIM_OPTION_IS_SET(
  ------------------
  |  |   38|      0|#define PIM_OPTION_IS_SET(options, option_mask) ((options) & (option_mask))
  ------------------
  252|      0|				hello_options,
  253|      0|				PIM_OPTION_MASK_CAN_DISABLE_JOIN_SUPPRESSION));
  254|      0|		tlv_trace_uint32(__func__, "dr_priority", ifp->name, src_addr,
  255|      0|				 PIM_OPTION_IS_SET(hello_options,
  ------------------
  |  |   38|      0|#define PIM_OPTION_IS_SET(options, option_mask) ((options) & (option_mask))
  ------------------
  256|      0|						   PIM_OPTION_MASK_DR_PRIORITY),
  257|      0|				 hello_option_dr_priority);
  258|      0|		tlv_trace_uint32_hex(
  259|      0|			__func__, "generation_id", ifp->name, src_addr,
  260|      0|			PIM_OPTION_IS_SET(hello_options,
  ------------------
  |  |   38|      0|#define PIM_OPTION_IS_SET(options, option_mask) ((options) & (option_mask))
  ------------------
  261|      0|					  PIM_OPTION_MASK_GENERATION_ID),
  262|      0|			hello_option_generation_id);
  263|      0|		tlv_trace_list(__func__, "address_list", ifp->name, src_addr,
  264|      0|			       PIM_OPTION_IS_SET(hello_options,
  ------------------
  |  |   38|      0|#define PIM_OPTION_IS_SET(options, option_mask) ((options) & (option_mask))
  ------------------
  265|      0|						 PIM_OPTION_MASK_ADDRESS_LIST),
  266|      0|			       hello_option_addr_list);
  267|      0|	}
  268|       |
  269|    328|	if (!PIM_OPTION_IS_SET(hello_options, PIM_OPTION_MASK_HOLDTIME)) {
  ------------------
  |  |   38|    328|#define PIM_OPTION_IS_SET(options, option_mask) ((options) & (option_mask))
  ------------------
  |  Branch (269:6): [True: 319, False: 9]
  ------------------
  270|    319|		if (PIM_DEBUG_PIM_HELLO)
  ------------------
  |  |  160|    319|#define PIM_DEBUG_PIM_HELLO (router->debugs & PIM_MASK_PIM_HELLO)
  |  |  ------------------
  |  |  |  |   87|    319|#define PIM_MASK_PIM_HELLO           (1 << 15)
  |  |  ------------------
  |  |  |  Branch (160:29): [True: 0, False: 319]
  |  |  ------------------
  ------------------
  271|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  272|    319|				"%s: PIM hello missing holdtime from %pPAs on interface %s",
  273|    319|				__func__, &src_addr, ifp->name);
  274|    319|	}
  275|       |
  276|       |	/*
  277|       |	  New neighbor?
  278|       |	*/
  279|       |
  280|    328|	neigh = pim_neighbor_find(ifp, src_addr, false);
  281|    328|	if (!neigh) {
  ------------------
  |  Branch (281:6): [True: 143, False: 185]
  ------------------
  282|       |		/* Add as new neighbor */
  283|       |
  284|    143|		neigh = pim_neighbor_add(
  285|    143|			ifp, src_addr, hello_options, hello_option_holdtime,
  286|    143|			hello_option_propagation_delay,
  287|    143|			hello_option_override_interval,
  288|    143|			hello_option_dr_priority, hello_option_generation_id,
  289|    143|			hello_option_addr_list, PIM_NEIGHBOR_SEND_DELAY);
  ------------------
  |  |   47|    143|#define PIM_NEIGHBOR_SEND_DELAY 0
  ------------------
  290|    143|		if (!neigh) {
  ------------------
  |  Branch (290:7): [True: 0, False: 143]
  ------------------
  291|      0|			if (PIM_DEBUG_PIM_HELLO)
  ------------------
  |  |  160|      0|#define PIM_DEBUG_PIM_HELLO (router->debugs & PIM_MASK_PIM_HELLO)
  |  |  ------------------
  |  |  |  |   87|      0|#define PIM_MASK_PIM_HELLO           (1 << 15)
  |  |  ------------------
  |  |  |  Branch (160:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  292|      0|				zlog_warn(
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
  293|      0|					"%s: failure creating PIM neighbor %pPAs on interface %s",
  294|      0|					__func__, &src_addr, ifp->name);
  295|      0|			FREE_ADDR_LIST_THEN_RETURN(-8);
  ------------------
  |  |   88|      0|	{                                                                      \
  |  |   89|      0|		FREE_ADDR_LIST                                                 \
  |  |  ------------------
  |  |  |  |   83|      0|	if (hello_option_addr_list) {                                          \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (83:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   84|      0|		list_delete(&hello_option_addr_list);                          \
  |  |  |  |   85|      0|	}
  |  |  ------------------
  |  |   90|      0|		return (code);                                                 \
  |  |   91|      0|	}
  ------------------
  296|      0|		}
  297|       |		/* Forward BSM if required */
  298|    143|		if (!pim_bsm_new_nbr_fwd(neigh, ifp)) {
  ------------------
  |  Branch (298:7): [True: 143, False: 0]
  ------------------
  299|    143|			if (PIM_DEBUG_PIM_HELLO)
  ------------------
  |  |  160|    143|#define PIM_DEBUG_PIM_HELLO (router->debugs & PIM_MASK_PIM_HELLO)
  |  |  ------------------
  |  |  |  |   87|    143|#define PIM_MASK_PIM_HELLO           (1 << 15)
  |  |  ------------------
  |  |  |  Branch (160:29): [True: 0, False: 143]
  |  |  ------------------
  ------------------
  300|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  301|    143|					"%s: forwarding bsm to new nbr failed",
  302|    143|					__func__);
  303|    143|		}
  304|       |
  305|       |		/* actual addr list has been saved under neighbor */
  306|    143|		return 0;
  307|    143|	}
  308|       |
  309|       |	/*
  310|       |	  Received generation ID ?
  311|       |	*/
  312|       |
  313|    185|	if (PIM_OPTION_IS_SET(hello_options, PIM_OPTION_MASK_GENERATION_ID)) {
  ------------------
  |  |   38|    185|#define PIM_OPTION_IS_SET(options, option_mask) ((options) & (option_mask))
  |  |  ------------------
  |  |  |  Branch (38:49): [True: 71, False: 114]
  |  |  ------------------
  ------------------
  314|       |		/* GenID mismatch ? */
  315|     71|		if (!PIM_OPTION_IS_SET(neigh->hello_options,
  ------------------
  |  |   38|    142|#define PIM_OPTION_IS_SET(options, option_mask) ((options) & (option_mask))
  ------------------
  |  Branch (315:7): [True: 7, False: 64]
  ------------------
  316|     71|				       PIM_OPTION_MASK_GENERATION_ID)
  317|     68|		    || (hello_option_generation_id != neigh->generation_id)) {
  ------------------
  |  Branch (317:10): [True: 61, False: 3]
  ------------------
  318|       |			/* GenID mismatch, then replace neighbor */
  319|       |
  320|     68|			if (PIM_DEBUG_PIM_HELLO)
  ------------------
  |  |  160|     68|#define PIM_DEBUG_PIM_HELLO (router->debugs & PIM_MASK_PIM_HELLO)
  |  |  ------------------
  |  |  |  |   87|     68|#define PIM_MASK_PIM_HELLO           (1 << 15)
  |  |  ------------------
  |  |  |  Branch (160:29): [True: 0, False: 68]
  |  |  ------------------
  ------------------
  321|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  322|     68|					"%s: GenId mismatch new=%08x old=%08x: replacing neighbor %pPAs on %s",
  323|     68|					__func__, hello_option_generation_id,
  324|     68|					neigh->generation_id, &src_addr,
  325|     68|					ifp->name);
  326|       |
  327|     68|			pim_upstream_rpf_genid_changed(pim_ifp->pim,
  328|     68|						       neigh->source_addr);
  329|       |
  330|     68|			pim_neighbor_delete(ifp, neigh, "GenID mismatch");
  331|     68|			neigh = pim_neighbor_add(ifp, src_addr, hello_options,
  332|     68|						 hello_option_holdtime,
  333|     68|						 hello_option_propagation_delay,
  334|     68|						 hello_option_override_interval,
  335|     68|						 hello_option_dr_priority,
  336|     68|						 hello_option_generation_id,
  337|     68|						 hello_option_addr_list,
  338|     68|						 PIM_NEIGHBOR_SEND_NOW);
  ------------------
  |  |   48|     68|#define PIM_NEIGHBOR_SEND_NOW   1
  ------------------
  339|     68|			if (!neigh) {
  ------------------
  |  Branch (339:8): [True: 0, False: 68]
  ------------------
  340|      0|				if (PIM_DEBUG_PIM_HELLO)
  ------------------
  |  |  160|      0|#define PIM_DEBUG_PIM_HELLO (router->debugs & PIM_MASK_PIM_HELLO)
  |  |  ------------------
  |  |  |  |   87|      0|#define PIM_MASK_PIM_HELLO           (1 << 15)
  |  |  ------------------
  |  |  |  Branch (160:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  341|      0|					zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  342|      0|						"%s: failure re-creating PIM neighbor %pPAs on interface %s",
  343|      0|						__func__, &src_addr, ifp->name);
  344|      0|				FREE_ADDR_LIST_THEN_RETURN(-9);
  ------------------
  |  |   88|      0|	{                                                                      \
  |  |   89|      0|		FREE_ADDR_LIST                                                 \
  |  |  ------------------
  |  |  |  |   83|      0|	if (hello_option_addr_list) {                                          \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (83:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   84|      0|		list_delete(&hello_option_addr_list);                          \
  |  |  |  |   85|      0|	}
  |  |  ------------------
  |  |   90|      0|		return (code);                                                 \
  |  |   91|      0|	}
  ------------------
  345|      0|			}
  346|       |			/* Forward BSM if required */
  347|     68|			if (!pim_bsm_new_nbr_fwd(neigh, ifp)) {
  ------------------
  |  Branch (347:8): [True: 68, False: 0]
  ------------------
  348|     68|				if (PIM_DEBUG_PIM_HELLO)
  ------------------
  |  |  160|     68|#define PIM_DEBUG_PIM_HELLO (router->debugs & PIM_MASK_PIM_HELLO)
  |  |  ------------------
  |  |  |  |   87|     68|#define PIM_MASK_PIM_HELLO           (1 << 15)
  |  |  ------------------
  |  |  |  Branch (160:29): [True: 0, False: 68]
  |  |  ------------------
  ------------------
  349|      0|					zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  350|     68|						"%s: forwarding bsm to new nbr failed",
  351|     68|						__func__);
  352|     68|			}
  353|       |			/* actual addr list is saved under neighbor */
  354|     68|			return 0;
  355|       |
  356|     68|		} /* GenId mismatch: replace neighbor */
  357|       |
  358|     71|	} /* GenId received */
  359|       |
  360|       |	/*
  361|       |	  Update existing neighbor
  362|       |	*/
  363|       |
  364|    117|	pim_neighbor_update(neigh, hello_options, hello_option_holdtime,
  365|    117|			    hello_option_dr_priority, hello_option_addr_list);
  366|       |	/* actual addr list is saved under neighbor */
  367|    117|	return 0;
  368|    185|}
pim_hello_build_tlv:
  375|    154|{
  376|    154|	uint8_t *curr = tlv_buf;
  377|    154|	uint8_t *pastend = tlv_buf + tlv_buf_size;
  378|    154|	uint8_t *tmp;
  379|    154|#if PIM_IPV == 4
  380|    154|	struct pim_interface *pim_ifp = ifp->info;
  381|    154|	struct pim_instance *pim = pim_ifp->pim;
  382|    154|#endif
  383|       |
  384|       |	/*
  385|       |	 * Append options
  386|       |	 */
  387|       |
  388|       |	/* Holdtime */
  389|    154|	curr = pim_tlv_append_uint16(curr, pastend,
  390|    154|				     PIM_MSG_OPTION_TYPE_HOLDTIME, holdtime);
  ------------------
  |  |   16|    154|#define PIM_MSG_OPTION_TYPE_HOLDTIME         (1)
  ------------------
  391|    154|	if (!curr) {
  ------------------
  |  Branch (391:6): [True: 0, False: 154]
  ------------------
  392|      0|		if (PIM_DEBUG_PIM_HELLO) {
  ------------------
  |  |  160|      0|#define PIM_DEBUG_PIM_HELLO (router->debugs & PIM_MASK_PIM_HELLO)
  |  |  ------------------
  |  |  |  |   87|      0|#define PIM_MASK_PIM_HELLO           (1 << 15)
  |  |  ------------------
  |  |  |  Branch (160:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  393|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  394|      0|				"%s: could not set PIM hello Holdtime option for interface %s",
  395|      0|				__func__, ifp->name);
  396|      0|		}
  397|      0|		return -1;
  398|      0|	}
  399|       |
  400|       |	/* LAN Prune Delay */
  401|    154|	tmp = pim_tlv_append_2uint16(curr, pastend,
  402|    154|				     PIM_MSG_OPTION_TYPE_LAN_PRUNE_DELAY,
  ------------------
  |  |   17|    154|#define PIM_MSG_OPTION_TYPE_LAN_PRUNE_DELAY  (2)
  ------------------
  403|    154|				     propagation_delay, override_interval);
  404|    154|	if (!tmp) {
  ------------------
  |  Branch (404:6): [True: 0, False: 154]
  ------------------
  405|      0|		if (PIM_DEBUG_PIM_HELLO) {
  ------------------
  |  |  160|      0|#define PIM_DEBUG_PIM_HELLO (router->debugs & PIM_MASK_PIM_HELLO)
  |  |  ------------------
  |  |  |  |   87|      0|#define PIM_MASK_PIM_HELLO           (1 << 15)
  |  |  ------------------
  |  |  |  Branch (160:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  406|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  407|      0|				"%s: could not set PIM LAN Prune Delay option for interface %s",
  408|      0|				__func__, ifp->name);
  409|      0|		}
  410|      0|		return -1;
  411|      0|	}
  412|    154|	if (can_disable_join_suppression) {
  ------------------
  |  Branch (412:6): [True: 0, False: 154]
  ------------------
  413|      0|		*(curr + 4) |= 0x80; /* enable T bit */
  414|      0|	}
  415|    154|	curr = tmp;
  416|       |
  417|       |	/* DR Priority */
  418|    154|	curr = pim_tlv_append_uint32(
  419|    154|		curr, pastend, PIM_MSG_OPTION_TYPE_DR_PRIORITY, dr_priority);
  ------------------
  |  |   18|    154|#define PIM_MSG_OPTION_TYPE_DR_PRIORITY      (19)
  ------------------
  420|    154|	if (!curr) {
  ------------------
  |  Branch (420:6): [True: 0, False: 154]
  ------------------
  421|      0|		if (PIM_DEBUG_PIM_HELLO) {
  ------------------
  |  |  160|      0|#define PIM_DEBUG_PIM_HELLO (router->debugs & PIM_MASK_PIM_HELLO)
  |  |  ------------------
  |  |  |  |   87|      0|#define PIM_MASK_PIM_HELLO           (1 << 15)
  |  |  ------------------
  |  |  |  Branch (160:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  422|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  423|      0|				"%s: could not set PIM hello DR Priority option for interface %s",
  424|      0|				__func__, ifp->name);
  425|      0|		}
  426|      0|		return -2;
  427|      0|	}
  428|       |
  429|       |	/* Generation ID */
  430|    154|	curr = pim_tlv_append_uint32(curr, pastend,
  431|    154|				     PIM_MSG_OPTION_TYPE_GENERATION_ID,
  ------------------
  |  |   19|    154|#define PIM_MSG_OPTION_TYPE_GENERATION_ID    (20)
  ------------------
  432|    154|				     generation_id);
  433|    154|	if (!curr) {
  ------------------
  |  Branch (433:6): [True: 0, False: 154]
  ------------------
  434|      0|		if (PIM_DEBUG_PIM_HELLO) {
  ------------------
  |  |  160|      0|#define PIM_DEBUG_PIM_HELLO (router->debugs & PIM_MASK_PIM_HELLO)
  |  |  ------------------
  |  |  |  |   87|      0|#define PIM_MASK_PIM_HELLO           (1 << 15)
  |  |  ------------------
  |  |  |  Branch (160:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  435|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  436|      0|				"%s: could not set PIM hello Generation ID option for interface %s",
  437|      0|				__func__, ifp->name);
  438|      0|		}
  439|      0|		return -3;
  440|      0|	}
  441|       |
  442|       |	/* Secondary Address List */
  443|    154|	if (ifp->connected->count) {
  ------------------
  |  Branch (443:6): [True: 154, False: 0]
  ------------------
  444|    154|		curr = pim_tlv_append_addrlist_ucast(curr, pastend, ifp,
  445|    154|						     PIM_AF);
  ------------------
  |  |   19|    154|#define PIM_AF		AF_INET
  ------------------
  446|    154|		if (!curr) {
  ------------------
  |  Branch (446:7): [True: 0, False: 154]
  ------------------
  447|      0|			if (PIM_DEBUG_PIM_HELLO) {
  ------------------
  |  |  160|      0|#define PIM_DEBUG_PIM_HELLO (router->debugs & PIM_MASK_PIM_HELLO)
  |  |  ------------------
  |  |  |  |   87|      0|#define PIM_MASK_PIM_HELLO           (1 << 15)
  |  |  ------------------
  |  |  |  Branch (160:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  448|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  449|      0|					"%s: could not set PIM hello %s Secondary Address List option for interface %s",
  450|      0|					__func__, PIM_AF_NAME, ifp->name);
  451|      0|			}
  452|      0|			return -4;
  453|      0|		}
  454|    154|#if PIM_IPV == 4
  455|    154|		if (pim->send_v6_secondary) {
  ------------------
  |  Branch (455:7): [True: 154, False: 0]
  ------------------
  456|    154|			curr = pim_tlv_append_addrlist_ucast(curr, pastend, ifp,
  457|    154|							     AF_INET6);
  458|    154|			if (!curr) {
  ------------------
  |  Branch (458:8): [True: 0, False: 154]
  ------------------
  459|      0|				if (PIM_DEBUG_PIM_HELLO) {
  ------------------
  |  |  160|      0|#define PIM_DEBUG_PIM_HELLO (router->debugs & PIM_MASK_PIM_HELLO)
  |  |  ------------------
  |  |  |  |   87|      0|#define PIM_MASK_PIM_HELLO           (1 << 15)
  |  |  ------------------
  |  |  |  Branch (160:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  460|      0|					zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  461|      0|						"%s: could not sent PIM hello v6 secondary Address List option for interface %s",
  462|      0|						__func__, ifp->name);
  463|      0|				}
  464|      0|				return -4;
  465|      0|			}
  466|    154|		}
  467|    154|#endif
  468|    154|	}
  469|       |
  470|    154|	return curr - tlv_buf;
  471|    154|}
pim_hello_require:
  483|    724|{
  484|    724|	struct pim_interface *pim_ifp;
  485|       |
  486|    724|	assert(ifp);
  ------------------
  |  |   51|    724|	({                                                                     \
  |  |   52|    724|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|    724|			(used)) = {                                            \
  |  |   54|    724|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|    724|	{                                                                      \
  |  |  |  |  284|    724|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|    724|		/* .type = */ (type_),                                         \
  |  |  |  |  286|    724|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|    724|		/* .func = */ func_,                                           \
  |  |  |  |  289|    724|	}                                                                      \
  |  |  ------------------
  |  |   55|    724|			.expr = #expr_,                                        \
  |  |   56|    724|		};                                                             \
  |  |   57|    724|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|    724|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|    724|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|    724|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|    724|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 724]
  |  |  |  Branch (58:24): [True: 724, False: 0]
  |  |  ------------------
  |  |   59|    724|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|    724|	})
  ------------------
  487|       |
  488|    724|	pim_ifp = ifp->info;
  489|       |
  490|    724|	assert(pim_ifp);
  ------------------
  |  |   51|    724|	({                                                                     \
  |  |   52|    724|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|    724|			(used)) = {                                            \
  |  |   54|    724|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|    724|	{                                                                      \
  |  |  |  |  284|    724|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|    724|		/* .type = */ (type_),                                         \
  |  |  |  |  286|    724|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|    724|		/* .func = */ func_,                                           \
  |  |  |  |  289|    724|	}                                                                      \
  |  |  ------------------
  |  |   55|    724|			.expr = #expr_,                                        \
  |  |   56|    724|		};                                                             \
  |  |   57|    724|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|    724|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|    724|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|    724|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|    724|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 724]
  |  |  |  Branch (58:24): [True: 724, False: 0]
  |  |  ------------------
  |  |   59|    724|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|    724|	})
  ------------------
  491|       |
  492|    724|	if (PIM_IF_FLAG_TEST_HELLO_SENT(pim_ifp->flags))
  ------------------
  |  |   37|    724|#define PIM_IF_FLAG_TEST_HELLO_SENT(flags) ((flags)&PIM_IF_FLAG_HELLO_SENT)
  |  |  ------------------
  |  |  |  |   35|    724|#define PIM_IF_FLAG_HELLO_SENT (1 << 0)
  |  |  ------------------
  |  |  |  Branch (37:44): [True: 638, False: 86]
  |  |  ------------------
  ------------------
  493|    638|		return;
  494|       |
  495|     86|	pim_hello_restart_now(ifp); /* Send hello and restart timer */
  496|     86|}

pim_if_init:
   50|      1|{
   51|      1|	int i;
   52|       |
   53|     33|	for (i = 0; i < MAXVIFS; i++)
  ------------------
  |  |   43|     33|#define MAXVIFS 32
  ------------------
  |  Branch (53:14): [True: 32, False: 1]
  ------------------
   54|     32|		pim->iface_vif_index[i] = 0;
   55|      1|}
pim_if_new:
  107|      2|{
  108|      2|	struct pim_interface *pim_ifp;
  109|       |
  110|      2|	assert(ifp);
  ------------------
  |  |   51|      2|	({                                                                     \
  |  |   52|      2|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|      2|			(used)) = {                                            \
  |  |   54|      2|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|      2|	{                                                                      \
  |  |  |  |  284|      2|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      2|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      2|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      2|		/* .func = */ func_,                                           \
  |  |  |  |  289|      2|	}                                                                      \
  |  |  ------------------
  |  |   55|      2|			.expr = #expr_,                                        \
  |  |   56|      2|		};                                                             \
  |  |   57|      2|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      2|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      2|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      2|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|      2|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 2]
  |  |  |  Branch (58:24): [True: 2, False: 0]
  |  |  ------------------
  |  |   59|      2|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|      2|	})
  ------------------
  111|      2|	assert(!ifp->info);
  ------------------
  |  |   51|      2|	({                                                                     \
  |  |   52|      2|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|      2|			(used)) = {                                            \
  |  |   54|      2|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|      2|	{                                                                      \
  |  |  |  |  284|      2|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      2|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      2|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      2|		/* .func = */ func_,                                           \
  |  |  |  |  289|      2|	}                                                                      \
  |  |  ------------------
  |  |   55|      2|			.expr = #expr_,                                        \
  |  |   56|      2|		};                                                             \
  |  |   57|      2|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      2|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      2|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      2|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|      2|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 2]
  |  |  |  Branch (58:24): [True: 2, False: 0]
  |  |  ------------------
  |  |   59|      2|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|      2|	})
  ------------------
  112|       |
  113|      2|	pim_ifp = XCALLOC(MTYPE_PIM_INTERFACE, sizeof(*pim_ifp));
  ------------------
  |  |  165|      2|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  114|       |
  115|      2|	pim_ifp->pim = ifp->vrf->info;
  116|      2|	pim_ifp->mroute_vif_index = -1;
  117|       |
  118|      2|	pim_ifp->igmp_version = IGMP_DEFAULT_VERSION;
  ------------------
  |  |   46|      2|#define IGMP_DEFAULT_VERSION (3)
  ------------------
  119|      2|	pim_ifp->mld_version = MLD_DEFAULT_VERSION;
  ------------------
  |  |   19|      2|#define MLD_DEFAULT_VERSION 2
  ------------------
  120|      2|	pim_ifp->gm_default_robustness_variable =
  121|      2|		GM_DEFAULT_ROBUSTNESS_VARIABLE;
  ------------------
  |  |  252|      2|#define GM_DEFAULT_ROBUSTNESS_VARIABLE 2
  ------------------
  122|      2|	pim_ifp->gm_default_query_interval = GM_GENERAL_QUERY_INTERVAL;
  ------------------
  |  |  256|      2|#define GM_GENERAL_QUERY_INTERVAL 125
  ------------------
  123|      2|	pim_ifp->gm_query_max_response_time_dsec =
  124|      2|		GM_QUERY_MAX_RESPONSE_TIME_DSEC;
  ------------------
  |  |  260|      2|#define GM_QUERY_MAX_RESPONSE_TIME_DSEC 100
  ------------------
  125|      2|	pim_ifp->gm_specific_query_max_response_time_dsec =
  126|      2|		GM_SPECIFIC_QUERY_MAX_RESPONSE_TIME_DSEC;
  ------------------
  |  |  266|      2|#define GM_SPECIFIC_QUERY_MAX_RESPONSE_TIME_DSEC 10
  ------------------
  127|      2|	pim_ifp->gm_last_member_query_count = GM_DEFAULT_ROBUSTNESS_VARIABLE;
  ------------------
  |  |  252|      2|#define GM_DEFAULT_ROBUSTNESS_VARIABLE 2
  ------------------
  128|       |
  129|       |	/* BSM config on interface: true by default */
  130|      2|	pim_ifp->bsm_enable = true;
  131|      2|	pim_ifp->ucast_bsm_accept = true;
  132|      2|	pim_ifp->am_i_dr = false;
  133|       |
  134|       |	/*
  135|       |	  RFC 3376: 8.3. Query Response Interval
  136|       |	  The number of seconds represented by the [Query Response Interval]
  137|       |	  must be less than the [Query Interval].
  138|       |	 */
  139|      2|	assert(pim_ifp->gm_query_max_response_time_dsec <
  ------------------
  |  |   51|      2|	({                                                                     \
  |  |   52|      2|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|      2|			(used)) = {                                            \
  |  |   54|      2|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|      2|	{                                                                      \
  |  |  |  |  284|      2|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      2|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      2|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      2|		/* .func = */ func_,                                           \
  |  |  |  |  289|      2|	}                                                                      \
  |  |  ------------------
  |  |   55|      2|			.expr = #expr_,                                        \
  |  |   56|      2|		};                                                             \
  |  |   57|      2|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      2|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      2|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      2|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|      2|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 2]
  |  |  |  Branch (58:24): [True: 2, False: 0]
  |  |  ------------------
  |  |   59|      2|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|      2|	})
  ------------------
  140|      2|	       pim_ifp->gm_default_query_interval);
  141|       |
  142|      2|	pim_ifp->pim_enable = pim;
  143|      2|	pim_ifp->pim_passive_enable = false;
  144|      2|	pim_ifp->gm_enable = gm;
  145|       |
  146|      2|	pim_ifp->gm_join_list = NULL;
  147|      2|	pim_ifp->pim_neighbor_list = NULL;
  148|      2|	pim_ifp->upstream_switch_list = NULL;
  149|      2|	pim_ifp->pim_generation_id = 0;
  150|       |
  151|       |	/* list of struct gm_sock */
  152|      2|	pim_igmp_if_init(pim_ifp, ifp);
  153|       |
  154|       |	/* list of struct pim_neighbor */
  155|      2|	pim_ifp->pim_neighbor_list = list_new();
  156|      2|	pim_ifp->pim_neighbor_list->del = (void (*)(void *))pim_neighbor_free;
  157|       |
  158|      2|	pim_ifp->upstream_switch_list = list_new();
  159|      2|	pim_ifp->upstream_switch_list->del =
  160|      2|		(void (*)(void *))pim_jp_agg_group_list_free;
  161|      2|	pim_ifp->upstream_switch_list->cmp = pim_jp_agg_group_list_cmp;
  162|       |
  163|      2|	pim_ifp->sec_addr_list = list_new();
  164|      2|	pim_ifp->sec_addr_list->del = (void (*)(void *))pim_sec_addr_free;
  165|      2|	pim_ifp->sec_addr_list->cmp =
  166|      2|		(int (*)(void *, void *))pim_sec_addr_comp;
  167|       |
  168|      2|	pim_ifp->activeactive = false;
  169|       |
  170|      2|	RB_INIT(pim_ifchannel_rb, &pim_ifp->ifchannel_rb);
  ------------------
  |  |  508|      2|#define RB_INIT(_name, _head)		_name##_RB_INIT(_head)
  ------------------
  171|       |
  172|      2|	ifp->info = pim_ifp;
  173|       |
  174|      2|	pim_sock_reset(ifp);
  175|       |
  176|      2|	pim_if_add_vif(ifp, ispimreg, is_vxlan_term);
  177|      2|	pim_ifp->pim->mcast_if_count++;
  178|       |
  179|      2|	return pim_ifp;
  180|      2|}
pim_if_update_could_assert:
  220|      7|{
  221|      7|	struct pim_interface *pim_ifp;
  222|      7|	struct pim_ifchannel *ch;
  223|       |
  224|      7|	pim_ifp = ifp->info;
  225|      7|	assert(pim_ifp);
  ------------------
  |  |   51|      7|	({                                                                     \
  |  |   52|      7|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|      7|			(used)) = {                                            \
  |  |   54|      7|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|      7|	{                                                                      \
  |  |  |  |  284|      7|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      7|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      7|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      7|		/* .func = */ func_,                                           \
  |  |  |  |  289|      7|	}                                                                      \
  |  |  ------------------
  |  |   55|      7|			.expr = #expr_,                                        \
  |  |   56|      7|		};                                                             \
  |  |   57|      7|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      7|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      7|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      7|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|      7|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 7]
  |  |  |  Branch (58:24): [True: 7, False: 0]
  |  |  ------------------
  |  |   59|      7|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|      7|	})
  ------------------
  226|       |
  227|      7|	RB_FOREACH (ch, pim_ifchannel_rb, &pim_ifp->ifchannel_rb) {
  ------------------
  |  |  529|      7|	for ((_e) = RB_MIN(_name, (_head)); (_e) != NULL;                      \
  |  |  ------------------
  |  |  |  |  515|      7|#define RB_MIN(_name, _head)		_name##_RB_MIN(_head)
  |  |  ------------------
  |  |  |  Branch (529:38): [True: 0, False: 7]
  |  |  ------------------
  |  |  530|      7|	     (_e) = RB_NEXT(_name, (_e)))
  |  |  ------------------
  |  |  |  |  517|      0|#define RB_NEXT(_name, _elm)		_name##_RB_NEXT(_elm)
  |  |  ------------------
  ------------------
  228|      0|		pim_ifchannel_update_could_assert(ch);
  229|      0|	}
  230|      7|}
pim_find_primary_addr:
  862|      2|{
  863|      2|	struct connected *ifc;
  864|      2|	struct listnode *node;
  865|      2|	struct pim_interface *pim_ifp = ifp->info;
  866|       |
  867|      2|	if (pim_ifp && !pim_addr_is_any(pim_ifp->update_source))
  ------------------
  |  Branch (867:6): [True: 2, False: 0]
  |  Branch (867:17): [True: 0, False: 2]
  ------------------
  868|      0|		return pim_ifp->update_source;
  869|       |
  870|       |#if PIM_IPV == 6
  871|       |	if (pim_ifp && !pim_addr_is_any(pim_ifp->ll_highest))
  872|       |		return pim_ifp->ll_highest;
  873|       |
  874|       |	pim_addr best_addr = PIMADDR_ANY;
  875|       |
  876|       |	for (ALL_LIST_ELEMENTS_RO(ifp->connected, node, ifc)) {
  877|       |		pim_addr addr;
  878|       |
  879|       |		if (ifc->address->family != AF_INET6)
  880|       |			continue;
  881|       |
  882|       |		addr = pim_addr_from_prefix(ifc->address);
  883|       |		if (!IN6_IS_ADDR_LINKLOCAL(&addr))
  884|       |			continue;
  885|       |		if (pim_addr_cmp(addr, best_addr) > 0)
  886|       |			best_addr = addr;
  887|       |	}
  888|       |
  889|       |	return best_addr;
  890|       |#else
  891|      2|	int v4_addrs = 0;
  892|      2|	int v6_addrs = 0;
  893|       |
  894|      2|	for (ALL_LIST_ELEMENTS_RO(ifp->connected, node, ifc)) {
  ------------------
  |  |  333|      2|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|      2|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 2, 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|      2|	(node) = listnextnode(node), ((data) = NULL)
  |  |  ------------------
  |  |  |  |   49|      0|#define listnextnode(X) ((X) ? ((X)->next) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  895|      1|		switch (ifc->address->family) {
  896|      1|		case AF_INET:
  ------------------
  |  Branch (896:3): [True: 1, False: 0]
  ------------------
  897|      1|			v4_addrs++;
  898|      1|			break;
  899|      0|		case AF_INET6:
  ------------------
  |  Branch (899:3): [True: 0, False: 1]
  ------------------
  900|      0|			v6_addrs++;
  901|      0|			break;
  902|      0|		default:
  ------------------
  |  Branch (902:3): [True: 0, False: 1]
  ------------------
  903|      0|			continue;
  904|      1|		}
  905|       |
  906|      1|		if (CHECK_FLAG(ifc->flags, ZEBRA_IFA_SECONDARY))
  ------------------
  |  |  394|      1|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  907|      0|			continue;
  908|       |
  909|      1|		if (ifc->address->family != PIM_AF)
  ------------------
  |  |   19|      1|#define PIM_AF		AF_INET
  ------------------
  |  Branch (909:7): [True: 0, False: 1]
  ------------------
  910|      0|			continue;
  911|       |
  912|      1|		return pim_addr_from_prefix(ifc->address);
  913|      1|	}
  914|       |
  915|       |	/*
  916|       |	 * If we have no v4_addrs and v6 is configured
  917|       |	 * We probably are using unnumbered
  918|       |	 * So let's grab the loopbacks v4 address
  919|       |	 * and use that as the primary address
  920|       |	 */
  921|      1|	if (!v4_addrs && v6_addrs) {
  ------------------
  |  Branch (921:6): [True: 1, False: 0]
  |  Branch (921:19): [True: 0, False: 1]
  ------------------
  922|      0|		struct interface *lo_ifp;
  923|       |
  924|       |		// DBS - Come back and check here
  925|      0|		if (ifp->vrf->vrf_id == VRF_DEFAULT)
  ------------------
  |  |  254|      0|#define VRF_DEFAULT 0
  ------------------
  |  Branch (925:7): [True: 0, False: 0]
  ------------------
  926|      0|			lo_ifp = if_lookup_by_name("lo", ifp->vrf->vrf_id);
  927|      0|		else
  928|      0|			lo_ifp = if_lookup_by_name(ifp->vrf->name,
  929|      0|						   ifp->vrf->vrf_id);
  930|       |
  931|      0|		if (lo_ifp && (lo_ifp != ifp))
  ------------------
  |  Branch (931:7): [True: 0, False: 0]
  |  Branch (931:17): [True: 0, False: 0]
  ------------------
  932|      0|			return pim_find_primary_addr(lo_ifp);
  933|      0|	}
  934|      1|	return PIMADDR_ANY;
  ------------------
  |  |   79|      1|#define PIMADDR_ANY (pim_addr){ }
  ------------------
  935|      1|#endif
  936|      1|}
pim_if_add_vif:
  964|      2|{
  965|      2|	struct pim_interface *pim_ifp = ifp->info;
  966|      2|	pim_addr ifaddr;
  967|      2|	unsigned char flags = 0;
  968|       |
  969|      2|	assert(pim_ifp);
  ------------------
  |  |   51|      2|	({                                                                     \
  |  |   52|      2|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|      2|			(used)) = {                                            \
  |  |   54|      2|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|      2|	{                                                                      \
  |  |  |  |  284|      2|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      2|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      2|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      2|		/* .func = */ func_,                                           \
  |  |  |  |  289|      2|	}                                                                      \
  |  |  ------------------
  |  |   55|      2|			.expr = #expr_,                                        \
  |  |   56|      2|		};                                                             \
  |  |   57|      2|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      2|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      2|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      2|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|      2|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 2]
  |  |  |  Branch (58:24): [True: 2, False: 0]
  |  |  ------------------
  |  |   59|      2|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|      2|	})
  ------------------
  970|       |
  971|      2|	if (pim_ifp->mroute_vif_index > 0) {
  ------------------
  |  Branch (971:6): [True: 0, False: 2]
  ------------------
  972|      0|		zlog_warn("%s: vif_index=%d > 0 on interface %s ifindex=%d",
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
  973|      0|			  __func__, pim_ifp->mroute_vif_index, ifp->name,
  974|      0|			  ifp->ifindex);
  975|      0|		return -1;
  976|      0|	}
  977|       |
  978|      2|	if (ifp->ifindex < 0) {
  ------------------
  |  Branch (978:6): [True: 0, False: 2]
  ------------------
  979|      0|		zlog_warn("%s: ifindex=%d < 0 on interface %s", __func__,
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
  980|      0|			  ifp->ifindex, ifp->name);
  981|      0|		return -2;
  982|      2|	} else if ((ifp->ifindex == PIM_OIF_PIM_REGISTER_VIF) &&
  ------------------
  |  |   40|      2|#define PIM_OIF_PIM_REGISTER_VIF   0
  ------------------
  |  Branch (982:13): [True: 1, False: 1]
  ------------------
  983|      1|		   ((strncmp(ifp->name, "pimreg", 6)) &&
  ------------------
  |  Branch (983:7): [True: 0, False: 1]
  ------------------
  984|      0|		    (strncmp(ifp->name, "pim6reg", 7)))) {
  ------------------
  |  Branch (984:7): [True: 0, False: 0]
  ------------------
  985|      0|		zlog_warn("%s: ifindex=%d on interface %s", __func__,
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
  986|      0|			  ifp->ifindex, ifp->name);
  987|      0|		return -2;
  988|      0|	}
  989|       |
  990|      2|	ifaddr = pim_ifp->primary_address;
  991|      2|#if PIM_IPV != 6
  992|       |	/* IPv6 API is always by interface index */
  993|      2|	if (!ispimreg && !is_vxlan_term && pim_addr_is_any(ifaddr)) {
  ------------------
  |  Branch (993:6): [True: 1, False: 1]
  |  Branch (993:19): [True: 1, False: 0]
  |  Branch (993:37): [True: 0, False: 1]
  ------------------
  994|      0|		zlog_warn(
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
  995|      0|			"%s: could not get address for interface %s ifindex=%d",
  996|      0|			__func__, ifp->name, ifp->ifindex);
  997|      0|		return -4;
  998|      0|	}
  999|      2|#endif
 1000|       |
 1001|      2|	pim_ifp->mroute_vif_index = pim_iface_next_vif_index(ifp);
 1002|       |
 1003|      2|	if (pim_ifp->mroute_vif_index >= MAXVIFS) {
  ------------------
  |  |   43|      2|#define MAXVIFS 32
  ------------------
  |  Branch (1003:6): [True: 0, False: 2]
  ------------------
 1004|      0|		zlog_warn(
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
 1005|      0|			"%s: Attempting to configure more than MAXVIFS=%d on pim enabled interface %s",
 1006|      0|			__func__, MAXVIFS, ifp->name);
 1007|      0|		return -3;
 1008|      0|	}
 1009|       |
 1010|      2|	if (ifp->ifindex == PIM_OIF_PIM_REGISTER_VIF)
  ------------------
  |  |   40|      2|#define PIM_OIF_PIM_REGISTER_VIF   0
  ------------------
  |  Branch (1010:6): [True: 1, False: 1]
  ------------------
 1011|      1|		flags = VIFF_REGISTER;
  ------------------
  |  |   81|      1|#define VIFF_REGISTER		0x4	/* register vif	*/
  ------------------
 1012|      1|#ifdef VIFF_USE_IFINDEX
 1013|      1|	else
 1014|      1|		flags = VIFF_USE_IFINDEX;
  ------------------
  |  |   82|      1|#define VIFF_USE_IFINDEX	0x8	/* use vifc_lcl_ifindex instead of
  ------------------
 1015|      2|#endif
 1016|       |
 1017|      2|	if (pim_mroute_add_vif(ifp, ifaddr, flags)) {
  ------------------
  |  Branch (1017:6): [True: 0, False: 2]
  ------------------
 1018|       |		/* pim_mroute_add_vif reported error */
 1019|      0|		return -5;
 1020|      0|	}
 1021|       |
 1022|      2|	pim_ifp->pim->iface_vif_index[pim_ifp->mroute_vif_index] = 1;
 1023|       |
 1024|      2|	if (!ispimreg)
  ------------------
  |  Branch (1024:6): [True: 1, False: 1]
  ------------------
 1025|      1|		gm_ifp_update(ifp);
 1026|       |
 1027|       |	/* if the device qualifies as pim_vxlan iif/oif update vxlan entries */
 1028|      2|	pim_vxlan_add_vif(ifp);
 1029|      2|	return 0;
 1030|      2|}
pim_if_lan_delay_enabled:
 1095|  91.0k|{
 1096|  91.0k|	struct pim_interface *pim_ifp;
 1097|       |
 1098|  91.0k|	pim_ifp = ifp->info;
 1099|  91.0k|	assert(pim_ifp);
  ------------------
  |  |   51|  91.0k|	({                                                                     \
  |  |   52|  91.0k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  91.0k|			(used)) = {                                            \
  |  |   54|  91.0k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  91.0k|	{                                                                      \
  |  |  |  |  284|  91.0k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  91.0k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  91.0k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  91.0k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  91.0k|	}                                                                      \
  |  |  ------------------
  |  |   55|  91.0k|			.expr = #expr_,                                        \
  |  |   56|  91.0k|		};                                                             \
  |  |   57|  91.0k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  91.0k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  91.0k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  91.0k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  91.0k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 91.0k]
  |  |  |  Branch (58:24): [True: 91.0k, False: 0]
  |  |  ------------------
  |  |   59|  91.0k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  91.0k|	})
  ------------------
 1100|  91.0k|	assert(pim_ifp->pim_number_of_nonlandelay_neighbors >= 0);
  ------------------
  |  |   51|  91.0k|	({                                                                     \
  |  |   52|  91.0k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  91.0k|			(used)) = {                                            \
  |  |   54|  91.0k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  91.0k|	{                                                                      \
  |  |  |  |  284|  91.0k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  91.0k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  91.0k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  91.0k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  91.0k|	}                                                                      \
  |  |  ------------------
  |  |   55|  91.0k|			.expr = #expr_,                                        \
  |  |   56|  91.0k|		};                                                             \
  |  |   57|  91.0k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  91.0k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  91.0k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  91.0k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  91.0k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 91.0k]
  |  |  |  Branch (58:24): [True: 91.0k, False: 0]
  |  |  ------------------
  |  |   59|  91.0k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  91.0k|	})
  ------------------
 1101|       |
 1102|  91.0k|	return pim_ifp->pim_number_of_nonlandelay_neighbors == 0;
 1103|  91.0k|}
pim_if_effective_propagation_delay_msec:
 1106|  45.4k|{
 1107|  45.4k|	if (pim_if_lan_delay_enabled(ifp)) {
  ------------------
  |  Branch (1107:6): [True: 0, False: 45.4k]
  ------------------
 1108|      0|		struct pim_interface *pim_ifp;
 1109|      0|		pim_ifp = ifp->info;
 1110|      0|		return pim_ifp->pim_neighbors_highest_propagation_delay_msec;
 1111|  45.4k|	} else {
 1112|  45.4k|		return PIM_DEFAULT_PROPAGATION_DELAY_MSEC;
  ------------------
  |  |   20|  45.4k|#define PIM_DEFAULT_PROPAGATION_DELAY_MSEC       (500)  /* RFC 4601: 4.11.  Timer Values */
  ------------------
 1113|  45.4k|	}
 1114|  45.4k|}
pim_if_effective_override_interval_msec:
 1117|  45.4k|{
 1118|  45.4k|	if (pim_if_lan_delay_enabled(ifp)) {
  ------------------
  |  Branch (1118:6): [True: 0, False: 45.4k]
  ------------------
 1119|      0|		struct pim_interface *pim_ifp;
 1120|      0|		pim_ifp = ifp->info;
 1121|      0|		return pim_ifp->pim_neighbors_highest_override_interval_msec;
 1122|  45.4k|	} else {
 1123|  45.4k|		return PIM_DEFAULT_OVERRIDE_INTERVAL_MSEC;
  ------------------
  |  |   21|  45.4k|#define PIM_DEFAULT_OVERRIDE_INTERVAL_MSEC       (2500) /* RFC 4601: 4.11.  Timer Values */
  ------------------
 1124|  45.4k|	}
 1125|  45.4k|}
pim_if_jp_override_interval_msec:
 1142|  45.4k|{
 1143|  45.4k|	return pim_if_effective_propagation_delay_msec(ifp)
 1144|  45.4k|	       + pim_if_effective_override_interval_msec(ifp);
 1145|  45.4k|}
pim_if_assert_on_neighbor_down:
 1417|     68|{
 1418|     68|	struct pim_interface *pim_ifp;
 1419|     68|	struct pim_ifchannel *ch;
 1420|       |
 1421|     68|	pim_ifp = ifp->info;
 1422|     68|	assert(pim_ifp);
  ------------------
  |  |   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|	})
  ------------------
 1423|       |
 1424|  3.24k|	RB_FOREACH (ch, pim_ifchannel_rb, &pim_ifp->ifchannel_rb) {
  ------------------
  |  |  529|  3.31k|	for ((_e) = RB_MIN(_name, (_head)); (_e) != NULL;                      \
  |  |  ------------------
  |  |  |  |  515|     68|#define RB_MIN(_name, _head)		_name##_RB_MIN(_head)
  |  |  ------------------
  |  |  |  Branch (529:38): [True: 3.24k, False: 68]
  |  |  ------------------
  |  |  530|  3.24k|	     (_e) = RB_NEXT(_name, (_e)))
  |  |  ------------------
  |  |  |  |  517|  3.24k|#define RB_NEXT(_name, _elm)		_name##_RB_NEXT(_elm)
  |  |  ------------------
  ------------------
 1425|       |		/* Is (S,G,I) assert loser ? */
 1426|  3.24k|		if (ch->ifassert_state != PIM_IFASSERT_I_AM_LOSER)
  ------------------
  |  Branch (1426:7): [True: 3.24k, False: 2]
  ------------------
 1427|  3.24k|			continue;
 1428|       |		/* Dead neighbor was winner ? */
 1429|      2|		if (pim_addr_cmp(ch->ifassert_winner, neigh_addr))
  ------------------
  |  Branch (1429:7): [True: 2, False: 0]
  ------------------
 1430|      2|			continue;
 1431|       |
 1432|      0|		assert_action_a5(ch);
 1433|      0|	}
 1434|     68|}
pim_if_update_join_desired:
 1437|      7|{
 1438|      7|	struct pim_ifchannel *ch;
 1439|       |
 1440|       |	/* clear off flag from interface's upstreams */
 1441|      7|	RB_FOREACH (ch, pim_ifchannel_rb, &pim_ifp->ifchannel_rb) {
  ------------------
  |  |  529|      7|	for ((_e) = RB_MIN(_name, (_head)); (_e) != NULL;                      \
  |  |  ------------------
  |  |  |  |  515|      7|#define RB_MIN(_name, _head)		_name##_RB_MIN(_head)
  |  |  ------------------
  |  |  |  Branch (529:38): [True: 0, False: 7]
  |  |  ------------------
  |  |  530|      7|	     (_e) = RB_NEXT(_name, (_e)))
  |  |  ------------------
  |  |  |  |  517|      0|#define RB_NEXT(_name, _elm)		_name##_RB_NEXT(_elm)
  |  |  ------------------
  ------------------
 1442|      0|		PIM_UPSTREAM_FLAG_UNSET_DR_JOIN_DESIRED_UPDATED(
  ------------------
  |  |  159|      0|	((flags) &=                                                            \
  |  |  160|      0|	 (typeof((flags))) ~PIM_UPSTREAM_FLAG_MASK_DR_JOIN_DESIRED_UPDATED)
  |  |  ------------------
  |  |  |  |   19|      0|#define PIM_UPSTREAM_FLAG_MASK_DR_JOIN_DESIRED_UPDATED (1 << 1)
  |  |  ------------------
  ------------------
 1443|      0|			ch->upstream->flags);
 1444|      0|	}
 1445|       |
 1446|       |	/* scan per-interface (S,G,I) state on this I interface */
 1447|      7|	RB_FOREACH (ch, pim_ifchannel_rb, &pim_ifp->ifchannel_rb) {
  ------------------
  |  |  529|      7|	for ((_e) = RB_MIN(_name, (_head)); (_e) != NULL;                      \
  |  |  ------------------
  |  |  |  |  515|      7|#define RB_MIN(_name, _head)		_name##_RB_MIN(_head)
  |  |  ------------------
  |  |  |  Branch (529:38): [True: 0, False: 7]
  |  |  ------------------
  |  |  530|      7|	     (_e) = RB_NEXT(_name, (_e)))
  |  |  ------------------
  |  |  |  |  517|      0|#define RB_NEXT(_name, _elm)		_name##_RB_NEXT(_elm)
  |  |  ------------------
  ------------------
 1448|      0|		struct pim_upstream *up = ch->upstream;
 1449|       |
 1450|      0|		if (PIM_UPSTREAM_FLAG_TEST_DR_JOIN_DESIRED_UPDATED(up->flags))
  ------------------
  |  |   88|      0|#define PIM_UPSTREAM_FLAG_TEST_DR_JOIN_DESIRED_UPDATED(flags) ((flags) & PIM_UPSTREAM_FLAG_MASK_DR_JOIN_DESIRED_UPDATED)
  |  |  ------------------
  |  |  |  |   19|      0|#define PIM_UPSTREAM_FLAG_MASK_DR_JOIN_DESIRED_UPDATED (1 << 1)
  |  |  ------------------
  |  |  |  Branch (88:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1451|      0|			continue;
 1452|       |
 1453|       |		/* update join_desired for the global (S,G) state */
 1454|      0|		pim_upstream_update_join_desired(pim_ifp->pim, up);
 1455|      0|		PIM_UPSTREAM_FLAG_SET_DR_JOIN_DESIRED_UPDATED(up->flags);
  ------------------
  |  |  115|      0|	((flags) |=                                                            \
  |  |  116|      0|	 (typeof((flags)))PIM_UPSTREAM_FLAG_MASK_DR_JOIN_DESIRED_UPDATED)
  |  |  ------------------
  |  |  |  |   19|      0|#define PIM_UPSTREAM_FLAG_MASK_DR_JOIN_DESIRED_UPDATED (1 << 1)
  |  |  ------------------
  ------------------
 1456|      0|	}
 1457|      7|}
pim_if_update_assert_tracking_desired:
 1460|      7|{
 1461|      7|	struct pim_interface *pim_ifp;
 1462|      7|	struct pim_ifchannel *ch;
 1463|       |
 1464|      7|	pim_ifp = ifp->info;
 1465|      7|	if (!pim_ifp)
  ------------------
  |  Branch (1465:6): [True: 0, False: 7]
  ------------------
 1466|      0|		return;
 1467|       |
 1468|      7|	RB_FOREACH (ch, pim_ifchannel_rb, &pim_ifp->ifchannel_rb) {
  ------------------
  |  |  529|      7|	for ((_e) = RB_MIN(_name, (_head)); (_e) != NULL;                      \
  |  |  ------------------
  |  |  |  |  515|      7|#define RB_MIN(_name, _head)		_name##_RB_MIN(_head)
  |  |  ------------------
  |  |  |  Branch (529:38): [True: 0, False: 7]
  |  |  ------------------
  |  |  530|      7|	     (_e) = RB_NEXT(_name, (_e)))
  |  |  ------------------
  |  |  |  |  517|      0|#define RB_NEXT(_name, _elm)		_name##_RB_NEXT(_elm)
  |  |  ------------------
  ------------------
 1469|      0|		pim_ifchannel_update_assert_tracking_desired(ch);
 1470|      0|	}
 1471|      7|}
pim_if_create_pimreg:
 1479|      1|{
 1480|      1|	char pimreg_name[INTERFACE_NAMSIZ];
 1481|       |
 1482|      1|	if (!pim->regiface) {
  ------------------
  |  Branch (1482:6): [True: 1, False: 0]
  ------------------
 1483|      1|		if (pim->vrf->vrf_id == VRF_DEFAULT)
  ------------------
  |  |  254|      1|#define VRF_DEFAULT 0
  ------------------
  |  Branch (1483:7): [True: 1, False: 0]
  ------------------
 1484|      1|			strlcpy(pimreg_name, PIMREG, sizeof(pimreg_name));
  ------------------
  |  |   29|      1|#define PIMREG          "pimreg"
  ------------------
 1485|      0|		else
 1486|      0|			snprintf(pimreg_name, sizeof(pimreg_name), PIMREG "%u",
  ------------------
  |  |   29|      0|#define PIMREG          "pimreg"
  ------------------
 1487|      0|				 pim->vrf->data.l.table_id);
 1488|       |
 1489|      1|		pim->regiface = if_get_by_name(pimreg_name, pim->vrf->vrf_id,
 1490|      1|					       pim->vrf->name);
 1491|      1|		pim->regiface->ifindex = PIM_OIF_PIM_REGISTER_VIF;
  ------------------
  |  |   40|      1|#define PIM_OIF_PIM_REGISTER_VIF   0
  ------------------
 1492|       |
 1493|      1|		if (!pim->regiface->info)
  ------------------
  |  Branch (1493:7): [True: 1, False: 0]
  ------------------
 1494|      1|			pim_if_new(pim->regiface, false, false, true,
 1495|      1|				   false /*vxlan_term*/);
 1496|       |
 1497|       |		/*
 1498|       |		 * On vrf moves we delete the interface if there
 1499|       |		 * is nothing going on with it.  We cannot have
 1500|       |		 * the pimregiface deleted.
 1501|       |		 */
 1502|      1|		pim->regiface->configured = true;
 1503|       |
 1504|      1|	}
 1505|      1|}
pim_if_connected_to_source:
 1508|  12.9M|{
 1509|  12.9M|	struct listnode *cnode;
 1510|  12.9M|	struct connected *c;
 1511|  12.9M|	struct prefix p;
 1512|       |
 1513|  12.9M|	if (!ifp)
  ------------------
  |  Branch (1513:6): [True: 12.9M, False: 0]
  ------------------
 1514|  12.9M|		return NULL;
 1515|       |
 1516|      0|	pim_addr_to_prefix(&p, src);
 1517|       |
 1518|      0|	for (ALL_LIST_ELEMENTS_RO(ifp->connected, cnode, c)) {
  ------------------
  |  |  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]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1519|      0|		if (c->address->family != PIM_AF)
  ------------------
  |  |   19|      0|#define PIM_AF		AF_INET
  ------------------
  |  Branch (1519:7): [True: 0, False: 0]
  ------------------
 1520|      0|			continue;
 1521|      0|		if (prefix_match(c->address, &p))
  ------------------
  |  Branch (1521:7): [True: 0, False: 0]
  ------------------
 1522|      0|			return c->address;
 1523|      0|		if (CONNECTED_PEER(c) && prefix_match(c->destination, &p))
  ------------------
  |  |  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]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1523:28): [True: 0, False: 0]
  ------------------
 1524|       |			/* this is not a typo, on PtP we need to return the
 1525|       |			 * *local* address that lines up with src.
 1526|       |			 */
 1527|      0|			return c->address;
 1528|      0|	}
 1529|       |
 1530|      0|	return NULL;
 1531|      0|}
pim_iface.c:pim_iface_next_vif_index:
  939|      2|{
  940|      2|	struct pim_interface *pim_ifp = ifp->info;
  941|      2|	struct pim_instance *pim = pim_ifp->pim;
  942|      2|	int i;
  943|       |
  944|       |	/*
  945|       |	 * The pimreg vif is always going to be in index 0
  946|       |	 * of the table.
  947|       |	 */
  948|      2|	if (ifp->ifindex == PIM_OIF_PIM_REGISTER_VIF)
  ------------------
  |  |   40|      2|#define PIM_OIF_PIM_REGISTER_VIF   0
  ------------------
  |  Branch (948:6): [True: 1, False: 1]
  ------------------
  949|      1|		return 0;
  950|       |
  951|      1|	for (i = 1; i < MAXVIFS; i++) {
  ------------------
  |  |   43|      1|#define MAXVIFS 32
  ------------------
  |  Branch (951:14): [True: 1, False: 0]
  ------------------
  952|      1|		if (pim->iface_vif_index[i] == 0)
  ------------------
  |  Branch (952:7): [True: 1, False: 0]
  ------------------
  953|      1|			return i;
  954|      1|	}
  955|      0|	return MAXVIFS;
  ------------------
  |  |   43|      0|#define MAXVIFS 32
  ------------------
  956|      1|}

pim_ifchannel_compare:
   40|  3.07M|{
   41|  3.07M|	struct pim_interface *pim_ifp1;
   42|  3.07M|	struct pim_interface *pim_ifp2;
   43|       |
   44|  3.07M|	pim_ifp1 = ch1->interface->info;
   45|  3.07M|	pim_ifp2 = ch2->interface->info;
   46|       |
   47|  3.07M|	if (pim_ifp1->mroute_vif_index < pim_ifp2->mroute_vif_index)
  ------------------
  |  Branch (47:6): [True: 0, False: 3.07M]
  ------------------
   48|      0|		return -1;
   49|       |
   50|  3.07M|	if (pim_ifp1->mroute_vif_index > pim_ifp2->mroute_vif_index)
  ------------------
  |  Branch (50:6): [True: 0, False: 3.07M]
  ------------------
   51|      0|		return 1;
   52|       |
   53|  3.07M|	return pim_sgaddr_cmp(ch1->sg, ch2->sg);
   54|  3.07M|}
pim_ifchannel_delete:
  102|  42.5k|{
  103|  42.5k|	struct pim_interface *pim_ifp;
  104|  42.5k|	struct pim_upstream *up;
  105|       |
  106|  42.5k|	pim_ifp = ch->interface->info;
  107|       |
  108|  42.5k|	if (PIM_DEBUG_PIM_TRACE)
  ------------------
  |  |  146|  42.5k|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|  42.5k|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|  42.5k|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 42.5k]
  |  |  ------------------
  ------------------
  109|      0|		zlog_debug("%s: ifchannel entry %s(%s) del start", __func__,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  110|  42.5k|			   ch->sg_str, ch->interface->name);
  111|       |
  112|  42.5k|	if (PIM_I_am_DualActive(pim_ifp)) {
  ------------------
  |  |   27|  42.5k|#define PIM_I_am_DualActive(pim_ifp) (pim_ifp)->activeactive == true
  |  |  ------------------
  |  |  |  Branch (27:38): [True: 0, False: 42.5k]
  |  |  ------------------
  ------------------
  113|      0|		if (PIM_DEBUG_MLAG)
  ------------------
  |  |  155|      0|#define PIM_DEBUG_MLAG (router->debugs & PIM_MASK_MLAG)
  |  |  ------------------
  |  |  |  |  100|      0|#define PIM_MASK_MLAG                (1 << 28)
  |  |  ------------------
  |  |  |  Branch (155:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  114|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  115|      0|				"%s: if-chnanel-%s is deleted from a Dual active Interface",
  116|      0|				__func__, ch->sg_str);
  117|       |		/* Post Delete only if it is the last Dual-active Interface */
  118|      0|		if (ch->upstream->dualactive_ifchannel_count == 1) {
  ------------------
  |  Branch (118:7): [True: 0, False: 0]
  ------------------
  119|      0|			pim_mlag_up_local_del(pim_ifp->pim, ch->upstream);
  120|      0|			PIM_UPSTREAM_FLAG_UNSET_MLAG_INTERFACE(
  ------------------
  |  |  201|      0|	((flags) &= (typeof((flags))) ~PIM_UPSTREAM_FLAG_MASK_MLAG_INTERFACE)
  |  |  ------------------
  |  |  |  |   82|      0|#define PIM_UPSTREAM_FLAG_MASK_MLAG_INTERFACE          (1 << 21)
  |  |  ------------------
  ------------------
  121|      0|				ch->upstream->flags);
  122|      0|		}
  123|      0|		ch->upstream->dualactive_ifchannel_count--;
  124|      0|	}
  125|       |
  126|  42.5k|	if (ch->upstream->channel_oil) {
  ------------------
  |  Branch (126:6): [True: 42.5k, False: 0]
  ------------------
  127|  42.5k|		uint32_t mask = PIM_OIF_FLAG_PROTO_PIM;
  ------------------
  |  |   23|  42.5k|#define PIM_OIF_FLAG_PROTO_PIM    (1 << 1)
  ------------------
  128|  42.5k|		if (ch->upstream->flags & PIM_UPSTREAM_FLAG_MASK_SRC_IGMP)
  ------------------
  |  |   21|  42.5k|#define PIM_UPSTREAM_FLAG_MASK_SRC_IGMP                (1 << 3)
  ------------------
  |  Branch (128:7): [True: 0, False: 42.5k]
  ------------------
  129|      0|			mask |= PIM_OIF_FLAG_PROTO_GM;
  ------------------
  |  |   22|      0|#define PIM_OIF_FLAG_PROTO_GM     (1 << 0)
  ------------------
  130|       |
  131|       |		/*
  132|       |		 * A S,G RPT channel can have an empty oil, we also
  133|       |		 * need to take into account the fact that a ifchannel
  134|       |		 * might have been suppressing a *,G ifchannel from
  135|       |		 * being inherited.  So let's figure out what
  136|       |		 * needs to be done here
  137|       |		 */
  138|  42.5k|		if (!pim_addr_is_any(ch->sg.src) &&
  ------------------
  |  Branch (138:7): [True: 42.5k, False: 0]
  ------------------
  139|  42.5k|		    pim_upstream_evaluate_join_desired_interface(
  ------------------
  |  Branch (139:7): [True: 42.5k, False: 0]
  ------------------
  140|  42.5k|			    ch->upstream, ch, ch->parent))
  141|  42.5k|			pim_channel_add_oif(ch->upstream->channel_oil,
  142|  42.5k|					ch->interface,
  143|  42.5k|					PIM_OIF_FLAG_PROTO_STAR,
  ------------------
  |  |   24|  42.5k|#define PIM_OIF_FLAG_PROTO_STAR   (1 << 2)
  ------------------
  144|  42.5k|					__func__);
  145|       |
  146|  42.5k|		pim_channel_del_oif(ch->upstream->channel_oil,
  147|  42.5k|					ch->interface, mask, __func__);
  148|       |		/*
  149|       |		 * Do we have any S,G's that are inheriting?
  150|       |		 * Nuke from on high too.
  151|       |		 */
  152|  42.5k|		if (ch->upstream->sources) {
  ------------------
  |  Branch (152:7): [True: 0, False: 42.5k]
  ------------------
  153|      0|			struct pim_upstream *child;
  154|      0|			struct listnode *up_node;
  155|       |
  156|      0|			for (ALL_LIST_ELEMENTS_RO(ch->upstream->sources,
  ------------------
  |  |  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]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  157|      0|						  up_node, child))
  158|      0|				pim_channel_del_inherited_oif(
  159|      0|						child->channel_oil,
  160|      0|						ch->interface,
  161|      0|						__func__);
  162|      0|		}
  163|  42.5k|	}
  164|       |
  165|       |	/*
  166|       |	 * When this channel is removed
  167|       |	 * we need to find all our children
  168|       |	 * and make sure our pointers are fixed
  169|       |	 */
  170|  42.5k|	pim_ifchannel_remove_children(ch);
  171|       |
  172|  42.5k|	if (ch->sources)
  ------------------
  |  Branch (172:6): [True: 0, False: 42.5k]
  ------------------
  173|      0|		list_delete(&ch->sources);
  174|       |
  175|  42.5k|	listnode_delete(ch->upstream->ifchannels, ch);
  176|       |
  177|  42.5k|	up = ch->upstream;
  178|       |
  179|       |	/* upstream is common across ifchannels, check if upstream's
  180|       |	   ifchannel list is empty before deleting upstream_del
  181|       |	   ref count will take care of it.
  182|       |	*/
  183|  42.5k|	if (ch->upstream->ref_count > 0)
  ------------------
  |  Branch (183:6): [True: 42.5k, False: 0]
  ------------------
  184|  42.5k|		up = pim_upstream_del(pim_ifp->pim, ch->upstream, __func__);
  185|       |
  186|      0|	else {
  187|      0|		if (PIM_DEBUG_PIM_TRACE)
  ------------------
  |  |  146|      0|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|      0|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|      0|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  188|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  189|      0|				"%s: Avoiding deletion of upstream with ref_count %d from ifchannel(%s): %s",
  190|      0|				__func__, ch->upstream->ref_count,
  191|      0|				ch->interface->name, ch->sg_str);
  192|      0|	}
  193|       |
  194|  42.5k|	ch->upstream = NULL;
  195|       |
  196|  42.5k|	EVENT_OFF(ch->t_ifjoin_expiry_timer);
  ------------------
  |  |  164|  42.5k|	do {                                                                   \
  |  |  165|  42.5k|		if ((thread))                                                  \
  |  |  ------------------
  |  |  |  Branch (165:7): [True: 0, False: 42.5k]
  |  |  ------------------
  |  |  166|  42.5k|			event_cancel(&(thread));                               \
  |  |  167|  42.5k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (167:11): [Folded, False: 42.5k]
  |  |  ------------------
  ------------------
  197|  42.5k|	EVENT_OFF(ch->t_ifjoin_prune_pending_timer);
  ------------------
  |  |  164|  42.5k|	do {                                                                   \
  |  |  165|  42.5k|		if ((thread))                                                  \
  |  |  ------------------
  |  |  |  Branch (165:7): [True: 0, False: 42.5k]
  |  |  ------------------
  |  |  166|  42.5k|			event_cancel(&(thread));                               \
  |  |  167|  42.5k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (167:11): [Folded, False: 42.5k]
  |  |  ------------------
  ------------------
  198|  42.5k|	EVENT_OFF(ch->t_ifassert_timer);
  ------------------
  |  |  164|  42.5k|	do {                                                                   \
  |  |  165|  42.5k|		if ((thread))                                                  \
  |  |  ------------------
  |  |  |  Branch (165:7): [True: 0, False: 42.5k]
  |  |  ------------------
  |  |  166|  42.5k|			event_cancel(&(thread));                               \
  |  |  167|  42.5k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (167:11): [Folded, False: 42.5k]
  |  |  ------------------
  ------------------
  199|       |
  200|  42.5k|	if (ch->parent) {
  ------------------
  |  Branch (200:6): [True: 42.5k, False: 0]
  ------------------
  201|  42.5k|		listnode_delete(ch->parent->sources, ch);
  202|  42.5k|		ch->parent = NULL;
  203|  42.5k|	}
  204|       |
  205|  42.5k|	RB_REMOVE(pim_ifchannel_rb, &pim_ifp->ifchannel_rb, ch);
  ------------------
  |  |  510|  42.5k|#define RB_REMOVE(_name, _head, _elm)	_name##_RB_REMOVE(_head, _elm)
  ------------------
  206|       |
  207|  42.5k|	if (PIM_DEBUG_PIM_TRACE)
  ------------------
  |  |  146|  42.5k|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|  42.5k|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|  42.5k|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 42.5k]
  |  |  ------------------
  ------------------
  208|      0|		zlog_debug("%s: ifchannel entry %s(%s) is deleted ", __func__,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  209|  42.5k|			   ch->sg_str, ch->interface->name);
  210|       |
  211|  42.5k|	XFREE(MTYPE_PIM_IFCHANNEL, ch);
  ------------------
  |  |  170|  42.5k|	do {                                                                   \
  |  |  171|  42.5k|		qfree(mtype, ptr);                                             \
  |  |  172|  42.5k|		ptr = NULL;                                                    \
  |  |  173|  42.5k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 42.5k]
  |  |  ------------------
  ------------------
  212|       |
  213|  42.5k|	if (up)
  ------------------
  |  Branch (213:6): [True: 0, False: 42.5k]
  ------------------
  214|      0|		pim_upstream_update_join_desired(pim_ifp->pim, up);
  215|  42.5k|}
delete_on_noinfo:
  235|  42.5k|{
  236|  42.5k|	if (ch->local_ifmembership == PIM_IFMEMBERSHIP_NOINFO
  ------------------
  |  Branch (236:6): [True: 42.5k, False: 0]
  ------------------
  237|  42.5k|	    && ch->ifjoin_state == PIM_IFJOIN_NOINFO
  ------------------
  |  Branch (237:9): [True: 42.5k, False: 0]
  ------------------
  238|  42.5k|	    && ch->t_ifjoin_expiry_timer == NULL)
  ------------------
  |  Branch (238:9): [True: 42.5k, False: 0]
  ------------------
  239|  42.5k|		pim_ifchannel_delete(ch);
  240|  42.5k|}
pim_ifchannel_ifjoin_switch:
  244|  8.25k|{
  245|  8.25k|	enum pim_ifjoin_state old_state = ch->ifjoin_state;
  246|  8.25k|	struct pim_interface *pim_ifp = ch->interface->info;
  247|  8.25k|	struct pim_ifchannel *child_ch;
  248|       |
  249|  8.25k|	if (PIM_DEBUG_PIM_EVENTS)
  ------------------
  |  |  137|  8.25k|#define PIM_DEBUG_PIM_EVENTS (router->debugs & PIM_MASK_PIM_EVENTS)
  |  |  ------------------
  |  |  |  |   72|  8.25k|#define PIM_MASK_PIM_EVENTS          (1 << 0)
  |  |  ------------------
  |  |  |  Branch (137:30): [True: 0, False: 8.25k]
  |  |  ------------------
  ------------------
  250|      0|		zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  251|  8.25k|			"PIM_IFCHANNEL(%s): %s is switching from %s to %s",
  252|  8.25k|			ch->interface->name, ch->sg_str,
  253|  8.25k|			pim_ifchannel_ifjoin_name(ch->ifjoin_state, ch->flags),
  254|  8.25k|			pim_ifchannel_ifjoin_name(new_state, 0));
  255|       |
  256|       |
  257|  8.25k|	if (old_state == new_state) {
  ------------------
  |  Branch (257:6): [True: 0, False: 8.25k]
  ------------------
  258|      0|		if (PIM_DEBUG_PIM_EVENTS) {
  ------------------
  |  |  137|      0|#define PIM_DEBUG_PIM_EVENTS (router->debugs & PIM_MASK_PIM_EVENTS)
  |  |  ------------------
  |  |  |  |   72|      0|#define PIM_MASK_PIM_EVENTS          (1 << 0)
  |  |  ------------------
  |  |  |  Branch (137:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  259|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  260|      0|				"%s called by %s: non-transition on state %d (%s)",
  261|      0|				__func__, caller, new_state,
  262|      0|				pim_ifchannel_ifjoin_name(new_state, 0));
  263|      0|		}
  264|      0|		return;
  265|      0|	}
  266|       |
  267|  8.25k|	ch->ifjoin_state = new_state;
  268|       |
  269|  8.25k|	if (pim_addr_is_any(ch->sg.src)) {
  ------------------
  |  Branch (269:6): [True: 4.81k, False: 3.43k]
  ------------------
  270|  4.81k|		struct pim_upstream *up = ch->upstream;
  271|  4.81k|		struct pim_upstream *child;
  272|  4.81k|		struct listnode *up_node;
  273|       |
  274|  4.81k|		if (up) {
  ------------------
  |  Branch (274:7): [True: 4.81k, False: 0]
  ------------------
  275|  4.81k|			if (ch->ifjoin_state == PIM_IFJOIN_NOINFO) {
  ------------------
  |  Branch (275:8): [True: 0, False: 4.81k]
  ------------------
  276|      0|				for (ALL_LIST_ELEMENTS_RO(up->sources, up_node,
  ------------------
  |  |  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]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  277|      0|							  child)) {
  278|      0|					struct channel_oil *c_oil =
  279|      0|						child->channel_oil;
  280|       |
  281|      0|					if (PIM_DEBUG_PIM_TRACE)
  ------------------
  |  |  146|      0|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|      0|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|      0|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  282|      0|						zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  283|      0|							"%s %s: Prune(S,G)=%s from %s",
  284|      0|							__FILE__, __func__,
  285|      0|							child->sg_str,
  286|      0|							up->sg_str);
  287|      0|					if (!c_oil)
  ------------------
  |  Branch (287:10): [True: 0, False: 0]
  ------------------
  288|      0|						continue;
  289|       |
  290|       |					/*
  291|       |					 * If the S,G has no if channel and the
  292|       |					 * c_oil still
  293|       |					 * has output here then the *,G was
  294|       |					 * supplying the implied
  295|       |					 * if channel.  So remove it.
  296|       |					 */
  297|      0|					if (oil_if_has(c_oil,
  ------------------
  |  Branch (297:10): [True: 0, False: 0]
  ------------------
  298|      0|						       pim_ifp->mroute_vif_index))
  299|      0|						pim_channel_del_inherited_oif(
  300|      0|							c_oil, ch->interface,
  301|      0|							__func__);
  302|      0|				}
  303|      0|			}
  304|  4.81k|			if (ch->ifjoin_state == PIM_IFJOIN_JOIN) {
  ------------------
  |  Branch (304:8): [True: 2.42k, False: 2.39k]
  ------------------
  305|  2.42k|				for (ALL_LIST_ELEMENTS_RO(up->sources, up_node,
  ------------------
  |  |  333|  2.42k|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|  2.42k|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 2.42k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|  25.2k|	(node) != NULL && ((data) = static_cast(data, listgetdata(node)), 1);  \
  |  |  ------------------
  |  |  |  |  204|  75.6k|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 12.6k, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 12.6k]
  |  |  |  |  |  Branch (204:28): [True: 12.6k, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 12.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (334:2): [True: 12.6k, False: 2.42k]
  |  |  |  Branch (334:20): [True: 12.6k, False: 0]
  |  |  ------------------
  |  |  335|  12.6k|	(node) = listnextnode(node), ((data) = NULL)
  |  |  ------------------
  |  |  |  |   49|  12.6k|#define listnextnode(X) ((X) ? ((X)->next) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:26): [True: 12.6k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  306|  12.6k|							  child)) {
  307|  12.6k|					if (PIM_DEBUG_PIM_TRACE)
  ------------------
  |  |  146|  12.6k|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|  12.6k|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|  12.6k|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 12.6k]
  |  |  ------------------
  ------------------
  308|      0|						zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  309|  12.6k|							"%s %s: Join(S,G)=%s from %s",
  310|  12.6k|							__FILE__, __func__,
  311|  12.6k|							child->sg_str,
  312|  12.6k|							up->sg_str);
  313|       |
  314|       |					/* check if the channel can be
  315|       |					 * inherited into the SG's OIL
  316|       |					 */
  317|  12.6k|					child_ch = pim_ifchannel_find(
  318|  12.6k|							ch->interface,
  319|  12.6k|							&child->sg);
  320|  12.6k|					if (pim_upstream_eval_inherit_if(
  ------------------
  |  Branch (320:10): [True: 8.23k, False: 4.36k]
  ------------------
  321|  12.6k|						    child, child_ch, ch)) {
  322|  8.23k|						pim_channel_add_oif(
  323|  8.23k|							child->channel_oil,
  324|  8.23k|							ch->interface,
  325|  8.23k|							PIM_OIF_FLAG_PROTO_STAR,
  ------------------
  |  |   24|  8.23k|#define PIM_OIF_FLAG_PROTO_STAR   (1 << 2)
  ------------------
  326|  8.23k|							__func__);
  327|  8.23k|						pim_upstream_update_join_desired(
  328|  8.23k|							pim_ifp->pim, child);
  329|  8.23k|					}
  330|  12.6k|				}
  331|  2.42k|			}
  332|  4.81k|		}
  333|  4.81k|	}
  334|       |	/* Transition to/from NOINFO ? */
  335|  8.25k|	if ((old_state == PIM_IFJOIN_NOINFO)
  ------------------
  |  Branch (335:6): [True: 1.46k, False: 6.78k]
  ------------------
  336|  6.78k|	    || (new_state == PIM_IFJOIN_NOINFO)) {
  ------------------
  |  Branch (336:9): [True: 379, False: 6.40k]
  ------------------
  337|       |
  338|  1.84k|		if (PIM_DEBUG_PIM_EVENTS) {
  ------------------
  |  |  137|  1.84k|#define PIM_DEBUG_PIM_EVENTS (router->debugs & PIM_MASK_PIM_EVENTS)
  |  |  ------------------
  |  |  |  |   72|  1.84k|#define PIM_MASK_PIM_EVENTS          (1 << 0)
  |  |  ------------------
  |  |  |  Branch (137:30): [True: 0, False: 1.84k]
  |  |  ------------------
  ------------------
  339|      0|			zlog_debug("PIM_IFCHANNEL_%s: (S,G)=%s on interface %s",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  340|      0|				   ((new_state == PIM_IFJOIN_NOINFO) ? "DOWN"
  341|      0|								     : "UP"),
  342|      0|				   ch->sg_str, ch->interface->name);
  343|      0|		}
  344|       |
  345|       |		/*
  346|       |		  Record uptime of state transition to/from NOINFO
  347|       |		*/
  348|  1.84k|		ch->ifjoin_creation = pim_time_monotonic_sec();
  349|       |
  350|  1.84k|		pim_upstream_update_join_desired(pim_ifp->pim, ch->upstream);
  351|  1.84k|		pim_ifchannel_update_could_assert(ch);
  352|  1.84k|		pim_ifchannel_update_assert_tracking_desired(ch);
  353|  1.84k|	}
  354|  8.25k|}
reset_ifassert_state:
  413|  43.2k|{
  414|  43.2k|	EVENT_OFF(ch->t_ifassert_timer);
  ------------------
  |  |  164|  43.2k|	do {                                                                   \
  |  |  165|  43.2k|		if ((thread))                                                  \
  |  |  ------------------
  |  |  |  Branch (165:7): [True: 0, False: 43.2k]
  |  |  ------------------
  |  |  166|  43.2k|			event_cancel(&(thread));                               \
  |  |  167|  43.2k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (167:11): [Folded, False: 43.2k]
  |  |  ------------------
  ------------------
  415|       |
  416|  43.2k|	pim_ifassert_winner_set(ch, PIM_IFASSERT_NOINFO, PIMADDR_ANY,
  ------------------
  |  |   79|  43.2k|#define PIMADDR_ANY (pim_addr){ }
  ------------------
  417|  43.2k|				router->infinite_assert_metric);
  418|  43.2k|}
pim_ifchannel_find:
  421|   338k|{
  422|   338k|	struct pim_interface *pim_ifp;
  423|   338k|	struct pim_ifchannel *ch;
  424|   338k|	struct pim_ifchannel lookup;
  425|       |
  426|   338k|	pim_ifp = ifp->info;
  427|       |
  428|   338k|	if (!pim_ifp) {
  ------------------
  |  Branch (428:6): [True: 0, False: 338k]
  ------------------
  429|      0|		zlog_warn("%s: (S,G)=%pSG: multicast not enabled on interface %s",
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
  430|      0|			  __func__, sg, ifp->name);
  431|      0|		return NULL;
  432|      0|	}
  433|       |
  434|   338k|	lookup.sg = *sg;
  435|   338k|	lookup.interface = ifp;
  436|   338k|	ch = RB_FIND(pim_ifchannel_rb, &pim_ifp->ifchannel_rb, &lookup);
  ------------------
  |  |  511|   338k|#define RB_FIND(_name, _head, _key)	_name##_RB_FIND(_head, _key)
  ------------------
  437|       |
  438|   338k|	return ch;
  439|   338k|}
pim_ifchannel_add:
  516|  59.7k|{
  517|  59.7k|	struct pim_interface *pim_ifp;
  518|  59.7k|	struct pim_ifchannel *ch;
  519|  59.7k|	struct pim_upstream *up;
  520|       |
  521|  59.7k|	ch = pim_ifchannel_find(ifp, sg);
  522|  59.7k|	if (ch) {
  ------------------
  |  Branch (522:6): [True: 16.4k, False: 43.2k]
  ------------------
  523|  16.4k|		if (up_flags == PIM_UPSTREAM_FLAG_MASK_SRC_PIM)
  ------------------
  |  |   22|  16.4k|#define PIM_UPSTREAM_FLAG_MASK_SRC_PIM                 (1 << 4)
  ------------------
  |  Branch (523:7): [True: 16.4k, False: 31]
  ------------------
  524|  16.4k|			PIM_IF_FLAG_SET_PROTO_PIM(ch->flags);
  ------------------
  |  |   66|  16.4k|	((flags) |= (typeof((flags)))PIM_IF_FLAG_MASK_PROTO_PIM)
  |  |  ------------------
  |  |  |  |   63|  16.4k|#define PIM_IF_FLAG_MASK_PROTO_PIM (1 << 3)
  |  |  ------------------
  ------------------
  525|       |
  526|  16.4k|		if (up_flags == PIM_UPSTREAM_FLAG_MASK_SRC_IGMP)
  ------------------
  |  |   21|  16.4k|#define PIM_UPSTREAM_FLAG_MASK_SRC_IGMP                (1 << 3)
  ------------------
  |  Branch (526:7): [True: 0, False: 16.4k]
  ------------------
  527|      0|			PIM_IF_FLAG_SET_PROTO_IGMP(ch->flags);
  ------------------
  |  |   75|      0|	((flags) |= (typeof((flags)))PIM_IF_FLAG_MASK_PROTO_IGMP)
  |  |  ------------------
  |  |  |  |   72|      0|#define PIM_IF_FLAG_MASK_PROTO_IGMP (1 << 4)
  |  |  ------------------
  ------------------
  528|       |
  529|  16.4k|		ch->upstream->flags |= up_flags;
  530|       |
  531|  16.4k|		return ch;
  532|  16.4k|	}
  533|       |
  534|  43.2k|	pim_ifp = ifp->info;
  535|       |
  536|  43.2k|	ch = XCALLOC(MTYPE_PIM_IFCHANNEL, sizeof(*ch));
  ------------------
  |  |  165|  43.2k|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  537|       |
  538|  43.2k|	ch->flags = 0;
  539|  43.2k|	if ((source_flags & PIM_ENCODE_RPT_BIT)
  ------------------
  |  |  214|  43.2k|#define PIM_ENCODE_RPT_BIT         0x01
  ------------------
  |  Branch (539:6): [True: 42.2k, False: 969]
  ------------------
  540|  42.2k|	    && !(source_flags & PIM_ENCODE_WC_BIT))
  ------------------
  |  |  213|  42.2k|#define PIM_ENCODE_WC_BIT          0x02
  ------------------
  |  Branch (540:9): [True: 42.2k, False: 51]
  ------------------
  541|  42.2k|		PIM_IF_FLAG_SET_S_G_RPT(ch->flags);
  ------------------
  |  |   56|  42.2k|	((flags) |= (typeof((flags)))PIM_IF_FLAG_MASK_S_G_RPT)
  |  |  ------------------
  |  |  |  |   53|  42.2k|#define PIM_IF_FLAG_MASK_S_G_RPT         (1 << 2)
  |  |  ------------------
  ------------------
  542|       |
  543|  43.2k|	ch->interface = ifp;
  544|  43.2k|	ch->sg = *sg;
  545|  43.2k|	snprintfrr(ch->sg_str, sizeof(ch->sg_str), "%pSG", sg);
  546|  43.2k|	ch->parent = pim_ifchannel_find_parent(ch);
  547|  43.2k|	if (pim_addr_is_any(ch->sg.src)) {
  ------------------
  |  Branch (547:6): [True: 172, False: 43.0k]
  ------------------
  548|    172|		ch->sources = list_new();
  549|    172|		ch->sources->cmp =
  550|    172|			(int (*)(void *, void *))pim_ifchannel_compare;
  551|    172|	} else
  552|  43.0k|		ch->sources = NULL;
  553|       |
  554|  43.2k|	pim_ifchannel_find_new_children(ch);
  555|  43.2k|	ch->local_ifmembership = PIM_IFMEMBERSHIP_NOINFO;
  556|       |
  557|  43.2k|	ch->ifjoin_state = PIM_IFJOIN_NOINFO;
  558|  43.2k|	ch->t_ifjoin_expiry_timer = NULL;
  559|  43.2k|	ch->t_ifjoin_prune_pending_timer = NULL;
  560|  43.2k|	ch->ifjoin_creation = 0;
  561|       |
  562|  43.2k|	RB_INSERT(pim_ifchannel_rb, &pim_ifp->ifchannel_rb, ch);
  ------------------
  |  |  509|  43.2k|#define RB_INSERT(_name, _head, _elm)	_name##_RB_INSERT(_head, _elm)
  ------------------
  563|       |
  564|  43.2k|	up = pim_upstream_add(pim_ifp->pim, sg, NULL, up_flags, __func__, ch);
  565|       |
  566|  43.2k|	ch->upstream = up;
  567|       |
  568|  43.2k|	listnode_add_sort(up->ifchannels, ch);
  569|       |
  570|  43.2k|	ch->ifassert_my_metric = pim_macro_ch_my_assert_metric_eval(ch);
  571|  43.2k|	ch->ifassert_winner_metric = pim_macro_ch_my_assert_metric_eval(ch);
  572|       |
  573|  43.2k|	ch->ifassert_winner = PIMADDR_ANY;
  ------------------
  |  |   79|  43.2k|#define PIMADDR_ANY (pim_addr){ }
  ------------------
  574|       |
  575|       |	/* Assert state */
  576|  43.2k|	ch->t_ifassert_timer = NULL;
  577|  43.2k|	ch->ifassert_state = PIM_IFASSERT_NOINFO;
  578|  43.2k|	reset_ifassert_state(ch);
  579|  43.2k|	if (pim_macro_ch_could_assert_eval(ch))
  ------------------
  |  Branch (579:6): [True: 0, False: 43.2k]
  ------------------
  580|      0|		PIM_IF_FLAG_SET_COULD_ASSERT(ch->flags);
  ------------------
  |  |   37|      0|	((flags) |= (typeof((flags)))PIM_IF_FLAG_MASK_COULD_ASSERT)
  |  |  ------------------
  |  |  |  |   34|      0|#define PIM_IF_FLAG_MASK_COULD_ASSERT (1 << 0)
  |  |  ------------------
  ------------------
  581|  43.2k|	else
  582|  43.2k|		PIM_IF_FLAG_UNSET_COULD_ASSERT(ch->flags);
  ------------------
  |  |   39|  43.2k|	((flags) &= (typeof((flags))) ~PIM_IF_FLAG_MASK_COULD_ASSERT)
  |  |  ------------------
  |  |  |  |   34|  43.2k|#define PIM_IF_FLAG_MASK_COULD_ASSERT (1 << 0)
  |  |  ------------------
  ------------------
  583|       |
  584|  43.2k|	if (pim_macro_assert_tracking_desired_eval(ch))
  ------------------
  |  Branch (584:6): [True: 0, False: 43.2k]
  ------------------
  585|      0|		PIM_IF_FLAG_SET_ASSERT_TRACKING_DESIRED(ch->flags);
  ------------------
  |  |   46|      0|	((flags) |= (typeof((flags)))PIM_IF_FLAG_MASK_ASSERT_TRACKING_DESIRED)
  |  |  ------------------
  |  |  |  |   43|      0|#define PIM_IF_FLAG_MASK_ASSERT_TRACKING_DESIRED (1 << 1)
  |  |  ------------------
  ------------------
  586|  43.2k|	else
  587|  43.2k|		PIM_IF_FLAG_UNSET_ASSERT_TRACKING_DESIRED(ch->flags);
  ------------------
  |  |   48|  43.2k|	((flags) &= (typeof((flags))) ~PIM_IF_FLAG_MASK_ASSERT_TRACKING_DESIRED)
  |  |  ------------------
  |  |  |  |   43|  43.2k|#define PIM_IF_FLAG_MASK_ASSERT_TRACKING_DESIRED (1 << 1)
  |  |  ------------------
  ------------------
  588|       |
  589|       |	/*
  590|       |	 * advertise MLAG Data to MLAG peer
  591|       |	 */
  592|  43.2k|	if (PIM_I_am_DualActive(pim_ifp)) {
  ------------------
  |  |   27|  43.2k|#define PIM_I_am_DualActive(pim_ifp) (pim_ifp)->activeactive == true
  |  |  ------------------
  |  |  |  Branch (27:38): [True: 0, False: 43.2k]
  |  |  ------------------
  ------------------
  593|      0|		up->dualactive_ifchannel_count++;
  594|       |		/* Sync once for upstream */
  595|      0|		if (up->dualactive_ifchannel_count == 1) {
  ------------------
  |  Branch (595:7): [True: 0, False: 0]
  ------------------
  596|      0|			PIM_UPSTREAM_FLAG_SET_MLAG_INTERFACE(up->flags);
  ------------------
  |  |  154|      0|	((flags) |= (typeof((flags)))PIM_UPSTREAM_FLAG_MASK_MLAG_INTERFACE)
  |  |  ------------------
  |  |  |  |   82|      0|#define PIM_UPSTREAM_FLAG_MASK_MLAG_INTERFACE          (1 << 21)
  |  |  ------------------
  ------------------
  597|      0|			pim_mlag_up_local_add(pim_ifp->pim, up);
  598|      0|		}
  599|      0|		if (PIM_DEBUG_MLAG)
  ------------------
  |  |  155|      0|#define PIM_DEBUG_MLAG (router->debugs & PIM_MASK_MLAG)
  |  |  ------------------
  |  |  |  |  100|      0|#define PIM_MASK_MLAG                (1 << 28)
  |  |  ------------------
  |  |  |  Branch (155:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  600|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  601|      0|				"%s: New Dual active if-chnanel is added to upstream:%s count:%d, flags:0x%x",
  602|      0|				__func__, up->sg_str,
  603|      0|				up->dualactive_ifchannel_count, up->flags);
  604|      0|	}
  605|       |
  606|  43.2k|	if (up_flags == PIM_UPSTREAM_FLAG_MASK_SRC_PIM)
  ------------------
  |  |   22|  43.2k|#define PIM_UPSTREAM_FLAG_MASK_SRC_PIM                 (1 << 4)
  ------------------
  |  Branch (606:6): [True: 43.1k, False: 118]
  ------------------
  607|  43.1k|		PIM_IF_FLAG_SET_PROTO_PIM(ch->flags);
  ------------------
  |  |   66|  43.1k|	((flags) |= (typeof((flags)))PIM_IF_FLAG_MASK_PROTO_PIM)
  |  |  ------------------
  |  |  |  |   63|  43.1k|#define PIM_IF_FLAG_MASK_PROTO_PIM (1 << 3)
  |  |  ------------------
  ------------------
  608|       |
  609|  43.2k|	if (up_flags == PIM_UPSTREAM_FLAG_MASK_SRC_IGMP)
  ------------------
  |  |   21|  43.2k|#define PIM_UPSTREAM_FLAG_MASK_SRC_IGMP                (1 << 3)
  ------------------
  |  Branch (609:6): [True: 0, False: 43.2k]
  ------------------
  610|      0|		PIM_IF_FLAG_SET_PROTO_IGMP(ch->flags);
  ------------------
  |  |   75|      0|	((flags) |= (typeof((flags)))PIM_IF_FLAG_MASK_PROTO_IGMP)
  |  |  ------------------
  |  |  |  |   72|      0|#define PIM_IF_FLAG_MASK_PROTO_IGMP (1 << 4)
  |  |  ------------------
  ------------------
  611|       |
  612|  43.2k|	if (PIM_DEBUG_PIM_TRACE)
  ------------------
  |  |  146|  43.2k|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|  43.2k|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|  43.2k|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 43.2k]
  |  |  ------------------
  ------------------
  613|      0|		zlog_debug("%s: ifchannel %s(%s) is created ", __func__,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  614|  43.2k|			   ch->sg_str, ch->interface->name);
  615|       |
  616|  43.2k|	return ch;
  617|  59.7k|}
pim_ifchannel_join_add:
  829|  6.56k|{
  830|  6.56k|	struct pim_interface *pim_ifp;
  831|  6.56k|	struct pim_ifchannel *ch;
  832|       |
  833|  6.56k|	if (nonlocal_upstream(1 /* join */, ifp, upstream, sg, source_flags,
  ------------------
  |  Branch (833:6): [True: 555, False: 6.00k]
  ------------------
  834|  6.56k|			      holdtime)) {
  835|    555|		return;
  836|    555|	}
  837|       |
  838|  6.00k|	ch = pim_ifchannel_add(ifp, sg, source_flags,
  839|  6.00k|			       PIM_UPSTREAM_FLAG_MASK_SRC_PIM);
  ------------------
  |  |   22|  6.00k|#define PIM_UPSTREAM_FLAG_MASK_SRC_PIM                 (1 << 4)
  ------------------
  840|       |
  841|       |	/*
  842|       |	  RFC 4601: 4.6.1.  (S,G) Assert Message State Machine
  843|       |
  844|       |	  Transitions from "I am Assert Loser" State
  845|       |
  846|       |	  Receive Join(S,G) on Interface I
  847|       |
  848|       |	  We receive a Join(S,G) that has the Upstream Neighbor Address
  849|       |	  field set to my primary IP address on interface I.  The action is
  850|       |	  to transition to NoInfo state, delete this (S,G) assert state
  851|       |	  (Actions A5 below), and allow the normal PIM Join/Prune mechanisms
  852|       |	  to operate.
  853|       |
  854|       |	  Notice: The nonlocal_upstream() test above ensures the upstream
  855|       |	  address of the join message is our primary address.
  856|       |	 */
  857|  6.00k|	if (ch->ifassert_state == PIM_IFASSERT_I_AM_LOSER) {
  ------------------
  |  Branch (857:6): [True: 4, False: 6.00k]
  ------------------
  858|      4|		zlog_warn("%s: Assert Loser recv Join%s from %pPA on %s",
  ------------------
  |  |  131|      4|#define zlog_warn(...) 0
  ------------------
  859|      4|			  __func__, ch->sg_str, &neigh_addr, ifp->name);
  860|       |
  861|      4|		assert_action_a5(ch);
  862|      4|	}
  863|       |
  864|  6.00k|	pim_ifp = ifp->info;
  865|  6.00k|	assert(pim_ifp);
  ------------------
  |  |   51|  6.00k|	({                                                                     \
  |  |   52|  6.00k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  6.00k|			(used)) = {                                            \
  |  |   54|  6.00k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  6.00k|	{                                                                      \
  |  |  |  |  284|  6.00k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  6.00k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  6.00k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  6.00k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  6.00k|	}                                                                      \
  |  |  ------------------
  |  |   55|  6.00k|			.expr = #expr_,                                        \
  |  |   56|  6.00k|		};                                                             \
  |  |   57|  6.00k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  6.00k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  6.00k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  6.00k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  6.00k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 6.00k]
  |  |  |  Branch (58:24): [True: 6.00k, False: 0]
  |  |  ------------------
  |  |   59|  6.00k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  6.00k|	})
  ------------------
  866|       |
  867|  6.00k|	switch (ch->ifjoin_state) {
  ------------------
  |  Branch (867:10): [True: 6.00k, False: 0]
  ------------------
  868|  1.46k|	case PIM_IFJOIN_NOINFO:
  ------------------
  |  Branch (868:2): [True: 1.46k, False: 4.54k]
  ------------------
  869|  1.46k|		pim_ifchannel_ifjoin_switch(__func__, ch, PIM_IFJOIN_JOIN);
  870|  1.46k|		if (pim_macro_chisin_oiflist(ch)) {
  ------------------
  |  Branch (870:7): [True: 0, False: 1.46k]
  ------------------
  871|      0|			pim_upstream_inherited_olist(pim_ifp->pim,
  872|      0|						     ch->upstream);
  873|      0|			pim_forward_start(ch);
  874|      0|		}
  875|       |		/*
  876|       |		 * If we are going to be a LHR, we need to note it
  877|       |		 */
  878|  1.46k|		if (ch->upstream->parent &&
  ------------------
  |  Branch (878:7): [True: 1.21k, False: 248]
  ------------------
  879|  1.21k|			(PIM_UPSTREAM_FLAG_TEST_CAN_BE_LHR(
  ------------------
  |  |  109|  1.21k|#define PIM_UPSTREAM_FLAG_TEST_CAN_BE_LHR(flags) ((flags) & (PIM_UPSTREAM_FLAG_MASK_SRC_IGMP | PIM_UPSTREAM_FLAG_MASK_SRC_VXLAN_TERM))
  |  |  ------------------
  |  |  |  |   21|  1.21k|#define PIM_UPSTREAM_FLAG_MASK_SRC_IGMP                (1 << 3)
  |  |  ------------------
  |  |               #define PIM_UPSTREAM_FLAG_TEST_CAN_BE_LHR(flags) ((flags) & (PIM_UPSTREAM_FLAG_MASK_SRC_IGMP | PIM_UPSTREAM_FLAG_MASK_SRC_VXLAN_TERM))
  |  |  ------------------
  |  |  |  |   53|  1.21k|#define PIM_UPSTREAM_FLAG_MASK_SRC_VXLAN_TERM          (1 << 15)
  |  |  ------------------
  ------------------
  |  Branch (879:4): [True: 0, False: 1.21k]
  ------------------
  880|  1.21k|						   ch->upstream->parent->flags))
  881|      0|		    && !(ch->upstream->flags
  ------------------
  |  Branch (881:10): [True: 0, False: 0]
  ------------------
  882|      0|			 & PIM_UPSTREAM_FLAG_MASK_SRC_LHR)) {
  ------------------
  |  |   26|      0|#define PIM_UPSTREAM_FLAG_MASK_SRC_LHR                 (1 << 8)
  ------------------
  883|      0|			pim_upstream_ref(ch->upstream,
  884|      0|					 PIM_UPSTREAM_FLAG_MASK_SRC_LHR,
  ------------------
  |  |   26|      0|#define PIM_UPSTREAM_FLAG_MASK_SRC_LHR                 (1 << 8)
  ------------------
  885|      0|					 __func__);
  886|      0|			pim_upstream_keep_alive_timer_start(
  887|      0|				ch->upstream, pim_ifp->pim->keep_alive_time);
  888|      0|		}
  889|  1.46k|		break;
  890|  1.31k|	case PIM_IFJOIN_JOIN:
  ------------------
  |  Branch (890:2): [True: 1.31k, False: 4.69k]
  ------------------
  891|  1.31k|		assert(!ch->t_ifjoin_prune_pending_timer);
  ------------------
  |  |   51|  1.31k|	({                                                                     \
  |  |   52|  1.31k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  1.31k|			(used)) = {                                            \
  |  |   54|  1.31k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  1.31k|	{                                                                      \
  |  |  |  |  284|  1.31k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  1.31k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  1.31k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  1.31k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  1.31k|	}                                                                      \
  |  |  ------------------
  |  |   55|  1.31k|			.expr = #expr_,                                        \
  |  |   56|  1.31k|		};                                                             \
  |  |   57|  1.31k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  1.31k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  1.31k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  1.31k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  1.31k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 1.31k]
  |  |  |  Branch (58:24): [True: 1.31k, False: 0]
  |  |  ------------------
  |  |   59|  1.31k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  1.31k|	})
  ------------------
  892|       |
  893|       |		/*
  894|       |		  In the JOIN state ch->t_ifjoin_expiry_timer may be NULL due to
  895|       |		  a
  896|       |		  previously received join message with holdtime=0xFFFF.
  897|       |		 */
  898|  1.31k|		if (ch->t_ifjoin_expiry_timer) {
  ------------------
  |  Branch (898:7): [True: 0, False: 1.31k]
  ------------------
  899|      0|			unsigned long remain = event_timer_remain_second(
  900|      0|				ch->t_ifjoin_expiry_timer);
  901|      0|			if (remain > holdtime) {
  ------------------
  |  Branch (901:8): [True: 0, False: 0]
  ------------------
  902|       |				/*
  903|       |				  RFC 4601: 4.5.3.  Receiving (S,G) Join/Prune
  904|       |				  Messages
  905|       |
  906|       |				  Transitions from Join State
  907|       |
  908|       |				  The (S,G) downstream state machine on
  909|       |				  interface I remains in
  910|       |				  Join state, and the Expiry Timer (ET) is
  911|       |				  restarted, set to
  912|       |				  maximum of its current value and the HoldTime
  913|       |				  from the
  914|       |				  triggering Join/Prune message.
  915|       |
  916|       |				  Conclusion: Do not change the ET if the
  917|       |				  current value is
  918|       |				  higher than the received join holdtime.
  919|       |				 */
  920|      0|				return;
  921|      0|			}
  922|      0|		}
  923|  1.31k|		EVENT_OFF(ch->t_ifjoin_expiry_timer);
  ------------------
  |  |  164|  1.31k|	do {                                                                   \
  |  |  165|  1.31k|		if ((thread))                                                  \
  |  |  ------------------
  |  |  |  Branch (165:7): [True: 0, False: 1.31k]
  |  |  ------------------
  |  |  166|  1.31k|			event_cancel(&(thread));                               \
  |  |  167|  1.31k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (167:11): [Folded, False: 1.31k]
  |  |  ------------------
  ------------------
  924|  1.31k|		break;
  925|      0|	case PIM_IFJOIN_PRUNE:
  ------------------
  |  Branch (925:2): [True: 0, False: 6.00k]
  ------------------
  926|      0|		if (source_flags & PIM_ENCODE_RPT_BIT) {
  ------------------
  |  |  214|      0|#define PIM_ENCODE_RPT_BIT         0x01
  ------------------
  |  Branch (926:7): [True: 0, False: 0]
  ------------------
  927|      0|			pim_ifchannel_ifjoin_switch(__func__, ch,
  928|      0|						    PIM_IFJOIN_NOINFO);
  929|      0|			EVENT_OFF(ch->t_ifjoin_expiry_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]
  |  |  ------------------
  ------------------
  930|      0|			delete_on_noinfo(ch);
  931|      0|			return;
  932|      0|		} else
  933|      0|			pim_ifchannel_ifjoin_handler(ch, pim_ifp);
  934|      0|		break;
  935|  3.15k|	case PIM_IFJOIN_PRUNE_PENDING:
  ------------------
  |  Branch (935:2): [True: 3.15k, False: 2.85k]
  ------------------
  936|       |		/*
  937|       |		 * Transitions from Prune-Pending State (Receive Join)
  938|       |		 * RFC 7761 Sec 4.5.2:
  939|       |		 *    The (S,G) downstream state machine on interface I
  940|       |		 * transitions to the Join state.  The Prune-Pending Timer is
  941|       |		 * canceled (without triggering an expiry event).  The
  942|       |		 * Expiry Timer (ET) is restarted and is then set to the
  943|       |		 * maximum of its current value and the HoldTime from the
  944|       |		 * triggering Join/Prune message.
  945|       |		 */
  946|  3.15k|		EVENT_OFF(ch->t_ifjoin_prune_pending_timer);
  ------------------
  |  |  164|  3.15k|	do {                                                                   \
  |  |  165|  3.15k|		if ((thread))                                                  \
  |  |  ------------------
  |  |  |  Branch (165:7): [True: 0, False: 3.15k]
  |  |  ------------------
  |  |  166|  3.15k|			event_cancel(&(thread));                               \
  |  |  167|  3.15k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (167:11): [Folded, False: 3.15k]
  |  |  ------------------
  ------------------
  947|       |
  948|       |		/* Check if SGRpt join Received */
  949|  3.15k|		if ((source_flags & PIM_ENCODE_RPT_BIT) &&
  ------------------
  |  |  214|  3.15k|#define PIM_ENCODE_RPT_BIT         0x01
  ------------------
  |  Branch (949:7): [True: 798, False: 2.35k]
  ------------------
  950|    798|		    !pim_addr_is_any(sg->src)) {
  ------------------
  |  Branch (950:7): [True: 379, False: 419]
  ------------------
  951|       |			/*
  952|       |			 * Transitions from Prune-Pending State (Rcv SGRpt Join)
  953|       |			 * RFC 7761 Sec 4.5.3:
  954|       |			 * The (S,G,rpt) downstream state machine on interface
  955|       |			 * I transitions to the NoInfo state.The ET and PPT are
  956|       |			 * cancelled.
  957|       |			 */
  958|    379|			EVENT_OFF(ch->t_ifjoin_expiry_timer);
  ------------------
  |  |  164|    379|	do {                                                                   \
  |  |  165|    379|		if ((thread))                                                  \
  |  |  ------------------
  |  |  |  Branch (165:7): [True: 0, False: 379]
  |  |  ------------------
  |  |  166|    379|			event_cancel(&(thread));                               \
  |  |  167|    379|	} while (0)
  |  |  ------------------
  |  |  |  Branch (167:11): [Folded, False: 379]
  |  |  ------------------
  ------------------
  959|    379|			pim_ifchannel_ifjoin_switch(__func__, ch,
  960|    379|						    PIM_IFJOIN_NOINFO);
  961|    379|			return;
  962|    379|		}
  963|       |
  964|  2.77k|		pim_ifchannel_ifjoin_handler(ch, pim_ifp);
  965|       |
  966|  2.77k|		if (ch->t_ifjoin_expiry_timer) {
  ------------------
  |  Branch (966:7): [True: 0, False: 2.77k]
  ------------------
  967|      0|			unsigned long remain = event_timer_remain_second(
  968|      0|				ch->t_ifjoin_expiry_timer);
  969|       |
  970|      0|			if (remain > holdtime)
  ------------------
  |  Branch (970:8): [True: 0, False: 0]
  ------------------
  971|      0|				return;
  972|      0|		}
  973|  2.77k|		EVENT_OFF(ch->t_ifjoin_expiry_timer);
  ------------------
  |  |  164|  2.77k|	do {                                                                   \
  |  |  165|  2.77k|		if ((thread))                                                  \
  |  |  ------------------
  |  |  |  Branch (165:7): [True: 0, False: 2.77k]
  |  |  ------------------
  |  |  166|  2.77k|			event_cancel(&(thread));                               \
  |  |  167|  2.77k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (167:11): [Folded, False: 2.77k]
  |  |  ------------------
  ------------------
  974|       |
  975|  2.77k|		break;
  976|      0|	case PIM_IFJOIN_PRUNE_TMP:
  ------------------
  |  Branch (976:2): [True: 0, False: 6.00k]
  ------------------
  977|      0|		break;
  978|     75|	case PIM_IFJOIN_PRUNE_PENDING_TMP:
  ------------------
  |  Branch (978:2): [True: 75, False: 5.93k]
  ------------------
  979|     75|		break;
  980|  6.00k|	}
  981|       |
  982|  5.62k|	if (holdtime != 0xFFFF) {
  ------------------
  |  Branch (982:6): [True: 5.62k, False: 0]
  ------------------
  983|  5.62k|		event_add_timer(router->master, on_ifjoin_expiry_timer, ch,
  ------------------
  |  |  216|  5.62k|#define event_add_timer(m, f, a, v, t) 0
  ------------------
  984|  5.62k|				holdtime, &ch->t_ifjoin_expiry_timer);
  985|  5.62k|	}
  986|  5.62k|}
pim_ifchannel_prune:
  991|  54.6k|{
  992|  54.6k|	struct pim_ifchannel *ch;
  993|  54.6k|	struct pim_interface *pim_ifp;
  994|  54.6k|	int jp_override_interval_msec;
  995|       |
  996|  54.6k|	if (nonlocal_upstream(0 /* prune */, ifp, upstream, sg, source_flags,
  ------------------
  |  Branch (996:6): [True: 536, False: 54.1k]
  ------------------
  997|  54.6k|			      holdtime)) {
  998|    536|		return;
  999|    536|	}
 1000|       |
 1001|  54.1k|	ch = pim_ifchannel_find(ifp, sg);
 1002|  54.1k|	if (!ch && !(source_flags & PIM_ENCODE_RPT_BIT)) {
  ------------------
  |  |  214|  42.2k|#define PIM_ENCODE_RPT_BIT         0x01
  ------------------
  |  Branch (1002:6): [True: 42.2k, False: 11.9k]
  |  Branch (1002:13): [True: 555, False: 41.6k]
  ------------------
 1003|    555|		if (PIM_DEBUG_PIM_TRACE)
  ------------------
  |  |  146|    555|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|    555|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|    555|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 555]
  |  |  ------------------
  ------------------
 1004|      0|			zlog_debug("%s: Received prune with no relevant ifchannel %s%pSG state: %d",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1005|    555|				   __func__, ifp->name, sg,
 1006|    555|				   source_flags);
 1007|    555|		return;
 1008|    555|	}
 1009|       |
 1010|  53.5k|	ch = pim_ifchannel_add(ifp, sg, source_flags,
 1011|  53.5k|			       PIM_UPSTREAM_FLAG_MASK_SRC_PIM);
  ------------------
  |  |   22|  53.5k|#define PIM_UPSTREAM_FLAG_MASK_SRC_PIM                 (1 << 4)
  ------------------
 1012|       |
 1013|  53.5k|	pim_ifp = ifp->info;
 1014|       |
 1015|  53.5k|	switch (ch->ifjoin_state) {
  ------------------
  |  Branch (1015:10): [True: 53.5k, False: 0]
  ------------------
 1016|  41.8k|	case PIM_IFJOIN_NOINFO:
  ------------------
  |  Branch (1016:2): [True: 41.8k, False: 11.7k]
  ------------------
 1017|  41.8k|		if (source_flags & PIM_ENCODE_RPT_BIT) {
  ------------------
  |  |  214|  41.8k|#define PIM_ENCODE_RPT_BIT         0x01
  ------------------
  |  Branch (1017:7): [True: 41.8k, False: 0]
  ------------------
 1018|  41.8k|			if (!(source_flags & PIM_ENCODE_WC_BIT))
  ------------------
  |  |  213|  41.8k|#define PIM_ENCODE_WC_BIT          0x02
  ------------------
  |  Branch (1018:8): [True: 41.8k, False: 51]
  ------------------
 1019|  41.8k|				PIM_IF_FLAG_SET_S_G_RPT(ch->flags);
  ------------------
  |  |   56|  41.8k|	((flags) |= (typeof((flags)))PIM_IF_FLAG_MASK_S_G_RPT)
  |  |  ------------------
  |  |  |  |   53|  41.8k|#define PIM_IF_FLAG_MASK_S_G_RPT         (1 << 2)
  |  |  ------------------
  ------------------
 1020|       |
 1021|  41.8k|			ch->ifjoin_state = PIM_IFJOIN_PRUNE_PENDING;
 1022|  41.8k|			if (listcount(pim_ifp->pim_neighbor_list) > 1)
  ------------------
  |  |   55|  41.8k|#define listcount(X) ((X)->count)
  ------------------
  |  Branch (1022:8): [True: 41.8k, False: 0]
  ------------------
 1023|  41.8k|				jp_override_interval_msec =
 1024|  41.8k|					pim_if_jp_override_interval_msec(ifp);
 1025|      0|			else
 1026|      0|				jp_override_interval_msec =
 1027|      0|					0; /* schedule to expire immediately */
 1028|       |			/* If we called ifjoin_prune() directly instead, care
 1029|       |			   should
 1030|       |			   be taken not to use "ch" afterwards since it would be
 1031|       |			   deleted. */
 1032|       |
 1033|  41.8k|			EVENT_OFF(ch->t_ifjoin_prune_pending_timer);
  ------------------
  |  |  164|  41.8k|	do {                                                                   \
  |  |  165|  41.8k|		if ((thread))                                                  \
  |  |  ------------------
  |  |  |  Branch (165:7): [True: 0, False: 41.8k]
  |  |  ------------------
  |  |  166|  41.8k|			event_cancel(&(thread));                               \
  |  |  167|  41.8k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (167:11): [Folded, False: 41.8k]
  |  |  ------------------
  ------------------
 1034|  41.8k|			EVENT_OFF(ch->t_ifjoin_expiry_timer);
  ------------------
  |  |  164|  41.8k|	do {                                                                   \
  |  |  165|  41.8k|		if ((thread))                                                  \
  |  |  ------------------
  |  |  |  Branch (165:7): [True: 0, False: 41.8k]
  |  |  ------------------
  |  |  166|  41.8k|			event_cancel(&(thread));                               \
  |  |  167|  41.8k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (167:11): [Folded, False: 41.8k]
  |  |  ------------------
  ------------------
 1035|  41.8k|			event_add_timer_msec(router->master,
  ------------------
  |  |  217|  41.8k|#define event_add_timer_msec(m, f, a, v, t) 0
  ------------------
 1036|  41.8k|					     on_ifjoin_prune_pending_timer, ch,
 1037|  41.8k|					     jp_override_interval_msec,
 1038|  41.8k|					     &ch->t_ifjoin_prune_pending_timer);
 1039|  41.8k|			event_add_timer(router->master, on_ifjoin_expiry_timer,
  ------------------
  |  |  216|  41.8k|#define event_add_timer(m, f, a, v, t) 0
  ------------------
 1040|  41.8k|					ch, holdtime,
 1041|  41.8k|					&ch->t_ifjoin_expiry_timer);
 1042|  41.8k|			pim_upstream_update_join_desired(pim_ifp->pim,
 1043|  41.8k|							 ch->upstream);
 1044|  41.8k|		}
 1045|  41.8k|		break;
 1046|  7.48k|	case PIM_IFJOIN_PRUNE_PENDING:
  ------------------
  |  Branch (1046:2): [True: 7.48k, False: 46.0k]
  ------------------
 1047|       |		/* nothing to do */
 1048|  7.48k|		break;
 1049|  3.63k|	case PIM_IFJOIN_JOIN:
  ------------------
  |  Branch (1049:2): [True: 3.63k, False: 49.9k]
  ------------------
 1050|       |		/*
 1051|       |		 * The (S,G) downstream state machine on interface I
 1052|       |		 * transitions to the Prune-Pending state.  The
 1053|       |		 * Prune-Pending Timer is started.  It is set to the
 1054|       |		 * J/P_Override_Interval(I) if the router has more than one
 1055|       |		 * neighbor on that interface; otherwise, it is set to zero,
 1056|       |		 * causing it to expire immediately.
 1057|       |		 */
 1058|       |
 1059|  3.63k|		pim_ifchannel_ifjoin_switch(__func__, ch,
 1060|  3.63k|					    PIM_IFJOIN_PRUNE_PENDING);
 1061|       |
 1062|  3.63k|		if (listcount(pim_ifp->pim_neighbor_list) > 1)
  ------------------
  |  |   55|  3.63k|#define listcount(X) ((X)->count)
  ------------------
  |  Branch (1062:7): [True: 3.63k, False: 0]
  ------------------
 1063|  3.63k|			jp_override_interval_msec =
 1064|  3.63k|				pim_if_jp_override_interval_msec(ifp);
 1065|      0|		else
 1066|      0|			jp_override_interval_msec =
 1067|      0|				0; /* schedule to expire immediately */
 1068|       |		/* If we called ifjoin_prune() directly instead, care should
 1069|       |		   be taken not to use "ch" afterwards since it would be
 1070|       |		   deleted. */
 1071|  3.63k|		EVENT_OFF(ch->t_ifjoin_prune_pending_timer);
  ------------------
  |  |  164|  3.63k|	do {                                                                   \
  |  |  165|  3.63k|		if ((thread))                                                  \
  |  |  ------------------
  |  |  |  Branch (165:7): [True: 0, False: 3.63k]
  |  |  ------------------
  |  |  166|  3.63k|			event_cancel(&(thread));                               \
  |  |  167|  3.63k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (167:11): [Folded, False: 3.63k]
  |  |  ------------------
  ------------------
 1072|  3.63k|		event_add_timer_msec(router->master,
  ------------------
  |  |  217|  3.63k|#define event_add_timer_msec(m, f, a, v, t) 0
  ------------------
 1073|  3.63k|				     on_ifjoin_prune_pending_timer, ch,
 1074|  3.63k|				     jp_override_interval_msec,
 1075|  3.63k|				     &ch->t_ifjoin_prune_pending_timer);
 1076|  3.63k|		break;
 1077|      0|	case PIM_IFJOIN_PRUNE:
  ------------------
  |  Branch (1077:2): [True: 0, False: 53.5k]
  ------------------
 1078|      0|		if (source_flags & PIM_ENCODE_RPT_BIT) {
  ------------------
  |  |  214|      0|#define PIM_ENCODE_RPT_BIT         0x01
  ------------------
  |  Branch (1078:7): [True: 0, False: 0]
  ------------------
 1079|      0|			EVENT_OFF(ch->t_ifjoin_prune_pending_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]
  |  |  ------------------
  ------------------
 1080|       |			/*
 1081|       |			 * While in Prune State, Receive SGRpt Prune.
 1082|       |			 * RFC 7761 Sec 4.5.3:
 1083|       |			 * The (S,G,rpt) downstream state machine on interface I
 1084|       |			 * remains in Prune state.  The Expiry Timer (ET) is
 1085|       |			 * restarted and is then set to the maximum of its
 1086|       |			 * current value and the HoldTime from the triggering
 1087|       |			 * Join/Prune message.
 1088|       |			 */
 1089|      0|			if (ch->t_ifjoin_expiry_timer) {
  ------------------
  |  Branch (1089:8): [True: 0, False: 0]
  ------------------
 1090|      0|				unsigned long rem = event_timer_remain_second(
 1091|      0|					ch->t_ifjoin_expiry_timer);
 1092|       |
 1093|      0|				if (rem > holdtime)
  ------------------
  |  Branch (1093:9): [True: 0, False: 0]
  ------------------
 1094|      0|					return;
 1095|      0|				EVENT_OFF(ch->t_ifjoin_expiry_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]
  |  |  ------------------
  ------------------
 1096|      0|			}
 1097|       |
 1098|      0|			event_add_timer(router->master, on_ifjoin_expiry_timer,
  ------------------
  |  |  216|      0|#define event_add_timer(m, f, a, v, t) 0
  ------------------
 1099|      0|					ch, holdtime,
 1100|      0|					&ch->t_ifjoin_expiry_timer);
 1101|      0|		}
 1102|      0|		break;
 1103|      0|	case PIM_IFJOIN_PRUNE_TMP:
  ------------------
  |  Branch (1103:2): [True: 0, False: 53.5k]
  ------------------
 1104|      0|		if (source_flags & PIM_ENCODE_RPT_BIT) {
  ------------------
  |  |  214|      0|#define PIM_ENCODE_RPT_BIT         0x01
  ------------------
  |  Branch (1104:7): [True: 0, False: 0]
  ------------------
 1105|      0|			ch->ifjoin_state = PIM_IFJOIN_PRUNE;
 1106|      0|			EVENT_OFF(ch->t_ifjoin_expiry_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]
  |  |  ------------------
  ------------------
 1107|      0|			event_add_timer(router->master, on_ifjoin_expiry_timer,
  ------------------
  |  |  216|      0|#define event_add_timer(m, f, a, v, t) 0
  ------------------
 1108|      0|					ch, holdtime,
 1109|      0|					&ch->t_ifjoin_expiry_timer);
 1110|      0|		}
 1111|      0|		break;
 1112|    582|	case PIM_IFJOIN_PRUNE_PENDING_TMP:
  ------------------
  |  Branch (1112:2): [True: 582, False: 52.9k]
  ------------------
 1113|    582|		if (source_flags & PIM_ENCODE_RPT_BIT) {
  ------------------
  |  |  214|    582|#define PIM_ENCODE_RPT_BIT         0x01
  ------------------
  |  Branch (1113:7): [True: 452, False: 130]
  ------------------
 1114|    452|			ch->ifjoin_state = PIM_IFJOIN_PRUNE_PENDING;
 1115|    452|			EVENT_OFF(ch->t_ifjoin_expiry_timer);
  ------------------
  |  |  164|    452|	do {                                                                   \
  |  |  165|    452|		if ((thread))                                                  \
  |  |  ------------------
  |  |  |  Branch (165:7): [True: 0, False: 452]
  |  |  ------------------
  |  |  166|    452|			event_cancel(&(thread));                               \
  |  |  167|    452|	} while (0)
  |  |  ------------------
  |  |  |  Branch (167:11): [Folded, False: 452]
  |  |  ------------------
  ------------------
 1116|    452|			event_add_timer(router->master, on_ifjoin_expiry_timer,
  ------------------
  |  |  216|    452|#define event_add_timer(m, f, a, v, t) 0
  ------------------
 1117|    452|					ch, holdtime,
 1118|    452|					&ch->t_ifjoin_expiry_timer);
 1119|    452|		}
 1120|    582|		break;
 1121|  53.5k|	}
 1122|  53.5k|}
pim_ifchannel_update_could_assert:
 1292|  1.85k|{
 1293|  1.85k|	int old_couldassert =
 1294|  1.85k|		PIM_FORCE_BOOLEAN(PIM_IF_FLAG_TEST_COULD_ASSERT(ch->flags));
  ------------------
  |  |   68|  1.85k|#define PIM_FORCE_BOOLEAN(expr) ((expr) != 0)
  ------------------
 1295|  1.85k|	int new_couldassert =
 1296|  1.85k|		PIM_FORCE_BOOLEAN(pim_macro_ch_could_assert_eval(ch));
  ------------------
  |  |   68|  1.85k|#define PIM_FORCE_BOOLEAN(expr) ((expr) != 0)
  ------------------
 1297|       |
 1298|  1.85k|	if (new_couldassert == old_couldassert)
  ------------------
  |  Branch (1298:6): [True: 1.85k, False: 0]
  ------------------
 1299|  1.85k|		return;
 1300|       |
 1301|      0|	if (PIM_DEBUG_PIM_EVENTS)
  ------------------
  |  |  137|      0|#define PIM_DEBUG_PIM_EVENTS (router->debugs & PIM_MASK_PIM_EVENTS)
  |  |  ------------------
  |  |  |  |   72|      0|#define PIM_MASK_PIM_EVENTS          (1 << 0)
  |  |  ------------------
  |  |  |  Branch (137:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1302|      0|		zlog_debug("%s: CouldAssert(%pPAs,%pPAs,%s) changed from %d to %d",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1303|      0|			   __func__, &ch->sg.src, &ch->sg.grp,
 1304|      0|			   ch->interface->name, old_couldassert,
 1305|      0|			   new_couldassert);
 1306|       |
 1307|      0|	if (new_couldassert) {
  ------------------
  |  Branch (1307:6): [True: 0, False: 0]
  ------------------
 1308|       |		/* CouldAssert(S,G,I) switched from false to true */
 1309|      0|		PIM_IF_FLAG_SET_COULD_ASSERT(ch->flags);
  ------------------
  |  |   37|      0|	((flags) |= (typeof((flags)))PIM_IF_FLAG_MASK_COULD_ASSERT)
  |  |  ------------------
  |  |  |  |   34|      0|#define PIM_IF_FLAG_MASK_COULD_ASSERT (1 << 0)
  |  |  ------------------
  ------------------
 1310|      0|	} else {
 1311|       |		/* CouldAssert(S,G,I) switched from true to false */
 1312|      0|		PIM_IF_FLAG_UNSET_COULD_ASSERT(ch->flags);
  ------------------
  |  |   39|      0|	((flags) &= (typeof((flags))) ~PIM_IF_FLAG_MASK_COULD_ASSERT)
  |  |  ------------------
  |  |  |  |   34|      0|#define PIM_IF_FLAG_MASK_COULD_ASSERT (1 << 0)
  |  |  ------------------
  ------------------
 1313|       |
 1314|      0|		if (ch->ifassert_state == PIM_IFASSERT_I_AM_WINNER) {
  ------------------
  |  Branch (1314:7): [True: 0, False: 0]
  ------------------
 1315|      0|			assert_action_a4(ch);
 1316|      0|		}
 1317|      0|	}
 1318|       |
 1319|      0|	pim_ifchannel_update_my_assert_metric(ch);
 1320|      0|}
pim_ifchannel_update_assert_tracking_desired:
 1359|  1.85k|{
 1360|  1.85k|	int old_atd = PIM_FORCE_BOOLEAN(
  ------------------
  |  |   68|  1.85k|#define PIM_FORCE_BOOLEAN(expr) ((expr) != 0)
  ------------------
 1361|  1.85k|		PIM_IF_FLAG_TEST_ASSERT_TRACKING_DESIRED(ch->flags));
 1362|  1.85k|	int new_atd =
 1363|  1.85k|		PIM_FORCE_BOOLEAN(pim_macro_assert_tracking_desired_eval(ch));
  ------------------
  |  |   68|  1.85k|#define PIM_FORCE_BOOLEAN(expr) ((expr) != 0)
  ------------------
 1364|       |
 1365|  1.85k|	if (new_atd == old_atd)
  ------------------
  |  Branch (1365:6): [True: 184, False: 1.67k]
  ------------------
 1366|    184|		return;
 1367|       |
 1368|  1.67k|	if (PIM_DEBUG_PIM_EVENTS)
  ------------------
  |  |  137|  1.67k|#define PIM_DEBUG_PIM_EVENTS (router->debugs & PIM_MASK_PIM_EVENTS)
  |  |  ------------------
  |  |  |  |   72|  1.67k|#define PIM_MASK_PIM_EVENTS          (1 << 0)
  |  |  ------------------
  |  |  |  Branch (137:30): [True: 0, False: 1.67k]
  |  |  ------------------
  ------------------
 1369|      0|		zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1370|  1.67k|			"%s: AssertTrackingDesired(%pPAs,%pPAs,%s) changed from %d to %d",
 1371|  1.67k|			__func__, &ch->sg.src, &ch->sg.grp, ch->interface->name,
 1372|  1.67k|			old_atd, new_atd);
 1373|       |
 1374|  1.67k|	if (new_atd) {
  ------------------
  |  Branch (1374:6): [True: 1.46k, False: 208]
  ------------------
 1375|       |		/* AssertTrackingDesired(S,G,I) switched from false to true */
 1376|  1.46k|		PIM_IF_FLAG_SET_ASSERT_TRACKING_DESIRED(ch->flags);
  ------------------
  |  |   46|  1.46k|	((flags) |= (typeof((flags)))PIM_IF_FLAG_MASK_ASSERT_TRACKING_DESIRED)
  |  |  ------------------
  |  |  |  |   43|  1.46k|#define PIM_IF_FLAG_MASK_ASSERT_TRACKING_DESIRED (1 << 1)
  |  |  ------------------
  ------------------
 1377|  1.46k|	} else {
 1378|       |		/* AssertTrackingDesired(S,G,I) switched from true to false */
 1379|    208|		PIM_IF_FLAG_UNSET_ASSERT_TRACKING_DESIRED(ch->flags);
  ------------------
  |  |   48|    208|	((flags) &= (typeof((flags))) ~PIM_IF_FLAG_MASK_ASSERT_TRACKING_DESIRED)
  |  |  ------------------
  |  |  |  |   43|    208|#define PIM_IF_FLAG_MASK_ASSERT_TRACKING_DESIRED (1 << 1)
  |  |  ------------------
  ------------------
 1380|       |
 1381|    208|		if (ch->ifassert_state == PIM_IFASSERT_I_AM_LOSER) {
  ------------------
  |  Branch (1381:7): [True: 0, False: 208]
  ------------------
 1382|      0|			assert_action_a5(ch);
 1383|      0|		}
 1384|    208|	}
 1385|  1.67k|}
pim_ifchannel_set_star_g_join_state:
 1430|  6.16k|{
 1431|  6.16k|	bool send_upstream_starg = false;
 1432|  6.16k|	struct pim_ifchannel *child;
 1433|  6.16k|	struct listnode *ch_node, *nch_node;
 1434|  6.16k|	struct pim_instance *pim =
 1435|  6.16k|		((struct pim_interface *)ch->interface->info)->pim;
 1436|  6.16k|	struct pim_upstream *starup = ch->upstream;
 1437|       |
 1438|  6.16k|	if (PIM_DEBUG_PIM_TRACE)
  ------------------
  |  |  146|  6.16k|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|  6.16k|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|  6.16k|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 6.16k]
  |  |  ------------------
  ------------------
 1439|      0|		zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1440|  6.16k|			"%s: %s %s eom: %d join %u", __func__,
 1441|  6.16k|			pim_ifchannel_ifjoin_name(ch->ifjoin_state, ch->flags),
 1442|  6.16k|			ch->sg_str, eom, join);
 1443|  6.16k|	if (!ch->sources)
  ------------------
  |  Branch (1443:6): [True: 0, False: 6.16k]
  ------------------
 1444|      0|		return;
 1445|       |
 1446|  34.7k|	for (ALL_LIST_ELEMENTS(ch->sources, ch_node, nch_node, child)) {
  ------------------
  |  |  320|  6.16k|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|  6.16k|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 6.16k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  321|  40.8k|	(node) != NULL                                                         \
  |  |  ------------------
  |  |  |  Branch (321:2): [True: 34.7k, False: 6.16k]
  |  |  ------------------
  |  |  322|  69.4k|		&& ((data) = static_cast(data, listgetdata(node)),             \
  |  |  ------------------
  |  |  |  |  204|   208k|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 34.7k, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 34.7k]
  |  |  |  |  |  Branch (204:28): [True: 34.7k, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 34.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:6): [True: 34.7k, False: 0]
  |  |  ------------------
  |  |  323|  69.4k|		    (nextnode) = node->next, 1);                               \
  |  |  324|  34.7k|	(node) = (nextnode), ((data) = NULL)
  ------------------
 1447|  34.7k|		if (!PIM_IF_FLAG_TEST_S_G_RPT(child->flags))
  ------------------
  |  |   54|  34.7k|#define PIM_IF_FLAG_TEST_S_G_RPT(flags)  ((flags) & PIM_IF_FLAG_MASK_S_G_RPT)
  |  |  ------------------
  |  |  |  |   53|  34.7k|#define PIM_IF_FLAG_MASK_S_G_RPT         (1 << 2)
  |  |  ------------------
  ------------------
  |  Branch (1447:7): [True: 18.7k, False: 15.9k]
  ------------------
 1448|  18.7k|			continue;
 1449|       |
 1450|  15.9k|		switch (child->ifjoin_state) {
  ------------------
  |  Branch (1450:11): [True: 15.9k, False: 0]
  ------------------
 1451|      4|		case PIM_IFJOIN_NOINFO:
  ------------------
  |  Branch (1451:3): [True: 4, False: 15.9k]
  ------------------
 1452|    897|		case PIM_IFJOIN_JOIN:
  ------------------
  |  Branch (1452:3): [True: 893, False: 15.0k]
  ------------------
 1453|    897|			break;
 1454|      0|		case PIM_IFJOIN_PRUNE:
  ------------------
  |  Branch (1454:3): [True: 0, False: 15.9k]
  ------------------
 1455|      0|			if (!eom)
  ------------------
  |  Branch (1455:8): [True: 0, False: 0]
  ------------------
 1456|      0|				child->ifjoin_state = PIM_IFJOIN_PRUNE_TMP;
 1457|      0|			break;
 1458|  11.1k|		case PIM_IFJOIN_PRUNE_PENDING:
  ------------------
  |  Branch (1458:3): [True: 11.1k, False: 4.85k]
  ------------------
 1459|  11.1k|			if (!eom)
  ------------------
  |  Branch (1459:8): [True: 5.92k, False: 5.19k]
  ------------------
 1460|  5.92k|				child->ifjoin_state =
 1461|  5.92k|					PIM_IFJOIN_PRUNE_PENDING_TMP;
 1462|  11.1k|			break;
 1463|      0|		case PIM_IFJOIN_PRUNE_TMP:
  ------------------
  |  Branch (1463:3): [True: 0, False: 15.9k]
  ------------------
 1464|  3.95k|		case PIM_IFJOIN_PRUNE_PENDING_TMP:
  ------------------
  |  Branch (1464:3): [True: 3.95k, False: 12.0k]
  ------------------
 1465|  3.95k|			if (!eom)
  ------------------
  |  Branch (1465:8): [True: 212, False: 3.74k]
  ------------------
 1466|    212|				break;
 1467|       |
 1468|  3.74k|			if (child->ifjoin_state == PIM_IFJOIN_PRUNE_PENDING_TMP)
  ------------------
  |  Branch (1468:8): [True: 3.74k, False: 0]
  ------------------
 1469|  3.74k|				EVENT_OFF(child->t_ifjoin_prune_pending_timer);
  ------------------
  |  |  164|  3.74k|	do {                                                                   \
  |  |  165|  3.74k|		if ((thread))                                                  \
  |  |  ------------------
  |  |  |  Branch (165:7): [True: 0, False: 3.74k]
  |  |  ------------------
  |  |  166|  3.74k|			event_cancel(&(thread));                               \
  |  |  167|  3.74k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (167:11): [Folded, False: 3.74k]
  |  |  ------------------
  ------------------
 1470|  3.74k|			EVENT_OFF(child->t_ifjoin_expiry_timer);
  ------------------
  |  |  164|  3.74k|	do {                                                                   \
  |  |  165|  3.74k|		if ((thread))                                                  \
  |  |  ------------------
  |  |  |  Branch (165:7): [True: 0, False: 3.74k]
  |  |  ------------------
  |  |  166|  3.74k|			event_cancel(&(thread));                               \
  |  |  167|  3.74k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (167:11): [Folded, False: 3.74k]
  |  |  ------------------
  ------------------
 1471|       |
 1472|  3.74k|			PIM_IF_FLAG_UNSET_S_G_RPT(child->flags);
  ------------------
  |  |   58|  3.74k|	((flags) &= (typeof((flags))) ~PIM_IF_FLAG_MASK_S_G_RPT)
  |  |  ------------------
  |  |  |  |   53|  3.74k|#define PIM_IF_FLAG_MASK_S_G_RPT         (1 << 2)
  |  |  ------------------
  ------------------
 1473|  3.74k|			child->ifjoin_state = PIM_IFJOIN_NOINFO;
 1474|       |
 1475|  3.74k|			if ((I_am_RP(pim, child->sg.grp)) &&
  ------------------
  |  |   66|  3.74k|#define I_am_RP(P, G)  pim_rp_i_am_rp ((P), (G))
  ------------------
  |  Branch (1475:8): [True: 0, False: 3.74k]
  ------------------
 1476|      0|			    (!pim_upstream_empty_inherited_olist(
  ------------------
  |  Branch (1476:8): [True: 0, False: 0]
  ------------------
 1477|      0|				child->upstream))) {
 1478|      0|				pim_channel_add_oif(
 1479|      0|					child->upstream->channel_oil,
 1480|      0|					ch->interface, PIM_OIF_FLAG_PROTO_STAR,
  ------------------
  |  |   24|      0|#define PIM_OIF_FLAG_PROTO_STAR   (1 << 2)
  ------------------
 1481|      0|					__func__);
 1482|      0|				pim_upstream_update_join_desired(pim,
 1483|      0|						child->upstream);
 1484|      0|			}
 1485|  3.74k|			send_upstream_starg = true;
 1486|       |
 1487|  3.74k|			delete_on_noinfo(child);
 1488|  3.74k|			break;
 1489|  15.9k|		}
 1490|  15.9k|	}
 1491|       |
 1492|  6.16k|	if (send_upstream_starg)
  ------------------
  |  Branch (1492:6): [True: 937, False: 5.22k]
  ------------------
 1493|    937|		pim_jp_agg_single_upstream_send(&starup->rpf, starup, true);
 1494|  6.16k|}
pim_ifchannel.c:pim_ifchannel_remove_children:
   62|  42.5k|{
   63|  42.5k|	struct pim_ifchannel *child;
   64|       |
   65|  42.5k|	if (!ch->sources)
  ------------------
  |  Branch (65:6): [True: 42.5k, False: 0]
  ------------------
   66|  42.5k|		return;
   67|       |
   68|      0|	while (!list_isempty(ch->sources)) {
  ------------------
  |  |   56|      0|#define list_isempty(X) ((X)->head == NULL && (X)->tail == NULL)
  |  |  ------------------
  |  |  |  Branch (56:26): [True: 0, False: 0]
  |  |  |  Branch (56:47): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   69|      0|		child = listnode_head(ch->sources);
   70|       |		child->parent = NULL;
   71|      0|		listnode_delete(ch->sources, child);
   72|      0|	}
   73|      0|}
pim_ifchannel.c:pim_ifchannel_find_parent:
  496|  43.2k|{
  497|  43.2k|	pim_sgaddr parent_sg = ch->sg;
  498|  43.2k|	struct pim_ifchannel *parent = NULL;
  499|       |
  500|       |	// (S,G)
  501|  43.2k|	if (!pim_addr_is_any(parent_sg.src) &&
  ------------------
  |  Branch (501:6): [True: 43.0k, False: 172]
  ------------------
  502|  43.0k|	    !pim_addr_is_any(parent_sg.grp)) {
  ------------------
  |  Branch (502:6): [True: 43.0k, False: 42]
  ------------------
  503|  43.0k|		parent_sg.src = PIMADDR_ANY;
  ------------------
  |  |   79|  43.0k|#define PIMADDR_ANY (pim_addr){ }
  ------------------
  504|  43.0k|		parent = pim_ifchannel_find(ch->interface, &parent_sg);
  505|       |
  506|  43.0k|		if (parent)
  ------------------
  |  Branch (506:7): [True: 42.6k, False: 405]
  ------------------
  507|  42.6k|			listnode_add(parent->sources, ch);
  508|  43.0k|		return parent;
  509|  43.0k|	}
  510|       |
  511|    214|	return NULL;
  512|  43.2k|}
pim_ifchannel.c:pim_ifchannel_find_new_children:
   81|  43.2k|{
   82|  43.2k|	struct pim_interface *pim_ifp = ch->interface->info;
   83|  43.2k|	struct pim_ifchannel *child;
   84|       |
   85|       |	// Basic Sanity that we are not being silly
   86|  43.2k|	if (!pim_addr_is_any(ch->sg.src) && !pim_addr_is_any(ch->sg.grp))
  ------------------
  |  Branch (86:6): [True: 43.0k, False: 172]
  |  Branch (86:38): [True: 43.0k, False: 42]
  ------------------
   87|  43.0k|		return;
   88|       |
   89|    214|	if (pim_addr_is_any(ch->sg.src) && pim_addr_is_any(ch->sg.grp))
  ------------------
  |  Branch (89:6): [True: 172, False: 42]
  |  Branch (89:37): [True: 1, False: 171]
  ------------------
   90|      1|		return;
   91|       |
   92|  72.8k|	RB_FOREACH (child, pim_ifchannel_rb, &pim_ifp->ifchannel_rb) {
  ------------------
  |  |  529|  73.0k|	for ((_e) = RB_MIN(_name, (_head)); (_e) != NULL;                      \
  |  |  ------------------
  |  |  |  |  515|    213|#define RB_MIN(_name, _head)		_name##_RB_MIN(_head)
  |  |  ------------------
  |  |  |  Branch (529:38): [True: 72.8k, False: 213]
  |  |  ------------------
  |  |  530|  72.8k|	     (_e) = RB_NEXT(_name, (_e)))
  |  |  ------------------
  |  |  |  |  517|  72.8k|#define RB_NEXT(_name, _elm)		_name##_RB_NEXT(_elm)
  |  |  ------------------
  ------------------
   93|  72.8k|		if (!pim_addr_is_any(ch->sg.grp) &&
  ------------------
  |  Branch (93:7): [True: 58.4k, False: 14.4k]
  ------------------
   94|  58.4k|		    !pim_addr_cmp(child->sg.grp, ch->sg.grp) && (child != ch)) {
  ------------------
  |  Branch (94:7): [True: 232, False: 58.1k]
  |  Branch (94:51): [True: 232, False: 0]
  ------------------
   95|    232|			child->parent = ch;
   96|    232|			listnode_add_sort(ch->sources, child);
   97|    232|		}
   98|  72.8k|	}
   99|    213|}
pim_ifchannel.c:nonlocal_upstream:
  777|  61.2k|{
  778|  61.2k|	struct pim_interface *recv_pim_ifp;
  779|  61.2k|	int is_local; /* boolean */
  780|       |
  781|  61.2k|	recv_pim_ifp = recv_ifp->info;
  782|  61.2k|	assert(recv_pim_ifp);
  ------------------
  |  |   51|  61.2k|	({                                                                     \
  |  |   52|  61.2k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  61.2k|			(used)) = {                                            \
  |  |   54|  61.2k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  61.2k|	{                                                                      \
  |  |  |  |  284|  61.2k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  61.2k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  61.2k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  61.2k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  61.2k|	}                                                                      \
  |  |  ------------------
  |  |   55|  61.2k|			.expr = #expr_,                                        \
  |  |   56|  61.2k|		};                                                             \
  |  |   57|  61.2k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  61.2k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  61.2k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  61.2k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  61.2k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 61.2k]
  |  |  |  Branch (58:24): [True: 61.2k, False: 0]
  |  |  ------------------
  |  |   59|  61.2k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  61.2k|	})
  ------------------
  783|       |
  784|  61.2k|	is_local = !pim_addr_cmp(upstream, recv_pim_ifp->primary_address);
  785|       |
  786|  61.2k|	if (is_local)
  ------------------
  |  Branch (786:6): [True: 60.1k, False: 1.09k]
  ------------------
  787|  60.1k|		return 0;
  788|       |
  789|  1.09k|	if (PIM_DEBUG_PIM_TRACE_DETAIL)
  ------------------
  |  |  148|  1.09k|	(router->debugs & PIM_MASK_PIM_TRACE_DETAIL)
  |  |  ------------------
  |  |  |  |   78|  1.09k|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (148:2): [True: 0, False: 1.09k]
  |  |  ------------------
  ------------------
  790|      0|		zlog_warn(
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
  791|  1.09k|			"%s: recv %s (S,G)=%pSG to non-local upstream=%pPAs on %s",
  792|  1.09k|			__func__, is_join ? "join" : "prune", sg, &upstream,
  793|  1.09k|			recv_ifp->name);
  794|       |
  795|       |	/*
  796|       |	 * Since recv upstream addr was not directed to our primary
  797|       |	 * address, check if we should react to it in any way.
  798|       |	 */
  799|  1.09k|	check_recv_upstream(is_join, recv_ifp, upstream, sg, source_flags,
  800|  1.09k|			    holdtime);
  801|       |
  802|  1.09k|	return 1; /* non-local */
  803|  61.2k|}
pim_ifchannel.c:check_recv_upstream:
  715|  1.09k|{
  716|  1.09k|	struct pim_upstream *up;
  717|  1.09k|	struct pim_interface *pim_ifp = recv_ifp->info;
  718|  1.09k|	pim_addr rpf_addr;
  719|       |
  720|       |	/* Upstream (S,G) in Joined state ? */
  721|  1.09k|	up = pim_upstream_find(pim_ifp->pim, sg);
  722|  1.09k|	if (!up)
  ------------------
  |  Branch (722:6): [True: 566, False: 525]
  ------------------
  723|    566|		return;
  724|    525|	if (up->join_state != PIM_UPSTREAM_JOINED)
  ------------------
  |  Branch (724:6): [True: 525, False: 0]
  ------------------
  725|    525|		return;
  726|       |
  727|       |	/* Upstream (S,G) in Joined state */
  728|       |
  729|      0|	if (pim_rpf_addr_is_inaddr_any(&up->rpf)) {
  ------------------
  |  Branch (729:6): [True: 0, False: 0]
  ------------------
  730|       |		/* RPF'(S,G) not found */
  731|      0|		zlog_warn("%s %s: RPF'%s not found", __FILE__, __func__,
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
  732|      0|			  up->sg_str);
  733|      0|		return;
  734|      0|	}
  735|       |
  736|      0|	rpf_addr = up->rpf.rpf_addr;
  737|       |
  738|       |	/* upstream directed to RPF'(S,G) ? */
  739|      0|	if (pim_addr_cmp(upstream, rpf_addr)) {
  ------------------
  |  Branch (739:6): [True: 0, False: 0]
  ------------------
  740|      0|		zlog_warn(
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
  741|      0|			"%s %s: (S,G)=%s upstream=%pPAs not directed to RPF'(S,G)=%pPAs on interface %s",
  742|      0|			__FILE__, __func__, up->sg_str, &upstream, &rpf_addr,
  743|      0|			recv_ifp->name);
  744|      0|		return;
  745|      0|	}
  746|       |	/* upstream directed to RPF'(S,G) */
  747|       |
  748|      0|	if (is_join) {
  ------------------
  |  Branch (748:6): [True: 0, False: 0]
  ------------------
  749|       |		/* Join(S,G) to RPF'(S,G) */
  750|      0|		pim_upstream_join_suppress(up, up->rpf.rpf_addr, holdtime);
  751|      0|		return;
  752|      0|	}
  753|       |
  754|       |	/* Prune to RPF'(S,G) */
  755|       |
  756|      0|	if (source_flags & PIM_RPT_BIT_MASK) {
  ------------------
  |  |   31|      0|#define PIM_RPT_BIT_MASK      (1 << 0)
  ------------------
  |  Branch (756:6): [True: 0, False: 0]
  ------------------
  757|      0|		if (source_flags & PIM_WILDCARD_BIT_MASK) {
  ------------------
  |  |   32|      0|#define PIM_WILDCARD_BIT_MASK (1 << 1)
  ------------------
  |  Branch (757:7): [True: 0, False: 0]
  ------------------
  758|       |			/* Prune(*,G) to RPF'(S,G) */
  759|      0|			pim_upstream_join_timer_decrease_to_t_override(
  760|      0|				"Prune(*,G)", up);
  761|      0|			return;
  762|      0|		}
  763|       |
  764|       |		/* Prune(S,G,rpt) to RPF'(S,G) */
  765|      0|		pim_upstream_join_timer_decrease_to_t_override("Prune(S,G,rpt)",
  766|      0|							       up);
  767|      0|		return;
  768|      0|	}
  769|       |
  770|       |	/* Prune(S,G) to RPF'(S,G) */
  771|      0|	pim_upstream_join_timer_decrease_to_t_override("Prune(S,G)", up);
  772|      0|}
pim_ifchannel.c:pim_ifchannel_ifjoin_handler:
  807|  2.77k|{
  808|  2.77k|	pim_ifchannel_ifjoin_switch(__func__, ch, PIM_IFJOIN_JOIN);
  809|  2.77k|	PIM_IF_FLAG_UNSET_S_G_RPT(ch->flags);
  ------------------
  |  |   58|  2.77k|	((flags) &= (typeof((flags))) ~PIM_IF_FLAG_MASK_S_G_RPT)
  |  |  ------------------
  |  |  |  |   53|  2.77k|#define PIM_IF_FLAG_MASK_S_G_RPT         (1 << 2)
  |  |  ------------------
  ------------------
  810|       |	/* check if the interface qualifies as an immediate
  811|       |	 * OIF
  812|       |	 */
  813|  2.77k|	if (pim_upstream_evaluate_join_desired_interface(
  ------------------
  |  Branch (813:6): [True: 2.77k, False: 0]
  ------------------
  814|  2.77k|				ch->upstream, ch,
  815|  2.77k|				NULL /*starch*/)) {
  816|  2.77k|		pim_channel_add_oif(ch->upstream->channel_oil,
  817|  2.77k|				ch->interface,
  818|  2.77k|				PIM_OIF_FLAG_PROTO_PIM,
  ------------------
  |  |   23|  2.77k|#define PIM_OIF_FLAG_PROTO_PIM    (1 << 1)
  ------------------
  819|  2.77k|				__func__);
  820|  2.77k|		pim_upstream_update_join_desired(pim_ifp->pim,
  821|  2.77k|				ch->upstream);
  822|  2.77k|	}
  823|  2.77k|}

pim_igmp_if_init:
 1124|      2|{
 1125|      2|	char hash_name[64];
 1126|       |
 1127|      2|	pim_ifp->gm_socket_list = list_new();
 1128|      2|	pim_ifp->gm_socket_list->del = (void (*)(void *))igmp_sock_free;
 1129|       |
 1130|      2|	pim_ifp->gm_group_list = list_new();
 1131|      2|	pim_ifp->gm_group_list->del = (void (*)(void *))igmp_group_free;
 1132|       |
 1133|      2|	snprintf(hash_name, sizeof(hash_name), "IGMP %s hash", ifp->name);
 1134|      2|	pim_ifp->gm_group_hash = hash_create(igmp_group_hash_key,
 1135|      2|					     igmp_group_hash_equal, hash_name);
 1136|      2|}
pim_igmp_sock_add:
 1253|      1|{
 1254|      1|	struct gm_sock *igmp;
 1255|      1|	struct sockaddr_in sin;
 1256|      1|	int fd;
 1257|       |
 1258|       |#ifndef FUZZING
 1259|       |	fd = igmp_sock_open(ifaddr, ifp);
 1260|       |	if (fd < 0) {
 1261|       |		zlog_warn("Could not open IGMP socket for %pI4 on %s",
 1262|       |			  &ifaddr, ifp->name);
 1263|       |		return NULL;
 1264|       |	}
 1265|       |#else
 1266|      1|	fd = 69;
 1267|      1|#endif
 1268|       |
 1269|      1|	sin.sin_family = AF_INET;
 1270|      1|	sin.sin_addr = ifaddr;
 1271|      1|	sin.sin_port = 0;
 1272|      1|	if (bind(fd, (struct sockaddr *) &sin, sizeof(sin)) != 0) {
  ------------------
  |  Branch (1272:6): [True: 1, False: 0]
  ------------------
 1273|      1|		zlog_warn("Could not bind IGMP socket for %pI4 on %s: %s(%d)",
  ------------------
  |  |  131|      1|#define zlog_warn(...) 0
  ------------------
 1274|      1|			  &ifaddr, ifp->name, strerror(errno), errno);
 1275|      1|		close(fd);
 1276|       |
 1277|      1|		return NULL;
 1278|      1|	}
 1279|       |
 1280|      0|	igmp = igmp_sock_new(fd, ifaddr, ifp, mtrace_only);
 1281|       |
 1282|      0|	igmp_read_on(igmp);
 1283|       |
 1284|      0|	listnode_add(igmp_sock_list, igmp);
 1285|       |
 1286|       |#ifdef IGMP_SOCK_DUMP
 1287|       |	igmp_sock_dump(igmp_sock_array);
 1288|       |#endif
 1289|       |
 1290|      0|	return igmp;
 1291|      1|}

pim_vrf_init:
  226|      1|{
  227|      1|	vrf_init(pim_vrf_new, pim_vrf_enable, pim_vrf_disable, pim_vrf_delete);
  228|       |#ifndef FUZZING
  229|       |	vrf_cmd_init(pim_vrf_config_write);
  230|       |#endif
  231|      1|}
pim_instance.c:pim_vrf_new:
  144|      1|{
  145|      1|	struct pim_instance *pim = pim_instance_init(vrf);
  146|       |
  147|      1|	zlog_debug("VRF Created: %s(%u)", vrf->name, vrf->vrf_id);
  ------------------
  |  |  134|      1|#define zlog_debug(...) 0
  ------------------
  148|       |
  149|      1|	vrf->info = (void *)pim;
  150|       |
  151|      1|	pim_ssmpingd_init(pim);
  152|      1|	return 0;
  153|      1|}
pim_instance.c:pim_instance_init:
   68|      1|{
   69|      1|	struct pim_instance *pim;
   70|      1|	char hash_name[64];
   71|       |
   72|      1|	pim = XCALLOC(MTYPE_PIM_PIM_INSTANCE, sizeof(struct pim_instance));
  ------------------
  |  |  165|      1|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
   73|       |
   74|      1|	pim_if_init(pim);
   75|       |
   76|      1|	pim->mcast_if_count = 0;
   77|      1|	pim->keep_alive_time = PIM_KEEPALIVE_PERIOD;
  ------------------
  |  |  300|      1|#define PIM_KEEPALIVE_PERIOD  (210)
  ------------------
   78|      1|	pim->rp_keep_alive_time = PIM_RP_KEEPALIVE_PERIOD;
  ------------------
  |  |  302|      1|	(3 * router->register_suppress_time + router->register_probe_time)
  ------------------
   79|       |
   80|      1|	pim->ecmp_enable = false;
   81|      1|	pim->ecmp_rebalance_enable = false;
   82|       |
   83|      1|	pim->vrf = vrf;
   84|       |
   85|      1|	pim->spt.switchover = PIM_SPT_IMMEDIATE;
   86|      1|	pim->spt.plist = NULL;
   87|       |
   88|      1|	pim_msdp_init(pim, router->master);
   89|      1|	pim_vxlan_init(pim);
   90|       |
   91|      1|	snprintf(hash_name, sizeof(hash_name), "PIM %s RPF Hash", vrf->name);
   92|      1|	pim->rpf_hash = hash_create_size(256, pim_rpf_hash_key, pim_rpf_equal,
   93|      1|					 hash_name);
   94|       |
   95|      1|	if (PIM_DEBUG_ZEBRA)
  ------------------
  |  |  154|      1|#define PIM_DEBUG_ZEBRA (router->debugs & PIM_MASK_ZEBRA)
  |  |  ------------------
  |  |  |  |   83|      1|#define PIM_MASK_ZEBRA               (1 << 11)
  |  |  ------------------
  |  |  |  Branch (154:25): [True: 0, False: 1]
  |  |  ------------------
  ------------------
   96|      0|		zlog_debug("%s: NHT rpf hash init ", __func__);
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
   97|       |
   98|      1|	pim->ssm_info = pim_ssm_init();
   99|       |
  100|      1|	pim->static_routes = list_new();
  101|      1|	pim->static_routes->del = (void (*)(void *))pim_static_route_free;
  102|       |
  103|      1|	pim->send_v6_secondary = 1;
  104|       |
  105|      1|	pim->gm_socket = -1;
  106|       |
  107|      1|	pim_rp_init(pim);
  108|       |
  109|      1|	pim_bsm_proc_init(pim);
  110|       |
  111|      1|	pim_oil_init(pim);
  112|       |
  113|      1|	pim_upstream_init(pim);
  114|       |
  115|      1|	pim_instance_mlag_init(pim);
  116|       |
  117|      1|	pim->last_route_change_time = -1;
  118|       |
  119|       |#ifndef FUZZING
  120|       |	pim->reg_sock = pim_reg_sock();
  121|       |	if (pim->reg_sock < 0)
  122|       |		assert(0);
  123|       |#endif
  124|       |
  125|       |	/* MSDP global timer defaults. */
  126|      1|	pim->msdp.hold_time = PIM_MSDP_PEER_HOLD_TIME;
  ------------------
  |  |  111|      1|#define PIM_MSDP_PEER_HOLD_TIME 75
  ------------------
  127|      1|	pim->msdp.keep_alive = PIM_MSDP_PEER_KA_TIME;
  ------------------
  |  |  113|      1|#define PIM_MSDP_PEER_KA_TIME 60
  ------------------
  128|      1|	pim->msdp.connection_retry = PIM_MSDP_PEER_CONNECT_RETRY_TIME;
  ------------------
  |  |  115|      1|#define PIM_MSDP_PEER_CONNECT_RETRY_TIME 30
  ------------------
  129|       |
  130|      1|	return pim;
  131|      1|}
pim_instance.c:pim_vrf_enable:
  177|      1|{
  178|      1|	struct pim_instance *pim = (struct pim_instance *)vrf->info;
  179|      1|	struct interface *ifp;
  180|       |
  181|      1|	zlog_debug("%s: for %s %u", __func__, vrf->name, vrf->vrf_id);
  ------------------
  |  |  134|      1|#define zlog_debug(...) 0
  ------------------
  182|       |
  183|      1|	FOR_ALL_INTERFACES (vrf, ifp) {
  ------------------
  |  |  372|      1|	if (vrf)                                                               \
  |  |  ------------------
  |  |  |  Branch (372:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  373|      1|		RB_FOREACH (ifp, if_name_head, &vrf->ifaces_by_name)
  |  |  ------------------
  |  |  |  |  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)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  184|      0|		if (!ifp->info)
  ------------------
  |  Branch (184:7): [True: 0, False: 0]
  ------------------
  185|      0|			continue;
  186|       |
  187|      0|		pim_if_create_pimreg(pim);
  188|      0|		break;
  189|      0|	}
  190|       |
  191|      1|	pim_mroute_socket_enable(pim);
  192|       |
  193|      1|	return 0;
  194|      1|}

pim_read_uint32_host:
   16|    298|{
   17|    298|	uint32_t val;
   18|    298|	memcpy(&val, buf, sizeof(val));
   19|       |	/* val is in netorder */
   20|    298|	val = ntohl(val);
   21|       |	/* val is in hostorder */
   22|    298|	return val;
   23|    298|}
pim_write_uint32:
   26|    308|{
   27|       |	/* val_host is in host order */
   28|    308|	val_host = htonl(val_host);
   29|       |	/* val_host is in netorder */
   30|    308|	memcpy(buf, &val_host, sizeof(val_host));
   31|    308|}

pim_joinprune_recv:
  162|    830|{
  163|    830|	pim_addr msg_upstream_addr;
  164|    830|	bool wrong_af = false;
  165|    830|	struct pim_interface *pim_ifp;
  166|    830|	uint8_t msg_num_groups;
  167|    830|	uint16_t msg_holdtime;
  168|    830|	int addr_offset;
  169|    830|	uint8_t *buf;
  170|    830|	uint8_t *pastend;
  171|    830|	int remain;
  172|    830|	int group;
  173|    830|	struct pim_ifchannel *child = NULL;
  174|    830|	struct listnode *ch_node, *nch_node;
  175|       |
  176|    830|	buf = tlv_buf;
  177|    830|	pastend = tlv_buf + tlv_buf_size;
  178|    830|	pim_ifp = ifp->info;
  179|       |
  180|    830|	if (pim_ifp->pim_passive_enable) {
  ------------------
  |  Branch (180:6): [True: 0, False: 830]
  ------------------
  181|      0|		if (PIM_DEBUG_PIM_PACKETS)
  ------------------
  |  |  140|      0|#define PIM_DEBUG_PIM_PACKETS (router->debugs & PIM_MASK_PIM_PACKETS)
  |  |  ------------------
  |  |  |  |   74|      0|#define PIM_MASK_PIM_PACKETS         (1 << 2)
  |  |  ------------------
  |  |  |  Branch (140:31): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  182|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  183|      0|				"skip receiving PIM message on passive interface %s",
  184|      0|				ifp->name);
  185|      0|		return 0;
  186|      0|	}
  187|       |
  188|       |	/*
  189|       |	  Parse ucast addr
  190|       |	*/
  191|    830|	addr_offset = pim_parse_addr_ucast(&msg_upstream_addr, buf,
  192|    830|					   pastend - buf, &wrong_af);
  193|    830|	if (addr_offset < 1) {
  ------------------
  |  Branch (193:6): [True: 27, False: 803]
  ------------------
  194|     27|		zlog_warn("%s: pim_parse_addr_ucast() failure: from %pPA on %s",
  ------------------
  |  |  131|     27|#define zlog_warn(...) 0
  ------------------
  195|     27|			  __func__, &src_addr, ifp->name);
  196|     27|		return -1;
  197|     27|	}
  198|    803|	buf += addr_offset;
  199|       |
  200|       |	/*
  201|       |	  Check upstream address family
  202|       |	 */
  203|    803|	if (wrong_af) {
  ------------------
  |  Branch (203:6): [True: 0, False: 803]
  ------------------
  204|      0|		zlog_warn(
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
  205|      0|			"%s: ignoring join/prune directed to unexpected addr family from %pPA on %s",
  206|      0|			__func__, &src_addr, ifp->name);
  207|      0|		return -2;
  208|      0|	}
  209|       |
  210|    803|	remain = pastend - buf;
  211|    803|	if (remain < 4) {
  ------------------
  |  Branch (211:6): [True: 3, False: 800]
  ------------------
  212|      3|		zlog_warn(
  ------------------
  |  |  131|      3|#define zlog_warn(...) 0
  ------------------
  213|      3|			"%s: short join/prune message buffer for group list: size=%d minimum=%d from %pPA on %s",
  214|      3|			__func__, remain, 4, &src_addr, ifp->name);
  215|      3|		return -4;
  216|      3|	}
  217|       |
  218|    800|	++buf; /* skip reserved byte */
  219|    800|	msg_num_groups = *(const uint8_t *)buf;
  220|    800|	++buf;
  221|    800|	msg_holdtime = ntohs(*(const uint16_t *)buf);
  222|    800|	++buf;
  223|    800|	++buf;
  224|       |
  225|    800|	if (PIM_DEBUG_PIM_J_P)
  ------------------
  |  |  161|    800|#define PIM_DEBUG_PIM_J_P (router->debugs & PIM_MASK_PIM_J_P)
  |  |  ------------------
  |  |  |  |   88|    800|#define PIM_MASK_PIM_J_P             (1 << 16)
  |  |  ------------------
  |  |  |  Branch (161:27): [True: 0, False: 800]
  |  |  ------------------
  ------------------
  226|      0|		zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  227|    800|			"%s: join/prune upstream=%pPAs groups=%d holdtime=%d from %pPA on %s",
  228|    800|			__func__, &msg_upstream_addr, msg_num_groups,
  229|    800|			msg_holdtime, &src_addr, ifp->name);
  230|       |
  231|       |	/* Scan groups */
  232|  6.31k|	for (group = 0; group < msg_num_groups; ++group) {
  ------------------
  |  Branch (232:18): [True: 6.30k, False: 5]
  ------------------
  233|  6.30k|		pim_sgaddr sg;
  234|  6.30k|		uint8_t msg_source_flags;
  235|  6.30k|		uint16_t msg_num_joined_sources;
  236|  6.30k|		uint16_t msg_num_pruned_sources;
  237|  6.30k|		int source;
  238|  6.30k|		struct pim_ifchannel *starg_ch = NULL, *sg_ch = NULL;
  239|  6.30k|		bool filtered = false;
  240|       |
  241|  6.30k|		memset(&sg, 0, sizeof(sg));
  242|  6.30k|		addr_offset = pim_parse_addr_group(&sg, buf, pastend - buf);
  243|  6.30k|		if (addr_offset < 1) {
  ------------------
  |  Branch (243:7): [True: 100, False: 6.20k]
  ------------------
  244|    100|			return -5;
  245|    100|		}
  246|  6.20k|		buf += addr_offset;
  247|       |
  248|  6.20k|		remain = pastend - buf;
  249|  6.20k|		if (remain < 4) {
  ------------------
  |  Branch (249:7): [True: 12, False: 6.19k]
  ------------------
  250|     12|			zlog_warn(
  ------------------
  |  |  131|     12|#define zlog_warn(...) 0
  ------------------
  251|     12|				"%s: short join/prune buffer for source list: size=%d minimum=%d from %pPA on %s",
  252|     12|				__func__, remain, 4, &src_addr, ifp->name);
  253|     12|			return -6;
  254|     12|		}
  255|       |
  256|  6.19k|		msg_num_joined_sources = ntohs(*(const uint16_t *)buf);
  257|  6.19k|		buf += 2;
  258|  6.19k|		msg_num_pruned_sources = ntohs(*(const uint16_t *)buf);
  259|  6.19k|		buf += 2;
  260|       |
  261|  6.19k|		if (PIM_DEBUG_PIM_J_P)
  ------------------
  |  |  161|  6.19k|#define PIM_DEBUG_PIM_J_P (router->debugs & PIM_MASK_PIM_J_P)
  |  |  ------------------
  |  |  |  |   88|  6.19k|#define PIM_MASK_PIM_J_P             (1 << 16)
  |  |  ------------------
  |  |  |  Branch (161:27): [True: 0, False: 6.19k]
  |  |  ------------------
  ------------------
  262|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  263|  6.19k|				"%s: join/prune upstream=%pPAs group=%pPA/32 join_src=%d prune_src=%d from %pPA on %s",
  264|  6.19k|				__func__, &msg_upstream_addr, &sg.grp,
  265|  6.19k|				msg_num_joined_sources, msg_num_pruned_sources,
  266|  6.19k|				&src_addr, ifp->name);
  267|       |
  268|       |		/* boundary check */
  269|  6.19k|		filtered = pim_is_group_filtered(pim_ifp, &sg.grp);
  270|       |
  271|       |		/* Scan joined sources */
  272|  13.6k|		for (source = 0; source < msg_num_joined_sources; ++source) {
  ------------------
  |  Branch (272:20): [True: 7.61k, False: 6.03k]
  ------------------
  273|  7.61k|			addr_offset = pim_parse_addr_source(
  274|  7.61k|				&sg, &msg_source_flags, buf, pastend - buf);
  275|  7.61k|			if (addr_offset < 1) {
  ------------------
  |  Branch (275:8): [True: 164, False: 7.45k]
  ------------------
  276|    164|				return -7;
  277|    164|			}
  278|       |
  279|  7.45k|			buf += addr_offset;
  280|       |
  281|       |			/* if we are filtering this group, skip the join */
  282|  7.45k|			if (filtered)
  ------------------
  |  Branch (282:8): [True: 0, False: 7.45k]
  ------------------
  283|      0|				continue;
  284|       |
  285|  7.45k|			recv_join(ifp, neigh, msg_holdtime, msg_upstream_addr,
  286|  7.45k|				  &sg, msg_source_flags);
  287|       |
  288|  7.45k|			if (pim_addr_is_any(sg.src)) {
  ------------------
  |  Branch (288:8): [True: 3.88k, False: 3.57k]
  ------------------
  289|  3.88k|				starg_ch = pim_ifchannel_find(ifp, &sg);
  290|  3.88k|				if (starg_ch)
  ------------------
  |  Branch (290:9): [True: 3.23k, False: 643]
  ------------------
  291|  3.23k|					pim_ifchannel_set_star_g_join_state(
  292|  3.23k|						starg_ch, 0, 1);
  293|  3.88k|			}
  294|  7.45k|		}
  295|       |
  296|       |		/* Scan pruned sources */
  297|  61.1k|		for (source = 0; source < msg_num_pruned_sources; ++source) {
  ------------------
  |  Branch (297:20): [True: 55.6k, False: 5.51k]
  ------------------
  298|  55.6k|			addr_offset = pim_parse_addr_source(
  299|  55.6k|				&sg, &msg_source_flags, buf, pastend - buf);
  300|  55.6k|			if (addr_offset < 1) {
  ------------------
  |  Branch (300:8): [True: 519, False: 55.1k]
  ------------------
  301|    519|				return -8;
  302|    519|			}
  303|       |
  304|  55.1k|			buf += addr_offset;
  305|       |
  306|       |			/* if we are filtering this group, skip the prune */
  307|  55.1k|			if (filtered)
  ------------------
  |  Branch (307:8): [True: 0, False: 55.1k]
  ------------------
  308|      0|				continue;
  309|       |
  310|  55.1k|			recv_prune(ifp, neigh, msg_holdtime, msg_upstream_addr,
  311|  55.1k|				   &sg, msg_source_flags);
  312|       |			/*
  313|       |			 * So if we are receiving a S,G,RPT prune
  314|       |			 * before we have any data for that S,G
  315|       |			 * We need to retrieve the sg_ch after
  316|       |			 * we parse the prune.
  317|       |			 */
  318|  55.1k|			sg_ch = pim_ifchannel_find(ifp, &sg);
  319|       |
  320|  55.1k|			if (!sg_ch)
  ------------------
  |  Branch (320:8): [True: 1.26k, False: 53.8k]
  ------------------
  321|  1.26k|				continue;
  322|       |
  323|       |			/* (*,G) prune received */
  324|  53.8k|			for (ALL_LIST_ELEMENTS(sg_ch->sources, ch_node,
  ------------------
  |  |  320|  53.8k|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|  53.8k|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 9.10k, False: 44.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  321|   109k|	(node) != NULL                                                         \
  |  |  ------------------
  |  |  |  Branch (321:2): [True: 55.5k, False: 53.8k]
  |  |  ------------------
  |  |  322|   111k|		&& ((data) = static_cast(data, listgetdata(node)),             \
  |  |  ------------------
  |  |  |  |  204|   333k|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 55.5k, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 55.5k]
  |  |  |  |  |  Branch (204:28): [True: 55.5k, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 55.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:6): [True: 55.5k, False: 0]
  |  |  ------------------
  |  |  323|   111k|		    (nextnode) = node->next, 1);                               \
  |  |  324|  55.5k|	(node) = (nextnode), ((data) = NULL)
  ------------------
  325|  55.5k|					       nch_node, child)) {
  326|  55.5k|				if (PIM_IF_FLAG_TEST_S_G_RPT(child->flags)) {
  ------------------
  |  |   54|  55.5k|#define PIM_IF_FLAG_TEST_S_G_RPT(flags)  ((flags) & PIM_IF_FLAG_MASK_S_G_RPT)
  |  |  ------------------
  |  |  |  |   53|  55.5k|#define PIM_IF_FLAG_MASK_S_G_RPT         (1 << 2)
  |  |  ------------------
  |  |  |  Branch (54:42): [True: 38.8k, False: 16.7k]
  |  |  ------------------
  ------------------
  327|  38.8k|					if (child->ifjoin_state
  ------------------
  |  Branch (327:10): [True: 1.69k, False: 37.1k]
  ------------------
  328|  38.8k|					    == PIM_IFJOIN_PRUNE_PENDING_TMP)
  329|  1.69k|						EVENT_OFF(
  ------------------
  |  |  164|  1.69k|	do {                                                                   \
  |  |  165|  1.69k|		if ((thread))                                                  \
  |  |  ------------------
  |  |  |  Branch (165:7): [True: 0, False: 1.69k]
  |  |  ------------------
  |  |  166|  1.69k|			event_cancel(&(thread));                               \
  |  |  167|  1.69k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (167:11): [Folded, False: 1.69k]
  |  |  ------------------
  ------------------
  330|  38.8k|							child->t_ifjoin_prune_pending_timer);
  331|  38.8k|					EVENT_OFF(child->t_ifjoin_expiry_timer);
  ------------------
  |  |  164|  38.8k|	do {                                                                   \
  |  |  165|  38.8k|		if ((thread))                                                  \
  |  |  ------------------
  |  |  |  Branch (165:7): [True: 0, False: 38.8k]
  |  |  ------------------
  |  |  166|  38.8k|			event_cancel(&(thread));                               \
  |  |  167|  38.8k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (167:11): [Folded, False: 38.8k]
  |  |  ------------------
  ------------------
  332|  38.8k|					PIM_IF_FLAG_UNSET_S_G_RPT(child->flags);
  ------------------
  |  |   58|  38.8k|	((flags) &= (typeof((flags))) ~PIM_IF_FLAG_MASK_S_G_RPT)
  |  |  ------------------
  |  |  |  |   53|  38.8k|#define PIM_IF_FLAG_MASK_S_G_RPT         (1 << 2)
  |  |  ------------------
  ------------------
  333|  38.8k|					child->ifjoin_state = PIM_IFJOIN_NOINFO;
  334|  38.8k|					delete_on_noinfo(child);
  335|  38.8k|				}
  336|  55.5k|			}
  337|       |
  338|       |			/* Received SG-RPT Prune delete oif from specific S,G */
  339|  53.8k|			if (starg_ch && (msg_source_flags & PIM_RPT_BIT_MASK)
  ------------------
  |  |   31|  9.67k|#define PIM_RPT_BIT_MASK      (1 << 0)
  ------------------
  |  Branch (339:8): [True: 9.67k, False: 44.2k]
  |  Branch (339:20): [True: 9.22k, False: 451]
  ------------------
  340|  9.22k|			    && !(msg_source_flags & PIM_WILDCARD_BIT_MASK)) {
  ------------------
  |  |   32|  9.22k|#define PIM_WILDCARD_BIT_MASK (1 << 1)
  ------------------
  |  Branch (340:11): [True: 7.12k, False: 2.09k]
  ------------------
  341|  7.12k|				struct pim_upstream *up = sg_ch->upstream;
  342|  7.12k|				PIM_IF_FLAG_SET_S_G_RPT(sg_ch->flags);
  ------------------
  |  |   56|  7.12k|	((flags) |= (typeof((flags)))PIM_IF_FLAG_MASK_S_G_RPT)
  |  |  ------------------
  |  |  |  |   53|  7.12k|#define PIM_IF_FLAG_MASK_S_G_RPT         (1 << 2)
  |  |  ------------------
  ------------------
  343|  7.12k|				if (up) {
  ------------------
  |  Branch (343:9): [True: 7.12k, False: 0]
  ------------------
  344|  7.12k|					if (PIM_DEBUG_PIM_TRACE)
  ------------------
  |  |  146|  7.12k|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|  7.12k|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|  7.12k|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 7.12k]
  |  |  ------------------
  ------------------
  345|      0|						zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  346|  7.12k|							"%s: SGRpt flag is set, del inherit oif from up %s",
  347|  7.12k|							__func__, up->sg_str);
  348|  7.12k|					pim_channel_del_inherited_oif(
  349|  7.12k|						up->channel_oil,
  350|  7.12k|						starg_ch->interface,
  351|  7.12k|						__func__);
  352|  7.12k|				}
  353|  7.12k|			}
  354|  53.8k|		}
  355|  5.51k|		if (starg_ch && !filtered)
  ------------------
  |  Branch (355:7): [True: 2.92k, False: 2.58k]
  |  Branch (355:19): [True: 2.92k, False: 0]
  ------------------
  356|  2.92k|			pim_ifchannel_set_star_g_join_state(starg_ch, 1, 0);
  357|  5.51k|		starg_ch = NULL;
  358|  5.51k|	} /* scan groups */
  359|       |
  360|      5|	return 0;
  361|    800|}
pim_join.c:recv_join:
   43|  7.45k|{
   44|  7.45k|	struct pim_interface *pim_ifp = NULL;
   45|       |
   46|  7.45k|	if (PIM_DEBUG_PIM_TRACE)
  ------------------
  |  |  146|  7.45k|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|  7.45k|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|  7.45k|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 7.45k]
  |  |  ------------------
  ------------------
   47|      0|		zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
   48|  7.45k|			"%s: join (S,G)=%pSG rpt=%d wc=%d upstream=%pPAs holdtime=%d from %pPA on %s",
   49|  7.45k|			__func__, sg, !!(source_flags & PIM_RPT_BIT_MASK),
   50|  7.45k|			!!(source_flags & PIM_WILDCARD_BIT_MASK), &upstream,
   51|  7.45k|			holdtime, &neigh->source_addr, ifp->name);
   52|       |
   53|  7.45k|	pim_ifp = ifp->info;
   54|  7.45k|	assert(pim_ifp);
  ------------------
  |  |   51|  7.45k|	({                                                                     \
  |  |   52|  7.45k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  7.45k|			(used)) = {                                            \
  |  |   54|  7.45k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  7.45k|	{                                                                      \
  |  |  |  |  284|  7.45k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  7.45k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  7.45k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  7.45k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  7.45k|	}                                                                      \
  |  |  ------------------
  |  |   55|  7.45k|			.expr = #expr_,                                        \
  |  |   56|  7.45k|		};                                                             \
  |  |   57|  7.45k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  7.45k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  7.45k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  7.45k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  7.45k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 7.45k]
  |  |  |  Branch (58:24): [True: 7.45k, False: 0]
  |  |  ------------------
  |  |   59|  7.45k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  7.45k|	})
  ------------------
   55|       |
   56|  7.45k|	++pim_ifp->pim_ifstat_join_recv;
   57|       |
   58|       |	/*
   59|       |	 * If the RPT and WC are set it's a (*,G)
   60|       |	 * and the source is the RP
   61|       |	 */
   62|  7.45k|	if (CHECK_FLAG(source_flags, PIM_WILDCARD_BIT_MASK)) {
  ------------------
  |  |  394|  7.45k|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 901, False: 6.55k]
  |  |  ------------------
  ------------------
   63|       |		/* As per RFC 7761 Section 4.9.1:
   64|       |		 * The RPT (or Rendezvous Point Tree) bit is a 1-bit value for
   65|       |		 * use with PIM Join/Prune messages (see Section 4.9.5.1). If
   66|       |		 * the WC bit is 1, the RPT bit MUST be 1.
   67|       |		 */
   68|    901|		if (!CHECK_FLAG(source_flags, PIM_RPT_BIT_MASK)) {
  ------------------
  |  |  394|    901|#define CHECK_FLAG(V,F)      ((V) & (F))
  ------------------
  |  Branch (68:7): [True: 259, False: 642]
  ------------------
   69|    259|			if (PIM_DEBUG_PIM_J_P)
  ------------------
  |  |  161|    259|#define PIM_DEBUG_PIM_J_P (router->debugs & PIM_MASK_PIM_J_P)
  |  |  ------------------
  |  |  |  |   88|    259|#define PIM_MASK_PIM_J_P             (1 << 16)
  |  |  ------------------
  |  |  |  Branch (161:27): [True: 0, False: 259]
  |  |  ------------------
  ------------------
   70|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
   71|    259|					"Discarding (*,G)=%pSG join since WC bit is set but RPT bit is unset",
   72|    259|					sg);
   73|       |
   74|    259|			return;
   75|    259|		}
   76|       |
   77|    642|		struct pim_rpf *rp = RP(pim_ifp->pim, sg->grp);
  ------------------
  |  |   67|    642|#define RP(P, G)       pim_rp_g ((P), (G))
  ------------------
   78|    642|		pim_addr rpf_addr;
   79|       |
   80|    642|		if (!rp) {
  ------------------
  |  Branch (80:7): [True: 230, False: 412]
  ------------------
   81|    230|			zlog_warn("%s: Lookup of RP failed for %pSG", __func__,
  ------------------
  |  |  131|    230|#define zlog_warn(...) 0
  ------------------
   82|    230|				  sg);
   83|    230|			return;
   84|    230|		}
   85|       |		/*
   86|       |		 * If the RP sent in the message is not
   87|       |		 * our RP for the group, drop the message
   88|       |		 */
   89|    412|		rpf_addr = rp->rpf_addr;
   90|    412|		if (pim_addr_cmp(sg->src, rpf_addr)) {
  ------------------
  |  Branch (90:7): [True: 402, False: 10]
  ------------------
   91|    402|			zlog_warn(
  ------------------
  |  |  131|    402|#define zlog_warn(...) 0
  ------------------
   92|    402|				"%s: Specified RP(%pPAs) in join is different than our configured RP(%pPAs)",
   93|    402|				__func__, &sg->src, &rpf_addr);
   94|    402|			return;
   95|    402|		}
   96|       |
   97|     10|		if (pim_is_grp_ssm(pim_ifp->pim, sg->grp)) {
  ------------------
  |  Branch (97:7): [True: 1, False: 9]
  ------------------
   98|      1|			zlog_warn(
  ------------------
  |  |  131|      1|#define zlog_warn(...) 0
  ------------------
   99|      1|				"%s: Specified Group(%pPA) in join is now in SSM, not allowed to create PIM state",
  100|      1|				__func__, &sg->grp);
  101|      1|			return;
  102|      1|		}
  103|       |
  104|      9|		sg->src = PIMADDR_ANY;
  ------------------
  |  |   79|      9|#define PIMADDR_ANY (pim_addr){ }
  ------------------
  105|      9|	}
  106|       |
  107|       |	/* Restart join expiry timer */
  108|  6.56k|	pim_ifchannel_join_add(ifp, neigh->source_addr, upstream, sg,
  109|  6.56k|			       source_flags, holdtime);
  110|  6.56k|}
pim_join.c:recv_prune:
  115|  55.1k|{
  116|  55.1k|	struct pim_interface *pim_ifp = NULL;
  117|       |
  118|  55.1k|	if (PIM_DEBUG_PIM_TRACE)
  ------------------
  |  |  146|  55.1k|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|  55.1k|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|  55.1k|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 55.1k]
  |  |  ------------------
  ------------------
  119|      0|		zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  120|  55.1k|			"%s: prune (S,G)=%pSG rpt=%d wc=%d upstream=%pPAs holdtime=%d from %pPA on %s",
  121|  55.1k|			__func__, sg, source_flags & PIM_RPT_BIT_MASK,
  122|  55.1k|			source_flags & PIM_WILDCARD_BIT_MASK, &upstream,
  123|  55.1k|			holdtime, &neigh->source_addr, ifp->name);
  124|       |
  125|  55.1k|	pim_ifp = ifp->info;
  126|  55.1k|	assert(pim_ifp);
  ------------------
  |  |   51|  55.1k|	({                                                                     \
  |  |   52|  55.1k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  55.1k|			(used)) = {                                            \
  |  |   54|  55.1k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  55.1k|	{                                                                      \
  |  |  |  |  284|  55.1k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  55.1k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  55.1k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  55.1k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  55.1k|	}                                                                      \
  |  |  ------------------
  |  |   55|  55.1k|			.expr = #expr_,                                        \
  |  |   56|  55.1k|		};                                                             \
  |  |   57|  55.1k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  55.1k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  55.1k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  55.1k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  55.1k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 55.1k]
  |  |  |  Branch (58:24): [True: 55.1k, False: 0]
  |  |  ------------------
  |  |   59|  55.1k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  55.1k|	})
  ------------------
  127|       |
  128|  55.1k|	++pim_ifp->pim_ifstat_prune_recv;
  129|       |
  130|  55.1k|	if (CHECK_FLAG(source_flags, PIM_WILDCARD_BIT_MASK)) {
  ------------------
  |  |  394|  55.1k|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 8.81k, False: 46.3k]
  |  |  ------------------
  ------------------
  131|       |		/* As per RFC 7761 Section 4.9.1:
  132|       |		 * The RPT (or Rendezvous Point Tree) bit is a 1-bit value for
  133|       |		 * use with PIM Join/Prune messages (see Section 4.9.5.1). If
  134|       |		 * the WC bit is 1, the RPT bit MUST be 1.
  135|       |		 */
  136|  8.81k|		if (!CHECK_FLAG(source_flags, PIM_RPT_BIT_MASK)) {
  ------------------
  |  |  394|  8.81k|#define CHECK_FLAG(V,F)      ((V) & (F))
  ------------------
  |  Branch (136:7): [True: 502, False: 8.31k]
  ------------------
  137|    502|			if (PIM_DEBUG_PIM_J_P)
  ------------------
  |  |  161|    502|#define PIM_DEBUG_PIM_J_P (router->debugs & PIM_MASK_PIM_J_P)
  |  |  ------------------
  |  |  |  |   88|    502|#define PIM_MASK_PIM_J_P             (1 << 16)
  |  |  ------------------
  |  |  |  Branch (161:27): [True: 0, False: 502]
  |  |  ------------------
  ------------------
  138|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  139|    502|					"Discarding (*,G)=%pSG prune since WC bit is set but RPT bit is unset",
  140|    502|					sg);
  141|       |
  142|    502|			return;
  143|    502|		}
  144|       |
  145|       |		/*
  146|       |		 * RFC 4601 Section 4.5.2:
  147|       |		 * Received Prune(*,G) messages are processed even if the
  148|       |		 * RP in the message does not match RP(G).
  149|       |		 */
  150|  8.31k|		if (PIM_DEBUG_PIM_TRACE)
  ------------------
  |  |  146|  8.31k|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|  8.31k|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|  8.31k|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 8.31k]
  |  |  ------------------
  ------------------
  151|      0|			zlog_debug("%s: Prune received with RP(%pPAs) for %pSG",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  152|  8.31k|				   __func__, &sg->src, sg);
  153|       |
  154|  8.31k|		sg->src = PIMADDR_ANY;
  ------------------
  |  |   79|  8.31k|#define PIMADDR_ANY (pim_addr){ }
  ------------------
  155|  8.31k|	}
  156|       |
  157|  54.6k|	pim_ifchannel_prune(ifp, upstream, sg, source_flags, holdtime);
  158|  54.6k|}

pim_jp_agg_upstream_verification:
  203|  85.1k|{
  204|       |#ifdef PIM_JP_AGG_DEBUG
  205|       |	struct interface *ifp;
  206|       |	struct pim_interface *pim_ifp;
  207|       |	struct pim_instance *pim;
  208|       |
  209|       |	if (!up->rpf.source_nexthop.interface) {
  210|       |		if (PIM_DEBUG_PIM_TRACE)
  211|       |			zlog_debug("%s: up %s RPF is not present", __func__,
  212|       |				   up->sg_str);
  213|       |		return;
  214|       |	}
  215|       |
  216|       |	pim_ifp = up->rpf.source_nexthop.interface->info;
  217|       |	pim = pim_ifp->pim;
  218|       |
  219|       |	FOR_ALL_INTERFACES (pim->vrf, ifp) {
  220|       |		pim_ifp = ifp->info;
  221|       |		struct listnode *nnode;
  222|       |
  223|       |		if (ignore && ifp == up->rpf.source_nexthop.interface)
  224|       |			continue;
  225|       |
  226|       |		if (pim_ifp) {
  227|       |			struct pim_neighbor *neigh;
  228|       |			for (ALL_LIST_ELEMENTS_RO(pim_ifp->pim_neighbor_list,
  229|       |						  nnode, neigh)) {
  230|       |				assert(!pim_jp_agg_is_in_list(
  231|       |					neigh->upstream_jp_agg, up));
  232|       |			}
  233|       |		}
  234|       |	}
  235|       |#else
  236|  85.1k|	return;
  237|  85.1k|#endif
  238|  85.1k|}
pim_jp_agg_single_upstream_send:
  325|    937|{
  326|    937|	struct list groups, sources;
  327|    937|	struct pim_jp_agg_group jag;
  328|    937|	struct pim_jp_sources js;
  329|       |
  330|       |	/* skip JP upstream messages if source is directly connected */
  331|    937|	if (!up || !rpf->source_nexthop.interface ||
  ------------------
  |  Branch (331:6): [True: 0, False: 937]
  |  Branch (331:13): [True: 937, False: 0]
  ------------------
  332|      0|		pim_if_connected_to_source(rpf->source_nexthop.interface,
  ------------------
  |  Branch (332:3): [True: 0, False: 0]
  ------------------
  333|      0|			up->sg.src) ||
  334|      0|		if_is_loopback(rpf->source_nexthop.interface))
  ------------------
  |  Branch (334:3): [True: 0, False: 0]
  ------------------
  335|    937|		return;
  336|       |
  337|      0|	memset(&groups, 0, sizeof(groups));
  338|      0|	memset(&sources, 0, sizeof(sources));
  339|      0|	jag.sources = &sources;
  340|       |
  341|      0|	listnode_add(&groups, &jag);
  342|      0|	listnode_add(jag.sources, &js);
  343|       |
  344|      0|	jag.group = up->sg.grp;
  345|      0|	js.up = up;
  346|      0|	js.is_join = is_join;
  347|       |
  348|      0|	pim_joinprune_send(rpf, &groups);
  349|       |
  350|      0|	list_delete_all_node(jag.sources);
  351|      0|	list_delete_all_node(&groups);
  352|      0|}

pim_macro_chisin_joins:
   68|   153k|{
   69|   153k|	return downstream_jpstate_isjoined(ch);
   70|   153k|}
pim_macro_ch_lost_assert:
   97|   108k|{
   98|   108k|	struct interface *ifp;
   99|   108k|	struct pim_interface *pim_ifp;
  100|   108k|	struct pim_assert_metric spt_assert_metric;
  101|       |
  102|   108k|	ifp = ch->interface;
  103|   108k|	if (!ifp) {
  ------------------
  |  Branch (103:6): [True: 0, False: 108k]
  ------------------
  104|      0|		zlog_warn("%s: (S,G)=%s: null interface", __func__, ch->sg_str);
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
  105|      0|		return 0; /* false */
  106|      0|	}
  107|       |
  108|       |	/* RPF_interface(S) == I ? */
  109|   108k|	if (ch->upstream->rpf.source_nexthop.interface == ifp)
  ------------------
  |  Branch (109:6): [True: 0, False: 108k]
  ------------------
  110|      0|		return 0; /* false */
  111|       |
  112|   108k|	pim_ifp = ifp->info;
  113|   108k|	if (!pim_ifp) {
  ------------------
  |  Branch (113:6): [True: 0, False: 108k]
  ------------------
  114|      0|		zlog_warn("%s: (S,G)=%s: multicast not enabled on interface %s",
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
  115|      0|			  __func__, ch->sg_str, ifp->name);
  116|      0|		return 0; /* false */
  117|      0|	}
  118|       |
  119|   108k|	if (pim_addr_is_any(ch->ifassert_winner))
  ------------------
  |  Branch (119:6): [True: 108k, False: 8]
  ------------------
  120|   108k|		return 0; /* false */
  121|       |
  122|       |	/* AssertWinner(S,G,I) == me ? */
  123|      8|	if (!pim_addr_cmp(ch->ifassert_winner, pim_ifp->primary_address))
  ------------------
  |  Branch (123:6): [True: 8, False: 0]
  ------------------
  124|      8|		return 0; /* false */
  125|       |
  126|      0|	spt_assert_metric = pim_macro_spt_assert_metric(
  127|      0|		&ch->upstream->rpf, pim_ifp->primary_address);
  128|       |
  129|      0|	return pim_assert_metric_better(&ch->ifassert_winner_metric,
  130|      0|					&spt_assert_metric);
  131|      8|}
pim_macro_chisin_pim_include:
  146|  42.7k|{
  147|  42.7k|	struct pim_interface *pim_ifp = ch->interface->info;
  148|  42.7k|	bool mlag_active = false;
  149|       |
  150|  42.7k|	if (!pim_ifp) {
  ------------------
  |  Branch (150:6): [True: 0, False: 42.7k]
  ------------------
  151|      0|		zlog_warn("%s: (S,G)=%s: multicast not enabled on interface %s",
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
  152|      0|			  __func__, ch->sg_str, ch->interface->name);
  153|      0|		return 0; /* false */
  154|      0|	}
  155|       |
  156|       |	/* local_receiver_include(S,G,I) ? */
  157|  42.7k|	if (!local_receiver_include(ch))
  ------------------
  |  Branch (157:6): [True: 42.7k, False: 0]
  ------------------
  158|  42.7k|		return 0; /* false */
  159|       |
  160|       |	/* OR AssertWinner(S,G,I) == me ? */
  161|      0|	if (!pim_addr_cmp(ch->ifassert_winner, pim_ifp->primary_address))
  ------------------
  |  Branch (161:6): [True: 0, False: 0]
  ------------------
  162|      0|		return 1; /* true */
  163|       |
  164|       |	/*
  165|       |	 * When we have a activeactive interface we need to signal
  166|       |	 * that this interface is interesting to the upstream
  167|       |	 * decision to JOIN *if* we are syncing over the interface
  168|       |	 */
  169|      0|	if (pim_ifp->activeactive) {
  ------------------
  |  Branch (169:6): [True: 0, False: 0]
  ------------------
  170|      0|		struct pim_upstream *up = ch->upstream;
  171|       |
  172|      0|		if (PIM_UPSTREAM_FLAG_TEST_MLAG_INTERFACE(up->flags))
  ------------------
  |  |  110|      0|#define PIM_UPSTREAM_FLAG_TEST_MLAG_INTERFACE(flags) ((flags)&PIM_UPSTREAM_FLAG_MASK_MLAG_INTERFACE)
  |  |  ------------------
  |  |  |  |   82|      0|#define PIM_UPSTREAM_FLAG_MASK_MLAG_INTERFACE          (1 << 21)
  |  |  ------------------
  |  |  |  Branch (110:54): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  173|      0|			mlag_active = true;
  174|      0|	}
  175|       |
  176|      0|	return (
  177|       |		/* I_am_DR( I ) ? */
  178|      0|		(PIM_I_am_DR(pim_ifp) || mlag_active) &&
  ------------------
  |  |   26|      0|	!pim_addr_cmp((pim_ifp)->pim_dr_addr, (pim_ifp)->primary_address)
  |  |  ------------------
  |  |  |  Branch (26:2): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (178:28): [True: 0, False: 0]
  ------------------
  179|       |		/* lost_assert(S,G,I) == false ? */
  180|      0|		(!pim_macro_ch_lost_assert(ch)));
  ------------------
  |  Branch (180:3): [True: 0, False: 0]
  ------------------
  181|      0|}
pim_macro_chisin_joins_or_include:
  184|   108k|{
  185|   108k|	if (pim_macro_chisin_joins(ch))
  ------------------
  |  Branch (185:6): [True: 65.4k, False: 42.7k]
  ------------------
  186|  65.4k|		return 1; /* true */
  187|       |
  188|  42.7k|	return pim_macro_chisin_pim_include(ch);
  189|   108k|}
pim_macro_ch_could_assert_eval:
  219|  45.0k|{
  220|  45.0k|	struct interface *ifp;
  221|       |
  222|  45.0k|	ifp = ch->interface;
  223|  45.0k|	if (!ifp) {
  ------------------
  |  Branch (223:6): [True: 0, False: 45.0k]
  ------------------
  224|      0|		zlog_warn("%s: (S,G)=%s: null interface", __func__, ch->sg_str);
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
  225|      0|		return 0; /* false */
  226|      0|	}
  227|       |
  228|       |	/* SPTbit(S,G) == true */
  229|  45.0k|	if (ch->upstream->sptbit == PIM_UPSTREAM_SPTBIT_FALSE)
  ------------------
  |  Branch (229:6): [True: 45.0k, False: 0]
  ------------------
  230|  45.0k|		return 0; /* false */
  231|       |
  232|       |	/* RPF_interface(S) != I ? */
  233|      0|	if (ch->upstream->rpf.source_nexthop.interface == ifp)
  ------------------
  |  Branch (233:6): [True: 0, False: 0]
  ------------------
  234|      0|		return 0; /* false */
  235|       |
  236|       |	/* I in joins(S,G) (+) pim_include(S,G) ? */
  237|      0|	return pim_macro_chisin_joins_or_include(ch);
  238|      0|}
pim_macro_ch_my_assert_metric_eval:
  283|  86.4k|{
  284|  86.4k|	struct pim_interface *pim_ifp;
  285|       |
  286|  86.4k|	pim_ifp = ch->interface->info;
  287|       |
  288|  86.4k|	if (pim_ifp) {
  ------------------
  |  Branch (288:6): [True: 86.4k, False: 0]
  ------------------
  289|  86.4k|		if (PIM_IF_FLAG_TEST_COULD_ASSERT(ch->flags)) {
  ------------------
  |  |   35|  86.4k|#define PIM_IF_FLAG_TEST_COULD_ASSERT(flags) ((flags) & PIM_IF_FLAG_MASK_COULD_ASSERT)
  |  |  ------------------
  |  |  |  |   34|  86.4k|#define PIM_IF_FLAG_MASK_COULD_ASSERT (1 << 0)
  |  |  ------------------
  |  |  |  Branch (35:46): [True: 0, False: 86.4k]
  |  |  ------------------
  ------------------
  290|      0|			return pim_macro_spt_assert_metric(
  291|      0|				&ch->upstream->rpf, pim_ifp->primary_address);
  292|      0|		}
  293|  86.4k|	}
  294|       |
  295|  86.4k|	return router->infinite_assert_metric;
  296|  86.4k|}
pim_macro_chisin_oiflist:
  344|  1.46k|{
  345|  1.46k|	if (ch->upstream->join_state == PIM_UPSTREAM_NOTJOINED) {
  ------------------
  |  Branch (345:6): [True: 1.46k, False: 0]
  ------------------
  346|       |		/* oiflist is NULL */
  347|  1.46k|		return 0; /* false */
  348|  1.46k|	}
  349|       |
  350|       |	/* oiflist = oiflist (-) iif */
  351|      0|	if (ch->interface == ch->upstream->rpf.source_nexthop.interface)
  ------------------
  |  Branch (351:6): [True: 0, False: 0]
  ------------------
  352|      0|		return 0; /* false */
  353|       |
  354|      0|	return pim_macro_chisin_inherited_olist(ch);
  355|      0|}
pim_macro_assert_tracking_desired_eval:
  375|  45.0k|{
  376|  45.0k|	struct pim_interface *pim_ifp;
  377|  45.0k|	struct interface *ifp;
  378|       |
  379|  45.0k|	ifp = ch->interface;
  380|  45.0k|	if (!ifp) {
  ------------------
  |  Branch (380:6): [True: 0, False: 45.0k]
  ------------------
  381|      0|		zlog_warn("%s: (S,G)=%s: null interface", __func__, ch->sg_str);
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
  382|      0|		return 0; /* false */
  383|      0|	}
  384|       |
  385|  45.0k|	pim_ifp = ifp->info;
  386|  45.0k|	if (!pim_ifp) {
  ------------------
  |  Branch (386:6): [True: 0, False: 45.0k]
  ------------------
  387|      0|		zlog_warn("%s: (S,G)=%s: multicast not enabled on interface %s",
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
  388|      0|			  __func__, ch->sg_str, ch->interface->name);
  389|      0|		return 0; /* false */
  390|      0|	}
  391|       |
  392|       |	/* I in joins(S,G) ? */
  393|  45.0k|	if (pim_macro_chisin_joins(ch))
  ------------------
  |  Branch (393:6): [True: 1.47k, False: 43.6k]
  ------------------
  394|  1.47k|		return 1; /* true */
  395|       |
  396|       |	/* local_receiver_include(S,G,I) ? */
  397|  43.6k|	if (local_receiver_include(ch)) {
  ------------------
  |  Branch (397:6): [True: 0, False: 43.6k]
  ------------------
  398|       |		/* I_am_DR(I) ? */
  399|      0|		if (PIM_I_am_DR(pim_ifp))
  ------------------
  |  |   26|      0|	!pim_addr_cmp((pim_ifp)->pim_dr_addr, (pim_ifp)->primary_address)
  |  |  ------------------
  |  |  |  Branch (26:2): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  400|      0|			return 1; /* true */
  401|       |
  402|       |		/* AssertWinner(S,G,I) == me ? */
  403|      0|		if (!pim_addr_cmp(ch->ifassert_winner,
  ------------------
  |  Branch (403:7): [True: 0, False: 0]
  ------------------
  404|      0|				  pim_ifp->primary_address))
  405|      0|			return 1; /* true */
  406|      0|	}
  407|       |
  408|       |	/* RPF_interface(S) == I ? */
  409|  43.6k|	if (ch->upstream->rpf.source_nexthop.interface == ifp) {
  ------------------
  |  Branch (409:6): [True: 0, False: 43.6k]
  ------------------
  410|       |		/* JoinDesired(S,G) ? */
  411|      0|		if (PIM_UPSTREAM_FLAG_TEST_DR_JOIN_DESIRED(ch->upstream->flags))
  ------------------
  |  |   87|      0|#define PIM_UPSTREAM_FLAG_TEST_DR_JOIN_DESIRED(flags) ((flags) & PIM_UPSTREAM_FLAG_MASK_DR_JOIN_DESIRED)
  |  |  ------------------
  |  |  |  |   18|      0|#define PIM_UPSTREAM_FLAG_MASK_DR_JOIN_DESIRED         (1 << 0)
  |  |  ------------------
  |  |  |  Branch (87:55): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  412|      0|			return 1; /* true */
  413|      0|	}
  414|       |
  415|  43.6k|	return 0; /* false */
  416|  43.6k|}
pim_macro.c:downstream_jpstate_isjoined:
   29|   153k|{
   30|   153k|	switch (ch->ifjoin_state) {
  ------------------
  |  Branch (30:10): [True: 153k, False: 0]
  ------------------
   31|  86.4k|	case PIM_IFJOIN_NOINFO:
  ------------------
  |  Branch (31:2): [True: 86.4k, False: 66.9k]
  ------------------
   32|  86.4k|	case PIM_IFJOIN_PRUNE:
  ------------------
  |  Branch (32:2): [True: 0, False: 153k]
  ------------------
   33|  86.4k|	case PIM_IFJOIN_PRUNE_TMP:
  ------------------
  |  Branch (33:2): [True: 0, False: 153k]
  ------------------
   34|  86.4k|	case PIM_IFJOIN_PRUNE_PENDING_TMP:
  ------------------
  |  Branch (34:2): [True: 0, False: 153k]
  ------------------
   35|  86.4k|		return 0;
   36|  27.4k|	case PIM_IFJOIN_JOIN:
  ------------------
  |  Branch (36:2): [True: 27.4k, False: 125k]
  ------------------
   37|  66.9k|	case PIM_IFJOIN_PRUNE_PENDING:
  ------------------
  |  Branch (37:2): [True: 39.5k, False: 113k]
  ------------------
   38|  66.9k|		return 1;
   39|   153k|	}
   40|      0|	return 0;
   41|   153k|}
pim_macro.c:local_receiver_include:
   50|  86.4k|{
   51|       |	/* local_receiver_include(S,G,I) ? */
   52|  86.4k|	return ch->local_ifmembership == PIM_IFMEMBERSHIP_INCLUDE;
   53|  86.4k|}

LLVMFuzzerTestOneInput:
  166|  2.91k|{
  167|  2.91k|	if (!FuzzingInitialized) {
  ------------------
  |  Branch (167:6): [True: 1, False: 2.91k]
  ------------------
  168|      1|		FuzzingInit();
  169|      1|		FuzzingInitialized = true;
  170|      1|		FuzzingPim = FuzzingCreatePimInstance();
  171|      1|	}
  172|       |
  173|  2.91k|	struct pim_instance *pim;
  174|  2.91k|#ifdef FUZZING_LIBFUZZER
  175|  2.91k|	pim = FuzzingPim;
  176|       |#else
  177|       |	pim = FuzzingPim;
  178|       |#endif
  179|       |
  180|  2.91k|	int result;
  181|       |
  182|  2.91k|	uint8_t *input = malloc(size);
  183|  2.91k|	memcpy(input, data, size);
  184|       |
  185|       |#ifdef KERNEL_IFACE
  186|       |	result = pim_mroute_msg(pim, (const char *) input, size, 69);
  187|       |#else
  188|  2.91k|	int retval;
  189|  2.91k|	struct in_addr src;
  190|  2.91k|	struct in_addr grp;
  191|       |
  192|  2.91k|	memset(&src, '\0', sizeof(src));
  193|  2.91k|	memset(&grp, '\0', sizeof(grp));
  194|       |
  195|  2.91k|	retval = inet_aton("10.1.1.1", &src);
  196|  2.91k|	retval = inet_aton("10.1.1.2", &grp);
  197|       |
  198|  2.91k|	pim_sgaddr sg;
  199|  2.91k|	sg.src = src;
  200|  2.91k|	sg.grp = grp;
  201|  2.91k|	result = pim_pim_packet(FuzzingIfp, input, size, sg);
  202|       |
  203|  2.91k|#endif /* KERNEL_IFACE */
  204|       |
  205|  2.91k|	free(input);
  206|       |
  207|  2.91k|	return result;
  208|  2.91k|}
pim_main.c:FuzzingInit:
  101|      1|{
  102|      1|	vrf_configure_backend(VRF_BACKEND_VRF_LITE);
  103|       |
  104|      1|	const char *name[] = {"pimd"};
  105|       |
  106|      1|	frr_preinit(&pimd_di, 1, (char **)name);
  107|      1|	pim_router_init();
  108|       |
  109|       |	/*
  110|       |	 * Initializations
  111|       |	 */
  112|      1|	pim_error_init();
  113|      1|	pim_vrf_init();
  114|      1|	access_list_init();
  115|      1|	prefix_list_init();
  116|      1|	prefix_list_add_hook(pim_prefix_list_update);
  117|      1|	prefix_list_delete_hook(pim_prefix_list_update);
  118|       |
  119|      1|	pim_route_map_init();
  120|      1|	pim_init();
  121|       |
  122|       |	/*
  123|       |	 * Initialize zclient "update" and "lookup" sockets
  124|       |	 */
  125|      1|	if_zapi_callbacks(pim_ifp_create, pim_ifp_up,
  126|      1|			  pim_ifp_down, pim_ifp_destroy);
  127|      1|	pim_zebra_init();
  128|      1|	pim_bfd_init();
  129|      1|	pim_mlag_init();
  130|       |
  131|       |	/* Create some fake interface */
  132|       |
  133|       |	/* Source address stuff */
  134|      1|	struct prefix p;
  135|      1|	str2prefix("27.0.0.9/24", &p);
  136|       |
  137|       |	/* Create system interface */
  138|      1|	FuzzingIfp = if_get_by_name("fuzziface", VRF_DEFAULT, "default");
  ------------------
  |  |  254|      1|#define VRF_DEFAULT 0
  ------------------
  139|      1|	if_set_index(FuzzingIfp, 69);
  140|       |
  141|      1|	connected_add_by_prefix(FuzzingIfp, &p, NULL);
  142|       |
  143|       |	return true;
  144|      1|}
pim_main.c:FuzzingCreatePimInstance:
  147|      1|{
  148|       |	/* Create pim stuff */
  149|      1|	fprintf(stderr, ">>>>>>>>> %p\n", FuzzingIfp);
  150|      1|	struct pim_interface *pim_ifp = pim_if_new(FuzzingIfp, true, true, false, false);
  151|      1|	pim_igmp_sock_add(pim_ifp->gm_socket_list, FuzzingSrc, FuzzingIfp, false);
  152|       |
  153|      1|	struct pim_instance *pim = vrf_lookup_by_id(VRF_DEFAULT)->info;
  ------------------
  |  |  254|      1|#define VRF_DEFAULT 0
  ------------------
  154|      1|	pim_if_create_pimreg(pim);
  155|      1|	pim_hello_options ho = 0;
  156|      1|	pim_neighbor_add(FuzzingIfp, FuzzingSrc, ho, 210, 1, 1, 30, 20, NULL, 0);
  157|       |
  158|      1|	return pim;
  159|      1|}

pim_instance_mlag_init:
 1046|      1|{
 1047|      1|	if (!pim)
  ------------------
  |  Branch (1047:6): [True: 0, False: 1]
  ------------------
 1048|      0|		return;
 1049|       |
 1050|      1|	pim->inst_mlag_intf_cnt = 0;
 1051|      1|}
pim_mlag_init:
 1081|      1|{
 1082|      1|	pim_mlag_param_reset();
 1083|      1|	router->pim_mlag_intf_cnt = 0;
 1084|      1|	router->connected_to_mlag = false;
 1085|      1|	router->mlag_fifo = stream_fifo_new();
 1086|      1|	router->zpthread_mlag_write = NULL;
 1087|      1|	router->mlag_stream = stream_new(MLAG_BUF_LIMIT);
  ------------------
  |  |   19|      1|#define MLAG_BUF_LIMIT 2048
  ------------------
 1088|      1|}
pim_mlag.c:pim_mlag_param_reset:
  888|      1|{
  889|       |	/* reset the cached params and stats */
  890|      1|	router->mlag_flags &=
  891|      1|		(uint8_t) ~(PIM_MLAGF_STATUS_RXED | PIM_MLAGF_LOCAL_CONN_UP
  892|      1|			    | PIM_MLAGF_PEER_CONN_UP | PIM_MLAGF_PEER_ZEBRA_UP);
  893|      1|	router->local_vtep_ip.s_addr = INADDR_ANY;
  894|       |	router->anycast_vtep_ip.s_addr = INADDR_ANY;
  895|      1|	router->mlag_role = MLAG_ROLE_NONE;
  896|      1|	memset(&router->mlag_stats.msg, 0, sizeof(router->mlag_stats.msg));
  897|      1|	router->peerlink_rif[0] = '\0';
  898|      1|}

pim_mroute_socket_enable:
  822|      1|{
  823|      1|	int fd;
  824|       |
  825|      1|	frr_with_privs(&pimd_privs) {
  ------------------
  |  |  132|      1|	for (struct zebra_privs_t *_once = NULL,                               \
  |  |  133|      1|				  *_privs __attribute__(                       \
  |  |  134|      1|					  (unused, cleanup(_zprivs_lower))) =  \
  |  |  135|      1|					  _zprivs_raise(privs, __func__);      \
  |  |  136|      2|	     _once == NULL; _once = (void *)1)
  |  |  ------------------
  |  |  |  Branch (136:7): [True: 1, False: 1]
  |  |  ------------------
  ------------------
  826|       |
  827|       |#ifndef FUZZING
  828|       |#if PIM_IPV == 4
  829|       |		fd = socket(AF_INET, SOCK_RAW, IPPROTO_IGMP);
  830|       |#else
  831|       |		fd = socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6);
  832|       |#endif
  833|       |		if (fd < 0) {
  834|       |			zlog_warn("Could not create mroute socket: errno=%d: %s",
  835|       |				  errno,
  836|       |				  safe_strerror(errno));
  837|       |			return -2;
  838|       |		}
  839|       |#else
  840|      1|		fd = 69;
  841|      1|#endif
  842|       |
  843|       |#ifndef FUZZING
  844|       |#if PIM_IPV == 6
  845|       |		struct icmp6_filter filter[1];
  846|       |		int ret;
  847|       |
  848|       |		/* Unlike IPv4, this socket is not used for MLD, so just drop
  849|       |		 * everything with an empty ICMP6 filter.  Otherwise we get
  850|       |		 * all kinds of garbage here, possibly even non-multicast
  851|       |		 * related ICMPv6 traffic (e.g. ping)
  852|       |		 *
  853|       |		 * (mroute kernel upcall "packets" are injected directly on the
  854|       |		 * socket, this sockopt -or any other- has no effect on them)
  855|       |		 */
  856|       |		ICMP6_FILTER_SETBLOCKALL(filter);
  857|       |		ret = setsockopt(fd, SOL_ICMPV6, ICMP6_FILTER, filter,
  858|       |				 sizeof(filter));
  859|       |		if (ret)
  860|       |			zlog_err(
  861|       |				"(VRF %s) failed to set mroute control filter: %m",
  862|       |				pim->vrf->name);
  863|       |#endif
  864|       |#else
  865|      1|		fd = 69;
  866|      1|#endif
  867|       |
  868|      1|#ifdef SO_BINDTODEVICE
  869|      1|		if (pim->vrf->vrf_id != VRF_DEFAULT
  ------------------
  |  |  254|      2|#define VRF_DEFAULT 0
  ------------------
  |  Branch (869:7): [True: 0, False: 1]
  ------------------
  870|      0|		    && setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE,
  ------------------
  |  Branch (870:10): [True: 0, False: 0]
  ------------------
  871|      0|				  pim->vrf->name, strlen(pim->vrf->name))) {
  872|      0|			zlog_warn("Could not setsockopt SO_BINDTODEVICE: %s",
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
  873|      0|				  safe_strerror(errno));
  874|      0|			close(fd);
  875|      0|			return -3;
  876|      0|		}
  877|      1|#endif
  878|       |
  879|      1|	}
  880|       |
  881|      1|	pim->mroute_socket = fd;
  882|       |#ifndef FUZZING
  883|       |	if (pim_mroute_set(pim, 1)) {
  884|       |		zlog_warn(
  885|       |			"Could not enable mroute on socket fd=%d: errno=%d: %s",
  886|       |			fd, errno, safe_strerror(errno));
  887|       |		close(fd);
  888|       |		pim->mroute_socket = -1;
  889|       |		return -3;
  890|       |	}
  891|       |
  892|       |	pim->mroute_socket_creation = pim_time_monotonic_sec();
  893|       |
  894|       |	mroute_read_on(pim);
  895|       |#endif
  896|       |
  897|      1|	return 0;
  898|      1|}
pim_mroute_add_vif:
  928|      2|{
  929|      2|	struct pim_interface *pim_ifp = ifp->info;
  930|      2|	pim_vifctl vc;
  931|      2|	int err;
  932|       |
  933|      2|	if (PIM_DEBUG_MROUTE)
  ------------------
  |  |  158|      2|	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   85|      2|#define PIM_MASK_MROUTE              (1 << 13)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   86|      2|#define PIM_MASK_MROUTE_DETAIL       (1 << 14)
  |  |  ------------------
  |  |  |  Branch (158:2): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  934|      0|		zlog_debug("%s: Add Vif %d (%s[%s])", __func__,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  935|      2|			   pim_ifp->mroute_vif_index, ifp->name,
  936|      2|			   pim_ifp->pim->vrf->name);
  937|       |
  938|      2|	memset(&vc, 0, sizeof(vc));
  939|      2|	vc.vc_vifi = pim_ifp->mroute_vif_index;
  ------------------
  |  |   36|      2|#define vc_vifi vifc_vifi
  ------------------
  940|      2|#if PIM_IPV == 4
  941|      2|#ifdef VIFF_USE_IFINDEX
  942|      2|	vc.vc_lcl_ifindex = ifp->ifindex;
  ------------------
  |  |   41|      2|#define vc_lcl_ifindex vifc_lcl_ifindex
  ------------------
  943|       |#else
  944|       |	if (ifaddr.s_addr == INADDR_ANY) {
  945|       |		zlog_warn(
  946|       |			"%s: unnumbered interfaces are not supported on this platform",
  947|       |			__func__);
  948|       |		return -1;
  949|       |	}
  950|       |	memcpy(&vc.vc_lcl_addr, &ifaddr, sizeof(vc.vc_lcl_addr));
  951|       |#endif
  952|       |#else
  953|       |	vc.vc_pifi = ifp->ifindex;
  954|       |#endif
  955|      2|	vc.vc_flags = flags;
  ------------------
  |  |   37|      2|#define vc_flags vifc_flags
  ------------------
  956|      2|	vc.vc_threshold = PIM_MROUTE_MIN_TTL;
  ------------------
  |  |   38|      2|#define vc_threshold vifc_threshold
  ------------------
              	vc.vc_threshold = PIM_MROUTE_MIN_TTL;
  ------------------
  |  |   21|      2|#define PIM_MROUTE_MIN_TTL (1)
  ------------------
  957|      2|	vc.vc_rate_limit = 0;
  ------------------
  |  |   39|      2|#define vc_rate_limit vifc_rate_limit
  ------------------
  958|       |
  959|      2|#if PIM_IPV == 4
  960|       |#ifdef PIM_DVMRP_TUNNEL
  961|       |	if (vc.vc_flags & VIFF_TUNNEL) {
  962|       |		memcpy(&vc.vc_rmt_addr, &vif_remote_addr,
  963|       |		       sizeof(vc.vc_rmt_addr));
  964|       |	}
  965|       |#endif
  966|      2|#endif
  967|       |
  968|       |#ifndef FUZZING
  969|       |	err = setsockopt(pim_ifp->pim->mroute_socket, PIM_IPPROTO, MRT_ADD_VIF,
  970|       |			 (void *)&vc, sizeof(vc));
  971|       |#else
  972|      2|	err = 0;
  973|      2|#endif
  974|       |
  975|      2|	if (err) {
  ------------------
  |  Branch (975:6): [True: 0, False: 2]
  ------------------
  976|      0|		zlog_warn(
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
  977|      0|			"%s: failure: setsockopt(fd=%d,PIM_IPPROTO,MRT_ADD_VIF,vif_index=%d,ifaddr=%pPAs,flag=%d): errno=%d: %s",
  978|      0|			__func__, pim_ifp->pim->mroute_socket, ifp->ifindex,
  979|      0|			&ifaddr, flags, errno, safe_strerror(errno));
  980|      0|		return -2;
  981|      0|	}
  982|       |
  983|      2|	return 0;
  984|      2|}
pim_upstream_mroute_add:
 1218|  8.97k|{
 1219|  8.97k|	vifi_t iif;
 1220|       |
 1221|  8.97k|	iif = pim_upstream_get_mroute_iif(c_oil, name);
 1222|       |
 1223|  8.97k|	if (*oil_parent(c_oil) != iif) {
  ------------------
  |  Branch (1223:6): [True: 0, False: 8.97k]
  ------------------
 1224|      0|		*oil_parent(c_oil) = iif;
 1225|      0|		if (pim_addr_is_any(*oil_origin(c_oil)) &&
  ------------------
  |  Branch (1225:7): [True: 0, False: 0]
  ------------------
 1226|      0|				c_oil->up)
  ------------------
  |  Branch (1226:5): [True: 0, False: 0]
  ------------------
 1227|      0|			pim_upstream_all_sources_iif_update(c_oil->up);
 1228|  8.97k|	} else {
 1229|  8.97k|		*oil_parent(c_oil) = iif;
 1230|  8.97k|	}
 1231|       |
 1232|  8.97k|	return pim_upstream_mroute_update(c_oil, name);
 1233|  8.97k|}
pim_upstream_mroute_iif_update:
 1239|  7.62k|{
 1240|  7.62k|	vifi_t iif;
 1241|  7.62k|	char buf[1000];
 1242|       |
 1243|  7.62k|	iif = pim_upstream_get_mroute_iif(c_oil, name);
 1244|  7.62k|	if (*oil_parent(c_oil) == iif) {
  ------------------
  |  Branch (1244:6): [True: 7.62k, False: 0]
  ------------------
 1245|       |		/* no change */
 1246|  7.62k|		return 0;
 1247|  7.62k|	}
 1248|      0|	*oil_parent(c_oil) = iif;
 1249|       |
 1250|      0|	if (pim_addr_is_any(*oil_origin(c_oil)) &&
  ------------------
  |  Branch (1250:6): [True: 0, False: 0]
  ------------------
 1251|      0|			c_oil->up)
  ------------------
  |  Branch (1251:4): [True: 0, False: 0]
  ------------------
 1252|      0|		pim_upstream_all_sources_iif_update(c_oil->up);
 1253|       |
 1254|      0|	if (PIM_DEBUG_MROUTE_DETAIL)
  ------------------
  |  |  159|      0|#define PIM_DEBUG_MROUTE_DETAIL (router->debugs & PIM_MASK_MROUTE_DETAIL)
  |  |  ------------------
  |  |  |  |   86|      0|#define PIM_MASK_MROUTE_DETAIL       (1 << 14)
  |  |  ------------------
  |  |  |  Branch (159:33): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1255|      0|		zlog_debug("%s(%s) %s mroute iif update %d",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1256|      0|				__func__, name,
 1257|      0|				pim_channel_oil_dump(c_oil, buf,
 1258|      0|					sizeof(buf)), iif);
 1259|       |	/* XXX: is this hack needed? */
 1260|      0|	c_oil->oil_inherited_rescan = 1;
 1261|      0|	return pim_upstream_mroute_update(c_oil, name);
 1262|  7.62k|}
pim_mroute_del:
 1284|  77.6k|{
 1285|  77.6k|	struct pim_instance *pim = c_oil->pim;
 1286|  77.6k|	int err;
 1287|       |
 1288|  77.6k|	pim->mroute_del_last = pim_time_monotonic_sec();
 1289|  77.6k|	++pim->mroute_del_events;
 1290|       |
 1291|  77.6k|	if (!c_oil->installed) {
  ------------------
  |  Branch (1291:6): [True: 77.6k, False: 0]
  ------------------
 1292|  77.6k|		if (PIM_DEBUG_MROUTE) {
  ------------------
  |  |  158|  77.6k|	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   85|  77.6k|#define PIM_MASK_MROUTE              (1 << 13)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   86|  77.6k|#define PIM_MASK_MROUTE_DETAIL       (1 << 14)
  |  |  ------------------
  |  |  |  Branch (158:2): [True: 0, False: 77.6k]
  |  |  ------------------
  ------------------
 1293|      0|			char buf[1000];
 1294|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1295|      0|				"%s %s: vifi %d for route is %s not installed, do not need to send del req. ",
 1296|      0|				__FILE__, __func__, *oil_parent(c_oil),
 1297|      0|				pim_channel_oil_dump(c_oil, buf, sizeof(buf)));
 1298|      0|		}
 1299|  77.6k|		return -2;
 1300|  77.6k|	}
 1301|       |
 1302|      0|	err = setsockopt(pim->mroute_socket, PIM_IPPROTO, MRT_DEL_MFC,
  ------------------
  |  |   61|      0|#define PIM_IPPROTO IPPROTO_IP
  ------------------
              	err = setsockopt(pim->mroute_socket, PIM_IPPROTO, MRT_DEL_MFC,
  ------------------
  |  |   26|      0|#define MRT_DEL_MFC	(MRT_BASE+5)	/* Delete a multicast forwarding entry	*/
  |  |  ------------------
  |  |  |  |   20|      0|#define MRT_BASE	200
  |  |  ------------------
  ------------------
 1303|      0|			 &c_oil->oil, sizeof(c_oil->oil));
 1304|      0|	if (err) {
  ------------------
  |  Branch (1304:6): [True: 0, False: 0]
  ------------------
 1305|      0|		if (PIM_DEBUG_MROUTE)
  ------------------
  |  |  158|      0|	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   85|      0|#define PIM_MASK_MROUTE              (1 << 13)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   86|      0|#define PIM_MASK_MROUTE_DETAIL       (1 << 14)
  |  |  ------------------
  |  |  |  Branch (158:2): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1306|      0|			zlog_warn(
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
 1307|      0|				"%s %s: failure: setsockopt(fd=%d,PIM_IPPROTO,MRT_DEL_MFC): errno=%d: %s",
 1308|      0|				__FILE__, __func__, pim->mroute_socket, errno,
 1309|      0|				safe_strerror(errno));
 1310|      0|		return -2;
 1311|      0|	}
 1312|       |
 1313|      0|	if (PIM_DEBUG_MROUTE) {
  ------------------
  |  |  158|      0|	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   85|      0|#define PIM_MASK_MROUTE              (1 << 13)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   86|      0|#define PIM_MASK_MROUTE_DETAIL       (1 << 14)
  |  |  ------------------
  |  |  |  Branch (158:2): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1314|      0|		char buf[1000];
 1315|      0|		zlog_debug("%s(%s), vrf %s Deleted Route: %s", __func__, name,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1316|      0|			   pim->vrf->name,
 1317|      0|			   pim_channel_oil_dump(c_oil, buf, sizeof(buf)));
 1318|      0|	}
 1319|       |
 1320|       |	// Reset kernel installed flag
 1321|      0|	c_oil->installed = 0;
 1322|       |
 1323|      0|	return 0;
 1324|      0|}
pim_mroute.c:pim_upstream_mroute_update:
 1173|  8.97k|{
 1174|  8.97k|	char buf[1000];
 1175|       |
 1176|  8.97k|	if (*oil_parent(c_oil) >= MAXVIFS) {
  ------------------
  |  |   43|  8.97k|#define MAXVIFS 32
  ------------------
  |  Branch (1176:6): [True: 8.97k, False: 0]
  ------------------
 1177|       |		/* the c_oil cannot be installed as a mroute yet */
 1178|  8.97k|		if (PIM_DEBUG_MROUTE)
  ------------------
  |  |  158|  8.97k|	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   85|  8.97k|#define PIM_MASK_MROUTE              (1 << 13)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   86|  8.97k|#define PIM_MASK_MROUTE_DETAIL       (1 << 14)
  |  |  ------------------
  |  |  |  Branch (158:2): [True: 0, False: 8.97k]
  |  |  ------------------
  ------------------
 1179|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1180|  8.97k|					"%s(%s) %s mroute not ready to be installed; %s",
 1181|  8.97k|					__func__, name,
 1182|  8.97k|					pim_channel_oil_dump(c_oil, buf,
 1183|  8.97k|						sizeof(buf)),
 1184|  8.97k|					c_oil->installed ?
 1185|  8.97k|					"uninstall" : "skip");
 1186|       |		/* if already installed flush it out as we are going to stop
 1187|       |		 * updates to it leaving it in a stale state
 1188|       |		 */
 1189|  8.97k|		if (c_oil->installed)
  ------------------
  |  Branch (1189:7): [True: 0, False: 8.97k]
  ------------------
 1190|      0|			pim_mroute_del(c_oil, name);
 1191|       |		/* return success (skipped) */
 1192|  8.97k|		return 0;
 1193|  8.97k|	}
 1194|       |
 1195|      0|	return pim_mroute_add(c_oil, name);
 1196|  8.97k|}
pim_mroute.c:pim_upstream_get_mroute_iif:
 1149|  16.5k|{
 1150|  16.5k|	vifi_t iif = MAXVIFS;
  ------------------
  |  |   43|  16.5k|#define MAXVIFS 32
  ------------------
 1151|  16.5k|	struct interface *ifp = NULL;
 1152|  16.5k|	struct pim_interface *pim_ifp;
 1153|  16.5k|	struct pim_upstream *up = c_oil->up;
 1154|       |
 1155|  16.5k|	if (up) {
  ------------------
  |  Branch (1155:6): [True: 16.5k, False: 0]
  ------------------
 1156|  16.5k|		if (PIM_UPSTREAM_FLAG_TEST_USE_RPT(up->flags)) {
  ------------------
  |  |  108|  16.5k|#define PIM_UPSTREAM_FLAG_TEST_USE_RPT(flags) ((flags) & PIM_UPSTREAM_FLAG_MASK_USE_RPT)
  |  |  ------------------
  |  |  |  |   77|  16.5k|#define PIM_UPSTREAM_FLAG_MASK_USE_RPT                 (1 << 20)
  |  |  ------------------
  |  |  |  Branch (108:47): [True: 9.93k, False: 6.66k]
  |  |  ------------------
  ------------------
 1157|  9.93k|			if (up->parent)
  ------------------
  |  Branch (1157:8): [True: 5.76k, False: 4.16k]
  ------------------
 1158|  5.76k|				ifp = up->parent->rpf.source_nexthop.interface;
 1159|  9.93k|		} else {
 1160|  6.66k|			ifp = up->rpf.source_nexthop.interface;
 1161|  6.66k|		}
 1162|  16.5k|		if (ifp) {
  ------------------
  |  Branch (1162:7): [True: 0, False: 16.5k]
  ------------------
 1163|      0|			pim_ifp = (struct pim_interface *)ifp->info;
 1164|      0|			if (pim_ifp)
  ------------------
  |  Branch (1164:8): [True: 0, False: 0]
  ------------------
 1165|      0|				iif = pim_ifp->mroute_vif_index;
 1166|      0|		}
 1167|  16.5k|	}
 1168|  16.5k|	return iif;
 1169|  16.5k|}

pim_msdp_i_am_rp_changed:
  558|  26.8k|{
  559|  26.8k|	struct listnode *sanode;
  560|  26.8k|	struct listnode *nextnode;
  561|  26.8k|	struct pim_msdp_sa *sa;
  562|       |
  563|  26.8k|	if (!(pim->msdp.flags & PIM_MSDPF_ENABLE)) {
  ------------------
  |  Branch (563:6): [True: 26.8k, False: 0]
  ------------------
  564|       |		/* if the feature is not enabled do nothing */
  565|  26.8k|		return;
  566|  26.8k|	}
  567|       |
  568|      0|	if (PIM_DEBUG_MSDP_INTERNAL) {
  ------------------
  |  |  166|      0|#define PIM_DEBUG_MSDP_INTERNAL (router->debugs & PIM_MASK_MSDP_INTERNAL)
  |  |  ------------------
  |  |  |  |   93|      0|#define PIM_MASK_MSDP_INTERNAL       (1 << 21)
  |  |  ------------------
  |  |  |  Branch (166:33): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  569|      0|		zlog_debug("MSDP i_am_rp changed");
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  570|      0|	}
  571|       |
  572|       |	/* mark all local entries as stale */
  573|      0|	for (ALL_LIST_ELEMENTS_RO(pim->msdp.sa_list, sanode, sa)) {
  ------------------
  |  |  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]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  574|      0|		if (sa->flags & PIM_MSDP_SAF_LOCAL) {
  ------------------
  |  Branch (574:7): [True: 0, False: 0]
  ------------------
  575|      0|			sa->flags |= PIM_MSDP_SAF_STALE;
  576|      0|		}
  577|      0|	}
  578|       |
  579|       |	/* re-setup local SA entries */
  580|      0|	pim_msdp_sa_local_setup(pim);
  581|       |
  582|      0|	for (ALL_LIST_ELEMENTS(pim->msdp.sa_list, sanode, nextnode, sa)) {
  ------------------
  |  |  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)
  ------------------
  583|       |		/* purge stale SA entries */
  584|      0|		if (sa->flags & PIM_MSDP_SAF_STALE) {
  ------------------
  |  Branch (584:7): [True: 0, False: 0]
  ------------------
  585|       |			/* clear the stale flag; the entry may be kept even
  586|       |			 * after
  587|       |			 * "local-deref" */
  588|      0|			sa->flags &= ~PIM_MSDP_SAF_STALE;
  589|       |			/* sa_deref can end up freeing the sa; so don't access
  590|       |			 * contents after */
  591|      0|			pim_msdp_sa_deref(sa, PIM_MSDP_SAF_LOCAL);
  592|      0|		} else {
  593|       |			/* if the souce is still active check if we can
  594|       |			 * influence SPT */
  595|       |			pim_msdp_sa_upstream_update(sa, NULL /* xg_up */,
  596|      0|						    "rp-change");
  597|      0|		}
  598|      0|	}
  599|      0|}
pim_msdp_up_del:
  654|  42.5k|{
  655|  42.5k|	if (PIM_DEBUG_MSDP_INTERNAL) {
  ------------------
  |  |  166|  42.5k|#define PIM_DEBUG_MSDP_INTERNAL (router->debugs & PIM_MASK_MSDP_INTERNAL)
  |  |  ------------------
  |  |  |  |   93|  42.5k|#define PIM_MASK_MSDP_INTERNAL       (1 << 21)
  |  |  ------------------
  |  |  |  Branch (166:33): [True: 0, False: 42.5k]
  |  |  ------------------
  ------------------
  656|      0|		zlog_debug("MSDP up %pSG del", sg);
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  657|      0|	}
  658|  42.5k|	if (pim_addr_is_any(sg->src)) {
  ------------------
  |  Branch (658:6): [True: 0, False: 42.5k]
  ------------------
  659|      0|		pim_msdp_up_xg_del(pim, sg);
  660|  42.5k|	} else {
  661|  42.5k|		pim_msdp_sa_local_del_on_up_del(pim, sg);
  662|  42.5k|	}
  663|  42.5k|}
pim_msdp_init:
 1337|      1|{
 1338|      1|	pim->msdp.master = master;
 1339|      1|	char hash_name[64];
 1340|       |
 1341|      1|	snprintf(hash_name, sizeof(hash_name), "PIM %s MSDP Peer Hash",
 1342|      1|		 pim->vrf->name);
 1343|      1|	pim->msdp.peer_hash = hash_create(pim_msdp_peer_hash_key_make,
 1344|      1|					  pim_msdp_peer_hash_eq, hash_name);
 1345|      1|	pim->msdp.peer_list = list_new();
 1346|      1|	pim->msdp.peer_list->del = (void (*)(void *))pim_msdp_peer_free;
 1347|      1|	pim->msdp.peer_list->cmp = (int (*)(void *, void *))pim_msdp_peer_comp;
 1348|       |
 1349|      1|	snprintf(hash_name, sizeof(hash_name), "PIM %s MSDP SA Hash",
 1350|      1|		 pim->vrf->name);
 1351|      1|	pim->msdp.sa_hash = hash_create(pim_msdp_sa_hash_key_make,
 1352|      1|					pim_msdp_sa_hash_eq, hash_name);
 1353|      1|	pim->msdp.sa_list = list_new();
 1354|      1|	pim->msdp.sa_list->del = (void (*)(void *))pim_msdp_sa_free;
 1355|      1|	pim->msdp.sa_list->cmp = (int (*)(void *, void *))pim_msdp_sa_comp;
 1356|      1|}
pim_msdp.c:pim_msdp_sa_find:
  252|  42.5k|{
  253|  42.5k|	struct pim_msdp_sa lookup;
  254|       |
  255|  42.5k|	lookup.sg = *sg;
  256|  42.5k|	return hash_lookup(pim->msdp.sa_hash, &lookup);
  257|  42.5k|}
pim_msdp.c:pim_msdp_sa_local_del_on_up_del:
  476|  42.5k|{
  477|  42.5k|	struct pim_msdp_sa *sa;
  478|       |
  479|  42.5k|	sa = pim_msdp_sa_find(pim, sg);
  480|  42.5k|	if (sa) {
  ------------------
  |  Branch (480:6): [True: 0, False: 42.5k]
  ------------------
  481|      0|		if (PIM_DEBUG_MSDP_INTERNAL) {
  ------------------
  |  |  166|      0|#define PIM_DEBUG_MSDP_INTERNAL (router->debugs & PIM_MASK_MSDP_INTERNAL)
  |  |  ------------------
  |  |  |  |   93|      0|#define PIM_MASK_MSDP_INTERNAL       (1 << 21)
  |  |  ------------------
  |  |  |  Branch (166:33): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  482|      0|			zlog_debug("MSDP local sa %s del on up del",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  483|      0|				   sa->sg_str);
  484|      0|		}
  485|       |
  486|       |		/* if there is no local reference escape */
  487|      0|		if (!(sa->flags & PIM_MSDP_SAF_LOCAL)) {
  ------------------
  |  Branch (487:7): [True: 0, False: 0]
  ------------------
  488|      0|			if (PIM_DEBUG_MSDP_INTERNAL) {
  ------------------
  |  |  166|      0|#define PIM_DEBUG_MSDP_INTERNAL (router->debugs & PIM_MASK_MSDP_INTERNAL)
  |  |  ------------------
  |  |  |  |   93|      0|#define PIM_MASK_MSDP_INTERNAL       (1 << 21)
  |  |  ------------------
  |  |  |  Branch (166:33): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  489|      0|				zlog_debug("MSDP local sa %s del; no local ref",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  490|      0|					   sa->sg_str);
  491|      0|			}
  492|      0|			return;
  493|      0|		}
  494|       |
  495|      0|		if (sa->flags & PIM_MSDP_SAF_UP_DEL_IN_PROG) {
  ------------------
  |  Branch (495:7): [True: 0, False: 0]
  ------------------
  496|       |			/* MSDP is the one that triggered the upstream del. if
  497|       |			 * this happens
  498|       |			 * we most certainly have a bug in the PIM upstream
  499|       |			 * state machine. We
  500|       |			 * will not have a local reference unless the KAT is
  501|       |			 * running. And if the
  502|       |			 * KAT is running there MUST be an additional
  503|       |			 * source-stream reference to
  504|       |			 * the flow. Accounting for such cases requires lot of
  505|       |			 * changes; perhaps
  506|       |			 * address this in the next release? - XXX  */
  507|      0|			flog_err(
  ------------------
  |  |  136|      0|#define flog_err(ferr_id, format, ...) 0
  ------------------
  508|      0|				EC_LIB_DEVELOPMENT,
  509|      0|				"MSDP sa %s SPT teardown is causing the local entry to be removed",
  510|      0|				sa->sg_str);
  511|      0|			return;
  512|      0|		}
  513|       |
  514|       |		/* we are dropping the sa on upstream del we should not have an
  515|       |		 * upstream reference */
  516|      0|		if (sa->up) {
  ------------------
  |  Branch (516:7): [True: 0, False: 0]
  ------------------
  517|      0|			if (PIM_DEBUG_MSDP_INTERNAL) {
  ------------------
  |  |  166|      0|#define PIM_DEBUG_MSDP_INTERNAL (router->debugs & PIM_MASK_MSDP_INTERNAL)
  |  |  ------------------
  |  |  |  |   93|      0|#define PIM_MASK_MSDP_INTERNAL       (1 << 21)
  |  |  ------------------
  |  |  |  Branch (166:33): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  518|      0|				zlog_debug("MSDP local sa %s del; up non-NULL",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  519|      0|					   sa->sg_str);
  520|      0|			}
  521|       |			sa->up = NULL;
  522|      0|		}
  523|      0|		pim_msdp_sa_deref(sa, PIM_MSDP_SAF_LOCAL);
  524|      0|	}
  525|  42.5k|}

pim_msg_build_header:
   32|    911|{
   33|    911|	struct pim_msg_header *header = (struct pim_msg_header *)pim_msg;
   34|    911|	struct iovec iov[2], *iovp = iov;
   35|       |
   36|       |	/*
   37|       |	 * The checksum for Registers is done only on the first 8 bytes of the
   38|       |	 * packet, including the PIM header and the next 4 bytes, excluding the
   39|       |	 * data packet portion
   40|       |	 *
   41|       |	 * for IPv6, the pseudoheader upper-level protocol length is also
   42|       |	 * truncated, so let's just set it here before everything else.
   43|       |	 */
   44|    911|	if (pim_msg_type == PIM_MSG_TYPE_REGISTER)
  ------------------
  |  Branch (44:6): [True: 0, False: 911]
  ------------------
   45|      0|		pim_msg_size = PIM_MSG_REGISTER_LEN;
  ------------------
  |  |   17|      0|#define PIM_MSG_REGISTER_LEN   (8)
  ------------------
   46|       |
   47|       |#if PIM_IPV == 6
   48|       |	struct ipv6_ph phdr = {
   49|       |		.src = src,
   50|       |		.dst = dst,
   51|       |		.ulpl = htonl(pim_msg_size),
   52|       |		.next_hdr = IPPROTO_PIM,
   53|       |	};
   54|       |
   55|       |	iovp->iov_base = &phdr;
   56|       |	iovp->iov_len = sizeof(phdr);
   57|       |	iovp++;
   58|       |#endif
   59|       |
   60|       |	/*
   61|       |	 * Write header
   62|       |	 */
   63|    911|	header->ver = PIM_PROTO_VERSION;
  ------------------
  |  |   61|    911|#define PIM_PROTO_VERSION             (2)
  ------------------
   64|    911|	header->type = pim_msg_type;
   65|    911|	header->Nbit = no_fwd;
   66|    911|	header->reserved = 0;
   67|       |
   68|    911|	header->checksum = 0;
   69|    911|	iovp->iov_base = header;
   70|    911|	iovp->iov_len = pim_msg_size;
   71|    911|	iovp++;
   72|       |
   73|    911|	header->checksum = in_cksumv(iov, iovp - iov);
   74|    911|}

pim_pim.c:pim_sgaddr_from_iphdr:
  184|  2.89k|{
  185|  2.89k|	const struct ip *ipv4_hdr = iphdr;
  186|  2.89k|	pim_sgaddr sg;
  187|       |
  188|  2.89k|	sg.src = ipv4_hdr->ip_src;
  189|  2.89k|	sg.grp = ipv4_hdr->ip_dst;
  190|       |
  191|  2.89k|	return sg;
  192|  2.89k|}
pim_register.c:pim_sgaddr_from_iphdr:
  184|     18|{
  185|     18|	const struct ip *ipv4_hdr = iphdr;
  186|     18|	pim_sgaddr sg;
  187|       |
  188|     18|	sg.src = ipv4_hdr->ip_src;
  189|     18|	sg.grp = ipv4_hdr->ip_dst;
  190|       |
  191|     18|	return sg;
  192|     18|}

pim_if_dr_election:
   97|    228|{
   98|    228|	struct pim_interface *pim_ifp = ifp->info;
   99|    228|	pim_addr old_dr_addr;
  100|       |
  101|    228|	++pim_ifp->pim_dr_election_count;
  102|       |
  103|    228|	old_dr_addr = pim_ifp->pim_dr_addr;
  104|       |
  105|    228|	if (pim_ifp->pim_dr_num_nondrpri_neighbors) {
  ------------------
  |  Branch (105:6): [True: 228, False: 0]
  ------------------
  106|    228|		dr_election_by_addr(ifp);
  107|    228|	} else {
  108|      0|		dr_election_by_pri(ifp);
  109|      0|	}
  110|       |
  111|       |	/* DR changed ? */
  112|    228|	if (pim_addr_cmp(old_dr_addr, pim_ifp->pim_dr_addr)) {
  ------------------
  |  Branch (112:6): [True: 7, False: 221]
  ------------------
  113|       |
  114|      7|		if (PIM_DEBUG_PIM_EVENTS)
  ------------------
  |  |  137|      7|#define PIM_DEBUG_PIM_EVENTS (router->debugs & PIM_MASK_PIM_EVENTS)
  |  |  ------------------
  |  |  |  |   72|      7|#define PIM_MASK_PIM_EVENTS          (1 << 0)
  |  |  ------------------
  |  |  |  Branch (137:30): [True: 0, False: 7]
  |  |  ------------------
  ------------------
  115|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  116|      7|				"%s: DR was %pPA now is %pPA on interface %s",
  117|      7|				__func__, &old_dr_addr, &pim_ifp->pim_dr_addr,
  118|      7|				ifp->name);
  119|       |
  120|      7|		pim_ifp->pim_dr_election_last =
  121|      7|			pim_time_monotonic_sec(); /* timestamp */
  122|      7|		++pim_ifp->pim_dr_election_changes;
  123|      7|		pim_if_update_join_desired(pim_ifp);
  124|      7|		pim_if_update_could_assert(ifp);
  125|      7|		pim_if_update_assert_tracking_desired(ifp);
  126|       |
  127|      7|		if (PIM_I_am_DR(pim_ifp)) {
  ------------------
  |  |   26|      7|	!pim_addr_cmp((pim_ifp)->pim_dr_addr, (pim_ifp)->primary_address)
  |  |  ------------------
  |  |  |  Branch (26:2): [True: 0, False: 7]
  |  |  ------------------
  ------------------
  128|      0|			pim_ifp->am_i_dr = true;
  129|      0|			pim_clear_nocache_state(pim_ifp);
  130|      7|		} else {
  131|      7|			if (pim_ifp->am_i_dr == true) {
  ------------------
  |  Branch (131:8): [True: 1, False: 6]
  ------------------
  132|      1|				pim_reg_del_on_couldreg_fail(ifp);
  133|      1|				pim_ifp->am_i_dr = false;
  134|      1|			}
  135|      7|		}
  136|       |
  137|      7|		return 1;
  138|      7|	}
  139|       |
  140|    221|	return 0;
  141|    228|}
pim_neighbor_timer_reset:
  222|  1.32k|{
  223|  1.32k|	neigh->holdtime = holdtime;
  224|       |
  225|  1.32k|	EVENT_OFF(neigh->t_expire_timer);
  ------------------
  |  |  164|  1.32k|	do {                                                                   \
  |  |  165|  1.32k|		if ((thread))                                                  \
  |  |  ------------------
  |  |  |  Branch (165:7): [True: 0, False: 1.32k]
  |  |  ------------------
  |  |  166|  1.32k|			event_cancel(&(thread));                               \
  |  |  167|  1.32k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (167:11): [Folded, False: 1.32k]
  |  |  ------------------
  ------------------
  226|       |
  227|       |	/*
  228|       |	  0xFFFF is request for no holdtime
  229|       |	 */
  230|  1.32k|	if (neigh->holdtime == 0xFFFF) {
  ------------------
  |  Branch (230:6): [True: 0, False: 1.32k]
  ------------------
  231|      0|		return;
  232|      0|	}
  233|       |
  234|  1.32k|	if (PIM_DEBUG_PIM_TRACE_DETAIL)
  ------------------
  |  |  148|  1.32k|	(router->debugs & PIM_MASK_PIM_TRACE_DETAIL)
  |  |  ------------------
  |  |  |  |   78|  1.32k|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (148:2): [True: 0, False: 1.32k]
  |  |  ------------------
  ------------------
  235|      0|		zlog_debug("%s: starting %u sec timer for neighbor %pPA on %s",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  236|  1.32k|			   __func__, neigh->holdtime, &neigh->source_addr,
  237|  1.32k|			   neigh->interface->name);
  238|       |
  239|  1.32k|	event_add_timer(router->master, on_neighbor_timer, neigh,
  ------------------
  |  |  216|  1.32k|#define event_add_timer(m, f, a, v, t) 0
  ------------------
  240|  1.32k|			neigh->holdtime, &neigh->t_expire_timer);
  241|  1.32k|}
pim_neighbor_free:
  374|     68|{
  375|     68|	assert(!neigh->t_expire_timer);
  ------------------
  |  |   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|	})
  ------------------
  376|       |
  377|     68|	delete_prefix_list(neigh);
  378|       |
  379|     68|	list_delete(&neigh->upstream_jp_agg);
  380|     68|	EVENT_OFF(neigh->jp_timer);
  ------------------
  |  |  164|     68|	do {                                                                   \
  |  |  165|     68|		if ((thread))                                                  \
  |  |  ------------------
  |  |  |  Branch (165:7): [True: 0, False: 68]
  |  |  ------------------
  |  |  166|     68|			event_cancel(&(thread));                               \
  |  |  167|     68|	} while (0)
  |  |  ------------------
  |  |  |  Branch (167:11): [Folded, False: 68]
  |  |  ------------------
  ------------------
  381|       |
  382|     68|	bfd_sess_free(&neigh->bfd_session);
  383|       |
  384|       |	XFREE(MTYPE_PIM_NEIGHBOR, neigh);
  ------------------
  |  |  170|     68|	do {                                                                   \
  |  |  171|     68|		qfree(mtype, ptr);                                             \
  |  |  172|     68|		ptr = NULL;                                                    \
  |  |  173|     68|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 68]
  |  |  ------------------
  ------------------
  385|     68|}
pim_neighbor_find:
  412|  1.32k|{
  413|  1.32k|	struct pim_interface *pim_ifp;
  414|  1.32k|	struct listnode *node;
  415|  1.32k|	struct pim_neighbor *neigh;
  416|       |
  417|  1.32k|	if (!ifp)
  ------------------
  |  Branch (417:6): [True: 0, False: 1.32k]
  ------------------
  418|      0|		return NULL;
  419|       |
  420|  1.32k|	pim_ifp = ifp->info;
  421|  1.32k|	if (!pim_ifp)
  ------------------
  |  Branch (421:6): [True: 0, False: 1.32k]
  ------------------
  422|      0|		return NULL;
  423|       |
  424|  86.9k|	for (ALL_LIST_ELEMENTS_RO(pim_ifp->pim_neighbor_list, node, neigh)) {
  ------------------
  |  |  333|  1.32k|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|  1.32k|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 1.32k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|   173k|	(node) != NULL && ((data) = static_cast(data, listgetdata(node)), 1);  \
  |  |  ------------------
  |  |  |  |  204|   521k|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 86.9k, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 86.9k]
  |  |  |  |  |  Branch (204:28): [True: 86.9k, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 86.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (334:2): [True: 86.9k, False: 145]
  |  |  |  Branch (334:20): [True: 86.9k, False: 0]
  |  |  ------------------
  |  |  335|  85.7k|	(node) = listnextnode(node), ((data) = NULL)
  |  |  ------------------
  |  |  |  |   49|  85.7k|#define listnextnode(X) ((X) ? ((X)->next) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:26): [True: 85.7k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  425|  86.9k|		if (!pim_addr_cmp(source_addr, neigh->source_addr)) {
  ------------------
  |  Branch (425:7): [True: 1.17k, False: 85.7k]
  ------------------
  426|  1.17k|			return neigh;
  427|  1.17k|		}
  428|  86.9k|	}
  429|       |
  430|    145|	if (secondary) {
  ------------------
  |  Branch (430:6): [True: 0, False: 145]
  ------------------
  431|      0|		struct prefix p;
  432|       |
  433|      0|		pim_addr_to_prefix(&p, source_addr);
  434|      0|		return pim_neighbor_find_by_secondary(ifp, &p);
  435|      0|	}
  436|       |
  437|    145|	return NULL;
  438|    145|}
pim_neighbor_add:
  461|    212|{
  462|    212|	struct pim_interface *pim_ifp;
  463|    212|	struct pim_neighbor *neigh;
  464|       |
  465|    212|	neigh = pim_neighbor_new(ifp, source_addr, hello_options, holdtime,
  466|    212|				 propagation_delay, override_interval,
  467|    212|				 dr_priority, generation_id, addr_list);
  468|    212|	if (!neigh) {
  ------------------
  |  Branch (468:6): [True: 0, False: 212]
  ------------------
  469|      0|		return 0;
  470|      0|	}
  471|       |
  472|    212|	pim_ifp = ifp->info;
  473|    212|	assert(pim_ifp);
  ------------------
  |  |   51|    212|	({                                                                     \
  |  |   52|    212|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|    212|			(used)) = {                                            \
  |  |   54|    212|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|    212|	{                                                                      \
  |  |  |  |  284|    212|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|    212|		/* .type = */ (type_),                                         \
  |  |  |  |  286|    212|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|    212|		/* .func = */ func_,                                           \
  |  |  |  |  289|    212|	}                                                                      \
  |  |  ------------------
  |  |   55|    212|			.expr = #expr_,                                        \
  |  |   56|    212|		};                                                             \
  |  |   57|    212|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|    212|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|    212|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|    212|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|    212|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 212]
  |  |  |  Branch (58:24): [True: 212, False: 0]
  |  |  ------------------
  |  |   59|    212|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|    212|	})
  ------------------
  474|       |
  475|    212|	listnode_add(pim_ifp->pim_neighbor_list, neigh);
  476|       |
  477|    212|	if (PIM_DEBUG_PIM_TRACE_DETAIL)
  ------------------
  |  |  148|    212|	(router->debugs & PIM_MASK_PIM_TRACE_DETAIL)
  |  |  ------------------
  |  |  |  |   78|    212|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (148:2): [True: 0, False: 212]
  |  |  ------------------
  ------------------
  478|      0|		zlog_debug("%s: neighbor %pPA added ", __func__, &source_addr);
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  479|       |	/*
  480|       |	  RFC 4601: 4.3.2.  DR Election
  481|       |
  482|       |	  A router's idea of the current DR on an interface can change when a
  483|       |	  PIM Hello message is received, when a neighbor times out, or when a
  484|       |	  router's own DR Priority changes.
  485|       |	*/
  486|    212|	pim_if_dr_election(neigh->interface); // new neighbor -- should not
  487|       |					      // trigger dr election...
  488|       |
  489|       |	/*
  490|       |	  RFC 4601: 4.3.1.  Sending Hello Messages
  491|       |
  492|       |	  To allow new or rebooting routers to learn of PIM neighbors quickly,
  493|       |	  when a Hello message is received from a new neighbor, or a Hello
  494|       |	  message with a new GenID is received from an existing neighbor, a
  495|       |	  new Hello message should be sent on this interface after a
  496|       |	  randomized delay between 0 and Triggered_Hello_Delay.
  497|       |
  498|       |	  This is a bit silly to do it that way.  If I get a new
  499|       |	  genid we need to send the hello *now* because we've
  500|       |	  lined up a bunch of join/prune messages to go out the
  501|       |	  interface.
  502|       |	*/
  503|    212|	if (send_hello_now)
  ------------------
  |  Branch (503:6): [True: 68, False: 144]
  ------------------
  504|     68|		pim_hello_restart_now(ifp);
  505|    144|	else
  506|    144|		pim_hello_restart_triggered(neigh->interface);
  507|       |
  508|    212|	pim_upstream_find_new_rpf(pim_ifp->pim);
  509|       |
  510|       |	/* RNH can send nexthop update prior to PIM neibhor UP
  511|       |	   in that case nexthop cache would not consider this neighbor
  512|       |	   as RPF.
  513|       |	   Upon PIM neighbor UP, iterate all RPs and update
  514|       |	   nexthop cache with this neighbor.
  515|       |	 */
  516|    212|	pim_resolve_rp_nh(pim_ifp->pim, neigh);
  517|       |
  518|    212|	pim_rp_setup(pim_ifp->pim);
  519|       |
  520|    212|	sched_rpf_cache_refresh(pim_ifp->pim);
  521|    212|	return neigh;
  522|    212|}
pim_neighbor_delete:
  575|     68|{
  576|     68|	struct pim_interface *pim_ifp;
  577|       |
  578|     68|	pim_ifp = ifp->info;
  579|     68|	assert(pim_ifp);
  ------------------
  |  |   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|	})
  ------------------
  580|       |
  581|     68|	zlog_notice("PIM NEIGHBOR DOWN: neighbor %pPA on interface %s: %s",
  ------------------
  |  |  133|     68|#define zlog_notice(...) 0
  ------------------
  582|     68|		    &neigh->source_addr, ifp->name, delete_message);
  583|       |
  584|     68|	EVENT_OFF(neigh->t_expire_timer);
  ------------------
  |  |  164|     68|	do {                                                                   \
  |  |  165|     68|		if ((thread))                                                  \
  |  |  ------------------
  |  |  |  Branch (165:7): [True: 0, False: 68]
  |  |  ------------------
  |  |  166|     68|			event_cancel(&(thread));                               \
  |  |  167|     68|	} while (0)
  |  |  ------------------
  |  |  |  Branch (167:11): [Folded, False: 68]
  |  |  ------------------
  ------------------
  585|       |
  586|     68|	pim_if_assert_on_neighbor_down(ifp, neigh->source_addr);
  587|       |
  588|     68|	if (!PIM_OPTION_IS_SET(neigh->hello_options,
  ------------------
  |  |   38|     68|#define PIM_OPTION_IS_SET(options, option_mask) ((options) & (option_mask))
  ------------------
  |  Branch (588:6): [True: 67, False: 1]
  ------------------
  589|     68|			       PIM_OPTION_MASK_LAN_PRUNE_DELAY)) {
  590|       |		/* update num. of neighbors without hello option lan_delay */
  591|       |
  592|     67|		pim_ifp->pim_number_of_nonlandelay_neighbors = MAX(
  ------------------
  |  Branch (592:50): [True: 67, False: 0]
  ------------------
  593|     67|			pim_ifp->pim_number_of_nonlandelay_neighbors - 1, 0);
  594|     67|	}
  595|       |
  596|     68|	if (!PIM_OPTION_IS_SET(neigh->hello_options,
  ------------------
  |  |   38|     68|#define PIM_OPTION_IS_SET(options, option_mask) ((options) & (option_mask))
  ------------------
  |  Branch (596:6): [True: 65, False: 3]
  ------------------
  597|     68|			       PIM_OPTION_MASK_DR_PRIORITY)) {
  598|       |		/* update num. of neighbors without dr_pri */
  599|       |
  600|     65|		pim_ifp->pim_dr_num_nondrpri_neighbors =
  601|     65|			MAX(pim_ifp->pim_dr_num_nondrpri_neighbors - 1, 0);
  ------------------
  |  Branch (601:4): [True: 65, False: 0]
  ------------------
  602|     65|	}
  603|       |
  604|     68|	assert(neigh->propagation_delay_msec
  ------------------
  |  |   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|	})
  ------------------
  605|     68|	       <= pim_ifp->pim_neighbors_highest_propagation_delay_msec);
  606|     68|	assert(neigh->override_interval_msec
  ------------------
  |  |   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|	})
  ------------------
  607|     68|	       <= pim_ifp->pim_neighbors_highest_override_interval_msec);
  608|       |
  609|     68|	if (pim_if_lan_delay_enabled(ifp)) {
  ------------------
  |  Branch (609:6): [True: 0, False: 68]
  ------------------
  610|       |
  611|       |		/* will delete a neighbor with highest propagation delay? */
  612|      0|		if (neigh->propagation_delay_msec
  ------------------
  |  Branch (612:7): [True: 0, False: 0]
  ------------------
  613|      0|		    == pim_ifp->pim_neighbors_highest_propagation_delay_msec) {
  614|       |			/* then find the next highest propagation delay */
  615|      0|			pim_ifp->pim_neighbors_highest_propagation_delay_msec =
  616|      0|				find_neighbors_next_highest_propagation_delay_msec(
  617|      0|					ifp, neigh);
  618|      0|		}
  619|       |
  620|       |		/* will delete a neighbor with highest override interval? */
  621|      0|		if (neigh->override_interval_msec
  ------------------
  |  Branch (621:7): [True: 0, False: 0]
  ------------------
  622|      0|		    == pim_ifp->pim_neighbors_highest_override_interval_msec) {
  623|       |			/* then find the next highest propagation delay */
  624|      0|			pim_ifp->pim_neighbors_highest_override_interval_msec =
  625|      0|				find_neighbors_next_highest_override_interval_msec(
  626|      0|					ifp, neigh);
  627|      0|		}
  628|      0|	}
  629|       |
  630|     68|	if (PIM_DEBUG_PIM_TRACE) {
  ------------------
  |  |  146|     68|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|     68|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|     68|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 68]
  |  |  ------------------
  ------------------
  631|      0|		zlog_debug("%s: deleting PIM neighbor %pPA on interface %s",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  632|      0|			   __func__, &neigh->source_addr, ifp->name);
  633|      0|	}
  634|       |
  635|     68|	listnode_delete(pim_ifp->pim_neighbor_list, neigh);
  636|       |
  637|     68|	pim_neighbor_free(neigh);
  638|       |
  639|     68|	sched_rpf_cache_refresh(pim_ifp->pim);
  640|     68|}
pim_neighbor_find_secondary:
  660|   155k|{
  661|   155k|	struct listnode *node;
  662|   155k|	struct prefix *p;
  663|       |
  664|   155k|	if (!neigh->prefix_list)
  ------------------
  |  Branch (664:6): [True: 119k, False: 35.1k]
  ------------------
  665|   119k|		return 0;
  666|       |
  667|   220k|	for (ALL_LIST_ELEMENTS_RO(neigh->prefix_list, node, p)) {
  ------------------
  |  |  333|  35.1k|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|  35.1k|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 35.1k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|   441k|	(node) != NULL && ((data) = static_cast(data, listgetdata(node)), 1);  \
  |  |  ------------------
  |  |  |  |  204|  1.32M|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 220k, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 220k]
  |  |  |  |  |  Branch (204:28): [True: 220k, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 220k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (334:2): [True: 220k, False: 34.9k]
  |  |  |  Branch (334:20): [True: 220k, False: 0]
  |  |  ------------------
  |  |  335|   220k|	(node) = listnextnode(node), ((data) = NULL)
  |  |  ------------------
  |  |  |  |   49|   220k|#define listnextnode(X) ((X) ? ((X)->next) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:26): [True: 220k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  668|   220k|		if (prefix_same(p, addr))
  ------------------
  |  Branch (668:7): [True: 242, False: 220k]
  ------------------
  669|    242|			return p;
  670|   220k|	}
  671|       |
  672|  34.9k|	return NULL;
  673|  35.1k|}
pim_neighbor_update:
  734|    117|{
  735|    117|	struct pim_interface *pim_ifp = neigh->interface->info;
  736|    117|	uint32_t old, new;
  737|       |
  738|       |	/* Received holdtime ? */
  739|    117|	if (PIM_OPTION_IS_SET(hello_options, PIM_OPTION_MASK_HOLDTIME)) {
  ------------------
  |  |   38|    117|#define PIM_OPTION_IS_SET(options, option_mask) ((options) & (option_mask))
  |  |  ------------------
  |  |  |  Branch (38:49): [True: 1, False: 116]
  |  |  ------------------
  ------------------
  740|      1|		pim_neighbor_timer_reset(neigh, holdtime);
  741|    116|	} else {
  742|    116|		pim_neighbor_timer_reset(neigh,
  743|    116|					 PIM_IF_DEFAULT_HOLDTIME(pim_ifp));
  ------------------
  |  |  183|    116|	(((pim_ifp)->pim_default_holdtime < 0)                                 \
  |  |  ------------------
  |  |  |  Branch (183:3): [True: 116, False: 0]
  |  |  ------------------
  |  |  184|    116|		 ? ((pim_ifp)->pim_hello_period * 7 / 2)                       \
  |  |  185|    116|		 : ((pim_ifp)->pim_default_holdtime))
  ------------------
  744|    116|	}
  745|       |
  746|       |#ifdef DUMP_PREFIX_LIST
  747|       |	zlog_debug(
  748|       |		"%s: DUMP_PREFIX_LIST old_prefix_list=%x old_size=%d new_prefix_list=%x new_size=%d",
  749|       |		__func__, (unsigned)neigh->prefix_list,
  750|       |		neigh->prefix_list ? (int)listcount(neigh->prefix_list) : -1,
  751|       |		(unsigned)addr_list,
  752|       |		addr_list ? (int)listcount(addr_list) : -1);
  753|       |#endif
  754|       |
  755|    117|	if (neigh->prefix_list == addr_list) {
  ------------------
  |  Branch (755:6): [True: 38, False: 79]
  ------------------
  756|     38|		if (addr_list) {
  ------------------
  |  Branch (756:7): [True: 0, False: 38]
  ------------------
  757|      0|			flog_err(
  ------------------
  |  |  136|      0|#define flog_err(ferr_id, format, ...) 0
  ------------------
  758|      0|				EC_LIB_DEVELOPMENT,
  759|      0|				"%s: internal error: trying to replace same prefix list=%p",
  760|      0|				__func__, (void *)addr_list);
  761|      0|		}
  762|     79|	} else {
  763|       |		/* Delete existing secondary address list */
  764|     79|		delete_prefix_list(neigh);
  765|     79|	}
  766|       |
  767|    117|	if (addr_list) {
  ------------------
  |  Branch (767:6): [True: 72, False: 45]
  ------------------
  768|     72|		delete_from_neigh_addr(neigh->interface, addr_list,
  769|     72|				       neigh->source_addr);
  770|     72|	}
  771|       |
  772|       |	/* Replace secondary address list */
  773|    117|	neigh->prefix_list = addr_list;
  774|       |
  775|    117|	update_dr_priority(neigh, hello_options, dr_priority);
  776|    117|	new = PIM_OPTION_IS_SET(hello_options, PIM_OPTION_MASK_LAN_PRUNE_DELAY);
  ------------------
  |  |   38|    117|#define PIM_OPTION_IS_SET(options, option_mask) ((options) & (option_mask))
  ------------------
  777|    117|	old = PIM_OPTION_IS_SET(neigh->hello_options,
  ------------------
  |  |   38|    117|#define PIM_OPTION_IS_SET(options, option_mask) ((options) & (option_mask))
  ------------------
  778|    117|				PIM_OPTION_MASK_LAN_PRUNE_DELAY);
  779|       |
  780|    117|	if (old != new) {
  ------------------
  |  Branch (780:6): [True: 7, False: 110]
  ------------------
  781|      7|		if (old)
  ------------------
  |  Branch (781:7): [True: 2, False: 5]
  ------------------
  782|      2|			++pim_ifp->pim_number_of_nonlandelay_neighbors;
  783|      5|		else
  784|      5|			--pim_ifp->pim_number_of_nonlandelay_neighbors;
  785|      7|	}
  786|       |	/*
  787|       |	  Copy flags
  788|       |	 */
  789|    117|	neigh->hello_options = hello_options;
  790|    117|}
pim_neighbor.c:dr_election_by_addr:
   35|    228|{
   36|    228|	struct pim_interface *pim_ifp;
   37|    228|	struct listnode *node;
   38|    228|	struct pim_neighbor *neigh;
   39|       |
   40|    228|	pim_ifp = ifp->info;
   41|    228|	assert(pim_ifp);
  ------------------
  |  |   51|    228|	({                                                                     \
  |  |   52|    228|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|    228|			(used)) = {                                            \
  |  |   54|    228|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|    228|	{                                                                      \
  |  |  |  |  284|    228|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|    228|		/* .type = */ (type_),                                         \
  |  |  |  |  286|    228|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|    228|		/* .func = */ func_,                                           \
  |  |  |  |  289|    228|	}                                                                      \
  |  |  ------------------
  |  |   55|    228|			.expr = #expr_,                                        \
  |  |   56|    228|		};                                                             \
  |  |   57|    228|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|    228|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|    228|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|    228|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|    228|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 228]
  |  |  |  Branch (58:24): [True: 228, False: 0]
  |  |  ------------------
  |  |   59|    228|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|    228|	})
  ------------------
   42|       |
   43|    228|	pim_ifp->pim_dr_addr = pim_ifp->primary_address;
   44|       |
   45|    228|	if (PIM_DEBUG_PIM_TRACE) {
  ------------------
  |  |  146|    228|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|    228|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|    228|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 228]
  |  |  ------------------
  ------------------
   46|      0|		zlog_debug("%s: on interface %s", __func__, ifp->name);
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
   47|      0|	}
   48|       |
   49|  16.5k|	for (ALL_LIST_ELEMENTS_RO(pim_ifp->pim_neighbor_list, node, neigh)) {
  ------------------
  |  |  333|    228|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|    228|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 228, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|  33.0k|	(node) != NULL && ((data) = static_cast(data, listgetdata(node)), 1);  \
  |  |  ------------------
  |  |  |  |  204|  99.0k|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 16.5k, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 16.5k]
  |  |  |  |  |  Branch (204:28): [True: 16.5k, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 16.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (334:2): [True: 16.5k, False: 228]
  |  |  |  Branch (334:20): [True: 16.5k, False: 0]
  |  |  ------------------
  |  |  335|  16.5k|	(node) = listnextnode(node), ((data) = NULL)
  |  |  ------------------
  |  |  |  |   49|  16.5k|#define listnextnode(X) ((X) ? ((X)->next) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:26): [True: 16.5k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   50|  16.5k|		if (pim_addr_cmp(neigh->source_addr, pim_ifp->pim_dr_addr) > 0)
  ------------------
  |  Branch (50:7): [True: 1.28k, False: 15.2k]
  ------------------
   51|  1.28k|			pim_ifp->pim_dr_addr = neigh->source_addr;
   52|  16.5k|	}
   53|    228|}
pim_neighbor.c:delete_prefix_list:
  349|    147|{
  350|    147|	if (neigh->prefix_list) {
  ------------------
  |  Branch (350:6): [True: 68, False: 79]
  ------------------
  351|       |
  352|       |#ifdef DUMP_PREFIX_LIST
  353|       |		struct listnode *p_node;
  354|       |		struct prefix *p;
  355|       |		int list_size = neigh->prefix_list
  356|       |					? (int)listcount(neigh->prefix_list)
  357|       |					: -1;
  358|       |		int i = 0;
  359|       |		for (ALL_LIST_ELEMENTS_RO(neigh->prefix_list, p_node, p)) {
  360|       |			zlog_debug(
  361|       |				"%s: DUMP_PREFIX_LIST neigh=%x prefix_list=%x prefix=%x addr=%pFXh [%d/%d]",
  362|       |				__func__, (unsigned)neigh,
  363|       |				(unsigned)neigh->prefix_list, (unsigned)p, p, i,
  364|       |				list_size);
  365|       |			++i;
  366|       |		}
  367|       |#endif
  368|       |
  369|     68|		list_delete(&neigh->prefix_list);
  370|     68|	}
  371|    147|}
pim_neighbor.c:pim_neighbor_new:
  275|    212|{
  276|    212|	struct pim_interface *pim_ifp;
  277|    212|	struct pim_neighbor *neigh;
  278|       |
  279|    212|	assert(ifp);
  ------------------
  |  |   51|    212|	({                                                                     \
  |  |   52|    212|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|    212|			(used)) = {                                            \
  |  |   54|    212|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|    212|	{                                                                      \
  |  |  |  |  284|    212|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|    212|		/* .type = */ (type_),                                         \
  |  |  |  |  286|    212|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|    212|		/* .func = */ func_,                                           \
  |  |  |  |  289|    212|	}                                                                      \
  |  |  ------------------
  |  |   55|    212|			.expr = #expr_,                                        \
  |  |   56|    212|		};                                                             \
  |  |   57|    212|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|    212|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|    212|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|    212|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|    212|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 212]
  |  |  |  Branch (58:24): [True: 212, False: 0]
  |  |  ------------------
  |  |   59|    212|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|    212|	})
  ------------------
  280|    212|	pim_ifp = ifp->info;
  281|    212|	assert(pim_ifp);
  ------------------
  |  |   51|    212|	({                                                                     \
  |  |   52|    212|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|    212|			(used)) = {                                            \
  |  |   54|    212|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|    212|	{                                                                      \
  |  |  |  |  284|    212|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|    212|		/* .type = */ (type_),                                         \
  |  |  |  |  286|    212|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|    212|		/* .func = */ func_,                                           \
  |  |  |  |  289|    212|	}                                                                      \
  |  |  ------------------
  |  |   55|    212|			.expr = #expr_,                                        \
  |  |   56|    212|		};                                                             \
  |  |   57|    212|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|    212|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|    212|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|    212|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|    212|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 212]
  |  |  |  Branch (58:24): [True: 212, False: 0]
  |  |  ------------------
  |  |   59|    212|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|    212|	})
  ------------------
  282|       |
  283|    212|	neigh = XCALLOC(MTYPE_PIM_NEIGHBOR, sizeof(*neigh));
  ------------------
  |  |  165|    212|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  284|       |
  285|    212|	neigh->creation = pim_time_monotonic_sec();
  286|    212|	neigh->source_addr = source_addr;
  287|    212|	neigh->hello_options = hello_options;
  288|    212|	neigh->propagation_delay_msec = propagation_delay;
  289|    212|	neigh->override_interval_msec = override_interval;
  290|    212|	neigh->dr_priority = dr_priority;
  291|    212|	neigh->generation_id = generation_id;
  292|    212|	neigh->prefix_list = addr_list;
  293|    212|	neigh->t_expire_timer = NULL;
  294|    212|	neigh->interface = ifp;
  295|       |
  296|    212|	neigh->upstream_jp_agg = list_new();
  297|    212|	neigh->upstream_jp_agg->cmp = pim_jp_agg_group_list_cmp;
  298|    212|	neigh->upstream_jp_agg->del =
  299|    212|		(void (*)(void *))pim_jp_agg_group_list_free;
  300|    212|	pim_neighbor_start_jp_timer(neigh);
  301|       |
  302|    212|	pim_neighbor_timer_reset(neigh, holdtime);
  303|       |	/*
  304|       |	 * The pim_ifstat_hello_sent variable is used to decide if
  305|       |	 * we should expedite a hello out the interface.  If we
  306|       |	 * establish a new neighbor, we unfortunately need to
  307|       |	 * reset the value so that we can know to hurry up and
  308|       |	 * hello
  309|       |	 */
  310|    212|	PIM_IF_FLAG_UNSET_HELLO_SENT(pim_ifp->flags);
  ------------------
  |  |   41|    212|#define PIM_IF_FLAG_UNSET_HELLO_SENT(flags) ((flags) &= ~PIM_IF_FLAG_HELLO_SENT)
  |  |  ------------------
  |  |  |  |   35|    212|#define PIM_IF_FLAG_HELLO_SENT (1 << 0)
  |  |  ------------------
  ------------------
  311|       |
  312|    212|	if (PIM_DEBUG_PIM_EVENTS)
  ------------------
  |  |  137|    212|#define PIM_DEBUG_PIM_EVENTS (router->debugs & PIM_MASK_PIM_EVENTS)
  |  |  ------------------
  |  |  |  |   72|    212|#define PIM_MASK_PIM_EVENTS          (1 << 0)
  |  |  ------------------
  |  |  |  Branch (137:30): [True: 0, False: 212]
  |  |  ------------------
  ------------------
  313|      0|		zlog_debug("%s: creating PIM neighbor %pPA on interface %s",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  314|    212|			   __func__, &source_addr, ifp->name);
  315|       |
  316|    212|	zlog_notice("PIM NEIGHBOR UP: neighbor %pPA on interface %s",
  ------------------
  |  |  133|    212|#define zlog_notice(...) 0
  ------------------
  317|    212|		    &source_addr, ifp->name);
  318|       |
  319|    212|	if (neigh->propagation_delay_msec
  ------------------
  |  Branch (319:6): [True: 7, False: 205]
  ------------------
  320|    212|	    > pim_ifp->pim_neighbors_highest_propagation_delay_msec) {
  321|      7|		pim_ifp->pim_neighbors_highest_propagation_delay_msec =
  322|      7|			neigh->propagation_delay_msec;
  323|      7|	}
  324|    212|	if (neigh->override_interval_msec
  ------------------
  |  Branch (324:6): [True: 5, False: 207]
  ------------------
  325|    212|	    > pim_ifp->pim_neighbors_highest_override_interval_msec) {
  326|      5|		pim_ifp->pim_neighbors_highest_override_interval_msec =
  327|      5|			neigh->override_interval_msec;
  328|      5|	}
  329|       |
  330|    212|	if (!PIM_OPTION_IS_SET(neigh->hello_options,
  ------------------
  |  |   38|    212|#define PIM_OPTION_IS_SET(options, option_mask) ((options) & (option_mask))
  ------------------
  |  Branch (330:6): [True: 189, False: 23]
  ------------------
  331|    212|			       PIM_OPTION_MASK_LAN_PRUNE_DELAY)) {
  332|       |		/* update num. of neighbors without hello option lan_delay */
  333|    189|		++pim_ifp->pim_number_of_nonlandelay_neighbors;
  334|    189|	}
  335|       |
  336|    212|	if (!PIM_OPTION_IS_SET(neigh->hello_options,
  ------------------
  |  |   38|    212|#define PIM_OPTION_IS_SET(options, option_mask) ((options) & (option_mask))
  ------------------
  |  Branch (336:6): [True: 198, False: 14]
  ------------------
  337|    212|			       PIM_OPTION_MASK_DR_PRIORITY)) {
  338|       |		/* update num. of neighbors without hello option dr_pri */
  339|    198|		++pim_ifp->pim_dr_num_nondrpri_neighbors;
  340|    198|	}
  341|       |
  342|       |	// Register PIM Neighbor with BFD
  343|    212|	pim_bfd_info_nbr_create(pim_ifp, neigh);
  344|       |
  345|    212|	return neigh;
  346|    212|}
pim_neighbor.c:pim_neighbor_start_jp_timer:
  263|    212|{
  264|    212|	EVENT_OFF(neigh->jp_timer);
  ------------------
  |  |  164|    212|	do {                                                                   \
  |  |  165|    212|		if ((thread))                                                  \
  |  |  ------------------
  |  |  |  Branch (165:7): [True: 0, False: 212]
  |  |  ------------------
  |  |  166|    212|			event_cancel(&(thread));                               \
  |  |  167|    212|	} while (0)
  |  |  ------------------
  |  |  |  Branch (167:11): [Folded, False: 212]
  |  |  ------------------
  ------------------
  265|    212|	event_add_timer(router->master, on_neighbor_jp_timer, neigh,
  ------------------
  |  |  216|    212|#define event_add_timer(m, f, a, v, t) 0
  ------------------
  266|    212|			router->t_periodic, &neigh->jp_timer);
  267|    212|}
pim_neighbor.c:delete_from_neigh_addr:
  688|     72|{
  689|     72|	struct listnode *addr_node;
  690|     72|	struct prefix *addr;
  691|     72|	struct pim_interface *pim_ifp;
  692|       |
  693|     72|	pim_ifp = ifp->info;
  694|     72|	assert(pim_ifp);
  ------------------
  |  |   51|     72|	({                                                                     \
  |  |   52|     72|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|     72|			(used)) = {                                            \
  |  |   54|     72|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|     72|	{                                                                      \
  |  |  |  |  284|     72|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|     72|		/* .type = */ (type_),                                         \
  |  |  |  |  286|     72|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|     72|		/* .func = */ func_,                                           \
  |  |  |  |  289|     72|	}                                                                      \
  |  |  ------------------
  |  |   55|     72|			.expr = #expr_,                                        \
  |  |   56|     72|		};                                                             \
  |  |   57|     72|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|     72|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|     72|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|     72|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|     72|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 72]
  |  |  |  Branch (58:24): [True: 72, False: 0]
  |  |  ------------------
  |  |   59|     72|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|     72|	})
  ------------------
  695|       |
  696|     72|	assert(addr_list);
  ------------------
  |  |   51|     72|	({                                                                     \
  |  |   52|     72|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|     72|			(used)) = {                                            \
  |  |   54|     72|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|     72|	{                                                                      \
  |  |  |  |  284|     72|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|     72|		/* .type = */ (type_),                                         \
  |  |  |  |  286|     72|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|     72|		/* .func = */ func_,                                           \
  |  |  |  |  289|     72|	}                                                                      \
  |  |  ------------------
  |  |   55|     72|			.expr = #expr_,                                        \
  |  |   56|     72|		};                                                             \
  |  |   57|     72|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|     72|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|     72|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|     72|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|     72|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 72]
  |  |  |  Branch (58:24): [True: 72, False: 0]
  |  |  ------------------
  |  |   59|     72|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|     72|	})
  ------------------
  697|       |
  698|       |	/*
  699|       |	  Scan secondary address list
  700|       |	*/
  701|  1.44k|	for (ALL_LIST_ELEMENTS_RO(addr_list, addr_node, addr)) {
  ------------------
  |  |  333|     72|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|     72|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 72, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|  2.88k|	(node) != NULL && ((data) = static_cast(data, listgetdata(node)), 1);  \
  |  |  ------------------
  |  |  |  |  204|  8.66k|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 1.44k, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 1.44k]
  |  |  |  |  |  Branch (204:28): [True: 1.44k, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 1.44k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (334:2): [True: 1.44k, False: 72]
  |  |  |  Branch (334:20): [True: 1.44k, False: 0]
  |  |  ------------------
  |  |  335|  1.44k|	(node) = listnextnode(node), ((data) = NULL)
  |  |  ------------------
  |  |  |  |   49|  1.44k|#define listnextnode(X) ((X) ? ((X)->next) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:26): [True: 1.44k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  702|  1.44k|		struct listnode *neigh_node;
  703|  1.44k|		struct pim_neighbor *neigh;
  704|       |
  705|  1.44k|		if (addr->family != PIM_AF)
  ------------------
  |  |   19|  1.44k|#define PIM_AF		AF_INET
  ------------------
  |  Branch (705:7): [True: 302, False: 1.14k]
  ------------------
  706|    302|			continue;
  707|       |		/*
  708|       |		  Scan neighbors
  709|       |		*/
  710|  1.14k|		for (ALL_LIST_ELEMENTS_RO(pim_ifp->pim_neighbor_list,
  ------------------
  |  |  333|  1.14k|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|  1.14k|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 1.14k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|   310k|	(node) != NULL && ((data) = static_cast(data, listgetdata(node)), 1);  \
  |  |  ------------------
  |  |  |  |  204|   930k|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 155k, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 155k]
  |  |  |  |  |  Branch (204:28): [True: 155k, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (334:2): [True: 155k, False: 1.14k]
  |  |  |  Branch (334:20): [True: 155k, False: 0]
  |  |  ------------------
  |  |  335|   155k|	(node) = listnextnode(node), ((data) = NULL)
  |  |  ------------------
  |  |  |  |   49|   155k|#define listnextnode(X) ((X) ? ((X)->next) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:26): [True: 155k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  711|   155k|					  neigh_node, neigh)) {
  712|   155k|			{
  713|   155k|				struct prefix *p = pim_neighbor_find_secondary(
  714|   155k|					neigh, addr);
  715|   155k|				if (p) {
  ------------------
  |  Branch (715:9): [True: 242, False: 154k]
  ------------------
  716|    242|					zlog_info(
  ------------------
  |  |  132|    242|#define zlog_info(...) 0
  ------------------
  717|    242|						"secondary addr %pFXh recvd from neigh %pPA deleted from neigh %pPA on %s",
  718|    242|						addr, &neigh_addr,
  719|    242|						&neigh->source_addr, ifp->name);
  720|       |
  721|    242|					listnode_delete(neigh->prefix_list, p);
  722|    242|					prefix_free(&p);
  723|    242|				}
  724|   155k|			}
  725|       |
  726|   155k|		} /* scan neighbors */
  727|       |
  728|  1.14k|	} /* scan addr list */
  729|     72|}
pim_neighbor.c:update_dr_priority:
  146|    117|{
  147|    117|	pim_hello_options will_set_pri; /* boolean */
  148|    117|	pim_hello_options bit_flip;     /* boolean */
  149|    117|	pim_hello_options pri_change;   /* boolean */
  150|       |
  151|    117|	will_set_pri =
  152|    117|		PIM_OPTION_IS_SET(hello_options, PIM_OPTION_MASK_DR_PRIORITY);
  ------------------
  |  |   38|    117|#define PIM_OPTION_IS_SET(options, option_mask) ((options) & (option_mask))
  ------------------
  153|       |
  154|    117|	bit_flip = (will_set_pri
  155|    117|		    != PIM_OPTION_IS_SET(neigh->hello_options,
  ------------------
  |  |   38|    117|#define PIM_OPTION_IS_SET(options, option_mask) ((options) & (option_mask))
  ------------------
  156|    117|					 PIM_OPTION_MASK_DR_PRIORITY));
  157|       |
  158|    117|	if (bit_flip) {
  ------------------
  |  Branch (158:6): [True: 3, False: 114]
  ------------------
  159|      3|		struct pim_interface *pim_ifp = neigh->interface->info;
  160|       |
  161|       |		/* update num. of neighbors without dr_pri */
  162|       |
  163|      3|		if (will_set_pri) {
  ------------------
  |  Branch (163:7): [True: 2, False: 1]
  ------------------
  164|      2|			--pim_ifp->pim_dr_num_nondrpri_neighbors;
  165|      2|		} else {
  166|      1|			++pim_ifp->pim_dr_num_nondrpri_neighbors;
  167|      1|		}
  168|      3|	}
  169|       |
  170|    117|	pri_change = (bit_flip || (neigh->dr_priority != dr_priority));
  ------------------
  |  Branch (170:16): [True: 3, False: 114]
  |  Branch (170:28): [True: 13, False: 101]
  ------------------
  171|       |
  172|    117|	if (will_set_pri) {
  ------------------
  |  Branch (172:6): [True: 16, False: 101]
  ------------------
  173|     16|		neigh->dr_priority = dr_priority;
  174|    101|	} else {
  175|    101|		neigh->dr_priority = 0; /* cosmetic unset */
  176|    101|	}
  177|       |
  178|    117|	if (pri_change) {
  ------------------
  |  Branch (178:6): [True: 16, False: 101]
  ------------------
  179|       |		/*
  180|       |		  RFC 4601: 4.3.2.  DR Election
  181|       |
  182|       |		  A router's idea of the current DR on an interface can change
  183|       |		  when a
  184|       |		  PIM Hello message is received, when a neighbor times out, or
  185|       |		  when a
  186|       |		  router's own DR Priority changes.
  187|       |		*/
  188|     16|		pim_if_dr_election(
  189|     16|			neigh->interface); // router's own DR Priority changes
  190|     16|	}
  191|    117|}

pim_sendmsg_zebra_rnh:
   41|  60.2k|{
   42|  60.2k|	struct prefix p;
   43|  60.2k|	int ret;
   44|       |
   45|  60.2k|	pim_addr_to_prefix(&p, pnc->rpf.rpf_addr);
   46|  60.2k|	ret = zclient_send_rnh(zclient, command, &p, SAFI_UNICAST, false, false,
   47|  60.2k|			       pim->vrf->vrf_id);
   48|  60.2k|	if (ret == ZCLIENT_SEND_FAILURE)
  ------------------
  |  Branch (48:6): [True: 60.2k, False: 0]
  ------------------
   49|  60.2k|		zlog_warn("sendmsg_nexthop: zclient_send_message() failed");
  ------------------
  |  |  131|  60.2k|#define zlog_warn(...) 0
  ------------------
   50|       |
   51|  60.2k|	if (PIM_DEBUG_PIM_NHT)
  ------------------
  |  |  167|  60.2k|#define PIM_DEBUG_PIM_NHT (router->debugs & PIM_MASK_PIM_NHT)
  |  |  ------------------
  |  |  |  |   94|  60.2k|#define PIM_MASK_PIM_NHT             (1 << 22)
  |  |  ------------------
  |  |  |  Branch (167:27): [True: 0, False: 60.2k]
  |  |  ------------------
  ------------------
   52|      0|		zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
   53|  60.2k|			"%s: NHT %sregistered addr %pFX(%s) with Zebra ret:%d ",
   54|  60.2k|			__func__,
   55|  60.2k|			(command == ZEBRA_NEXTHOP_REGISTER) ? " " : "de", &p,
   56|  60.2k|			pim->vrf->name, ret);
   57|       |
   58|  60.2k|	return;
   59|  60.2k|}
pim_nexthop_cache_find:
   63|   243k|{
   64|   243k|	struct pim_nexthop_cache *pnc = NULL;
   65|   243k|	struct pim_nexthop_cache lookup;
   66|       |
   67|   243k|	lookup.rpf.rpf_addr = rpf->rpf_addr;
   68|   243k|	pnc = hash_lookup(pim->rpf_hash, &lookup);
   69|       |
   70|   243k|	return pnc;
   71|   243k|}
pim_find_or_track_nexthop:
  127|   124k|{
  128|   124k|	struct pim_nexthop_cache *pnc;
  129|   124k|	struct listnode *ch_node = NULL;
  130|       |
  131|   124k|	pnc = pim_nht_get(pim, addr);
  132|       |
  133|   124k|	assertf(up || rp, "addr=%pPA", &addr);
  ------------------
  |  |   65|   124k|	({                                                                     \
  |  |   66|   124k|		static const struct xref_assert _xref __attribute__(           \
  |  |   67|   124k|			(used)) = {                                            \
  |  |   68|   124k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|   124k|	{                                                                      \
  |  |  |  |  284|   124k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|   124k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|   124k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|   124k|		/* .func = */ func_,                                           \
  |  |  |  |  289|   124k|	}                                                                      \
  |  |  ------------------
  |  |   69|   124k|			.expr = #expr_,                                        \
  |  |   70|   124k|			.extra = extra_,                                       \
  |  |   71|   124k|			.args = #__VA_ARGS__,                                  \
  |  |   72|   124k|		};                                                             \
  |  |   73|   124k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|   124k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|   124k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|   124k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   74|   181k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (74:7): [True: 0, False: 124k]
  |  |  |  Branch (74:25): [True: 68.0k, False: 56.6k]
  |  |  |  Branch (74:25): [True: 56.6k, False: 0]
  |  |  ------------------
  |  |   75|   124k|			do {                                                   \
  |  |   76|      0|				_zlog_assert_failed(&_xref, extra_,            \
  |  |   77|      0|						    ##__VA_ARGS__);            \
  |  |   78|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (78:13): [True: 0, False: 0]
  |  |  |  Branch (78:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   79|   124k|	})
  ------------------
  134|       |
  135|   124k|	if (rp != NULL) {
  ------------------
  |  Branch (135:6): [True: 56.6k, False: 68.0k]
  ------------------
  136|  56.6k|		ch_node = listnode_lookup(pnc->rp_list, rp);
  137|  56.6k|		if (ch_node == NULL)
  ------------------
  |  Branch (137:7): [True: 32.6k, False: 23.9k]
  ------------------
  138|  32.6k|			listnode_add_sort(pnc->rp_list, rp);
  139|  56.6k|	}
  140|       |
  141|   124k|	if (up != NULL)
  ------------------
  |  Branch (141:6): [True: 68.0k, False: 56.6k]
  ------------------
  142|  68.0k|		(void)hash_get(pnc->upstream_hash, up, hash_alloc_intern);
  143|       |
  144|   124k|	if (CHECK_FLAG(pnc->flags, PIM_NEXTHOP_VALID)) {
  ------------------
  |  |  394|   124k|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 0, False: 124k]
  |  |  ------------------
  ------------------
  145|      0|		if (out_pnc)
  ------------------
  |  Branch (145:7): [True: 0, False: 0]
  ------------------
  146|      0|			memcpy(out_pnc, pnc, sizeof(struct pim_nexthop_cache));
  147|      0|		return 1;
  148|      0|	}
  149|       |
  150|   124k|	return 0;
  151|   124k|}
pim_nht_bsr_add:
  154|      4|{
  155|      4|	struct pim_nexthop_cache *pnc;
  156|       |
  157|      4|	pnc = pim_nht_get(pim, addr);
  158|       |
  159|      4|	pnc->bsr_count++;
  160|      4|}
pim_delete_tracked_nexthop:
  191|  84.9k|{
  192|  84.9k|	struct pim_nexthop_cache *pnc = NULL;
  193|  84.9k|	struct pim_nexthop_cache lookup;
  194|  84.9k|	struct pim_upstream *upstream = NULL;
  195|       |
  196|       |	/* Remove from RPF hash if it is the last entry */
  197|  84.9k|	lookup.rpf.rpf_addr = addr;
  198|  84.9k|	pnc = hash_lookup(pim->rpf_hash, &lookup);
  199|  84.9k|	if (!pnc) {
  ------------------
  |  Branch (199:6): [True: 12.4k, False: 72.5k]
  ------------------
  200|  12.4k|		zlog_warn("attempting to delete nonexistent NHT entry %pPA",
  ------------------
  |  |  131|  12.4k|#define zlog_warn(...) 0
  ------------------
  201|  12.4k|			  &addr);
  202|  12.4k|		return;
  203|  12.4k|	}
  204|       |
  205|  72.5k|	if (rp) {
  ------------------
  |  Branch (205:6): [True: 32.8k, False: 39.6k]
  ------------------
  206|       |		/* Release the (*, G)upstream from pnc->upstream_hash,
  207|       |		 * whose Group belongs to the RP getting deleted
  208|       |		 */
  209|  21.5M|		frr_each (rb_pim_upstream, &pim->upstream_head, upstream) {
  ------------------
  |  |   21|  21.5M|	for (item = prefix##_first(head); item;                                \
  |  |  ------------------
  |  |  |  Branch (21:36): [True: 21.5M, False: 32.8k]
  |  |  ------------------
  |  |   22|  21.5M|			item = prefix##_next(head, item))
  ------------------
  210|  21.5M|			struct prefix grp;
  211|  21.5M|			struct rp_info *trp_info;
  212|       |
  213|  21.5M|			if (!pim_addr_is_any(upstream->sg.src))
  ------------------
  |  Branch (213:8): [True: 16.0M, False: 5.52M]
  ------------------
  214|  16.0M|				continue;
  215|       |
  216|  5.52M|			pim_addr_to_prefix(&grp, upstream->sg.grp);
  217|  5.52M|			trp_info = pim_rp_find_match_group(pim, &grp);
  218|  5.52M|			if (trp_info == rp)
  ------------------
  |  Branch (218:8): [True: 33.2k, False: 5.48M]
  ------------------
  219|  33.2k|				hash_release(pnc->upstream_hash, upstream);
  220|  5.52M|		}
  221|  32.8k|		listnode_delete(pnc->rp_list, rp);
  222|  32.8k|	}
  223|       |
  224|  72.5k|	if (up)
  ------------------
  |  Branch (224:6): [True: 39.6k, False: 32.8k]
  ------------------
  225|  39.6k|		hash_release(pnc->upstream_hash, up);
  226|       |
  227|  72.5k|	pim_nht_drop_maybe(pim, pnc);
  228|  72.5k|}
pim_nht_bsr_del:
  231|      4|{
  232|      4|	struct pim_nexthop_cache *pnc = NULL;
  233|      4|	struct pim_nexthop_cache lookup;
  234|       |
  235|       |	/*
  236|       |	 * Nothing to do here if the address to unregister
  237|       |	 * is 0.0.0.0 as that the BSR has not been registered
  238|       |	 * for tracking yet.
  239|       |	 */
  240|      4|	if (pim_addr_is_any(addr))
  ------------------
  |  Branch (240:6): [True: 1, False: 3]
  ------------------
  241|      1|		return;
  242|       |
  243|      3|	lookup.rpf.rpf_addr = addr;
  244|       |
  245|      3|	pnc = hash_lookup(pim->rpf_hash, &lookup);
  246|       |
  247|      3|	if (!pnc) {
  ------------------
  |  Branch (247:6): [True: 0, False: 3]
  ------------------
  248|      0|		zlog_warn("attempting to delete nonexistent NHT BSR entry %pPA",
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
  249|      0|			  &addr);
  250|      0|		return;
  251|      0|	}
  252|       |
  253|      3|	assertf(pnc->bsr_count > 0, "addr=%pPA", &addr);
  ------------------
  |  |   65|      3|	({                                                                     \
  |  |   66|      3|		static const struct xref_assert _xref __attribute__(           \
  |  |   67|      3|			(used)) = {                                            \
  |  |   68|      3|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|      3|	{                                                                      \
  |  |  |  |  284|      3|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      3|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      3|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      3|		/* .func = */ func_,                                           \
  |  |  |  |  289|      3|	}                                                                      \
  |  |  ------------------
  |  |   69|      3|			.expr = #expr_,                                        \
  |  |   70|      3|			.extra = extra_,                                       \
  |  |   71|      3|			.args = #__VA_ARGS__,                                  \
  |  |   72|      3|		};                                                             \
  |  |   73|      3|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      3|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      3|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      3|		= &(dst)                                                       \
  |  |  ------------------
  |  |   74|      3|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (74:7): [True: 0, False: 3]
  |  |  |  Branch (74:24): [True: 3, False: 0]
  |  |  ------------------
  |  |   75|      3|			do {                                                   \
  |  |   76|      0|				_zlog_assert_failed(&_xref, extra_,            \
  |  |   77|      0|						    ##__VA_ARGS__);            \
  |  |   78|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (78:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   79|      3|	})
  ------------------
  254|      3|	pnc->bsr_count--;
  255|       |
  256|      3|	pim_nht_drop_maybe(pim, pnc);
  257|      3|}
pim_nht_bsr_rpf_check:
  261|      1|{
  262|      1|	struct pim_nexthop_cache *pnc = NULL;
  263|      1|	struct pim_nexthop_cache lookup;
  264|      1|	struct pim_neighbor *nbr = NULL;
  265|      1|	struct nexthop *nh;
  266|      1|	struct interface *ifp;
  267|       |
  268|      1|	lookup.rpf.rpf_addr = bsr_addr;
  269|       |
  270|      1|	pnc = hash_lookup(pim->rpf_hash, &lookup);
  271|      1|	if (!pnc || !CHECK_FLAG(pnc->flags, PIM_NEXTHOP_ANSWER_RECEIVED)) {
  ------------------
  |  |  394|      1|#define CHECK_FLAG(V,F)      ((V) & (F))
  ------------------
  |  Branch (271:6): [True: 0, False: 1]
  |  Branch (271:14): [True: 1, False: 0]
  ------------------
  272|       |		/* BSM from a new freshly registered BSR - do a synchronous
  273|       |		 * zebra query since otherwise we'd drop the first packet,
  274|       |		 * leading to additional delay in picking up BSM data
  275|       |		 */
  276|       |
  277|       |		/* FIXME: this should really be moved into a generic NHT
  278|       |		 * function that does "add and get immediate result" or maybe
  279|       |		 * "check cache or get immediate result." But until that can
  280|       |		 * be worked in, here's a copy of the code below :(
  281|       |		 */
  282|      1|		struct pim_zlookup_nexthop nexthop_tab[router->multipath];
  283|      1|		ifindex_t i;
  284|      1|		struct interface *ifp = NULL;
  285|      1|		int num_ifindex;
  286|       |
  287|      1|		memset(nexthop_tab, 0, sizeof(nexthop_tab));
  288|      1|		num_ifindex = zclient_lookup_nexthop(
  289|      1|			pim, nexthop_tab, router->multipath, bsr_addr,
  290|      1|			PIM_NEXTHOP_LOOKUP_MAX);
  ------------------
  |  |   14|      1|#define PIM_NEXTHOP_LOOKUP_MAX (3) /* max. recursive route lookup */
  ------------------
  291|       |
  292|      1|		if (num_ifindex <= 0)
  ------------------
  |  Branch (292:7): [True: 1, False: 0]
  ------------------
  293|      1|			return false;
  294|       |
  295|      0|		for (i = 0; i < num_ifindex; i++) {
  ------------------
  |  Branch (295:15): [True: 0, False: 0]
  ------------------
  296|      0|			struct pim_zlookup_nexthop *znh = &nexthop_tab[i];
  297|       |
  298|       |			/* pim_zlookup_nexthop has no ->type */
  299|       |
  300|       |			/* 1:1 match code below with znh instead of nh */
  301|      0|			ifp = if_lookup_by_index(znh->ifindex,
  302|      0|						 pim->vrf->vrf_id);
  303|       |
  304|      0|			if (!ifp || !ifp->info)
  ------------------
  |  Branch (304:8): [True: 0, False: 0]
  |  Branch (304:16): [True: 0, False: 0]
  ------------------
  305|      0|				continue;
  306|       |
  307|      0|			if (if_is_loopback(ifp) && if_is_loopback(src_ifp))
  ------------------
  |  Branch (307:8): [True: 0, False: 0]
  |  Branch (307:31): [True: 0, False: 0]
  ------------------
  308|      0|				return true;
  309|       |
  310|      0|			nbr = pim_neighbor_find(ifp, znh->nexthop_addr, true);
  311|      0|			if (!nbr)
  ------------------
  |  Branch (311:8): [True: 0, False: 0]
  ------------------
  312|      0|				continue;
  313|       |
  314|      0|			return znh->ifindex == src_ifp->ifindex;
  315|      0|		}
  316|      0|		return false;
  317|      0|	}
  318|       |
  319|      0|	if (!CHECK_FLAG(pnc->flags, PIM_NEXTHOP_VALID))
  ------------------
  |  |  394|      0|#define CHECK_FLAG(V,F)      ((V) & (F))
  ------------------
  |  Branch (319:6): [True: 0, False: 0]
  ------------------
  320|      0|		return false;
  321|       |
  322|       |	/* if we accept BSMs from more than one ECMP nexthop, this will cause
  323|       |	 * BSM message "multiplication" for each ECMP hop.  i.e. if you have
  324|       |	 * 4-way ECMP and 4 hops you end up with 256 copies of each BSM
  325|       |	 * message.
  326|       |	 *
  327|       |	 * so...  only accept the first (IPv4) valid nexthop as source.
  328|       |	 */
  329|       |
  330|      0|	for (nh = pnc->nexthop; nh; nh = nh->next) {
  ------------------
  |  Branch (330:26): [True: 0, False: 0]
  ------------------
  331|      0|		pim_addr nhaddr;
  332|       |
  333|      0|		switch (nh->type) {
  ------------------
  |  Branch (333:11): [True: 0, False: 0]
  ------------------
  334|      0|#if PIM_IPV == 4
  335|      0|		case NEXTHOP_TYPE_IPV4:
  ------------------
  |  Branch (335:3): [True: 0, False: 0]
  ------------------
  336|      0|			if (nh->ifindex == IFINDEX_INTERNAL)
  ------------------
  |  |  237|      0|#define IFINDEX_INTERNAL	0
  ------------------
  |  Branch (336:8): [True: 0, False: 0]
  ------------------
  337|      0|				continue;
  338|       |
  339|       |			/* fallthru */
  340|      0|		case NEXTHOP_TYPE_IPV4_IFINDEX:
  ------------------
  |  Branch (340:3): [True: 0, False: 0]
  ------------------
  341|      0|			nhaddr = nh->gate.ipv4;
  342|      0|			break;
  343|      0|		case NEXTHOP_TYPE_IPV6:
  ------------------
  |  Branch (343:3): [True: 0, False: 0]
  ------------------
  344|      0|		case NEXTHOP_TYPE_IPV6_IFINDEX:
  ------------------
  |  Branch (344:3): [True: 0, False: 0]
  ------------------
  345|      0|			continue;
  346|       |#else
  347|       |		case NEXTHOP_TYPE_IPV6:
  348|       |			if (nh->ifindex == IFINDEX_INTERNAL)
  349|       |				continue;
  350|       |
  351|       |			/* fallthru */
  352|       |		case NEXTHOP_TYPE_IPV6_IFINDEX:
  353|       |			nhaddr = nh->gate.ipv6;
  354|       |			break;
  355|       |		case NEXTHOP_TYPE_IPV4:
  356|       |		case NEXTHOP_TYPE_IPV4_IFINDEX:
  357|       |			continue;
  358|       |#endif
  359|      0|		case NEXTHOP_TYPE_IFINDEX:
  ------------------
  |  Branch (359:3): [True: 0, False: 0]
  ------------------
  360|      0|			nhaddr = bsr_addr;
  361|      0|			break;
  362|       |
  363|      0|		case NEXTHOP_TYPE_BLACKHOLE:
  ------------------
  |  Branch (363:3): [True: 0, False: 0]
  ------------------
  364|      0|			continue;
  365|      0|		}
  366|       |
  367|      0|		ifp = if_lookup_by_index(nh->ifindex, pim->vrf->vrf_id);
  368|      0|		if (!ifp || !ifp->info)
  ------------------
  |  Branch (368:7): [True: 0, False: 0]
  |  Branch (368:15): [True: 0, False: 0]
  ------------------
  369|      0|			continue;
  370|       |
  371|      0|		if (if_is_loopback(ifp) && if_is_loopback(src_ifp))
  ------------------
  |  Branch (371:7): [True: 0, False: 0]
  |  Branch (371:30): [True: 0, False: 0]
  ------------------
  372|      0|			return true;
  373|       |
  374|       |		/* MRIB (IGP) may be pointing at a router where PIM is down */
  375|       |
  376|      0|		nbr = pim_neighbor_find(ifp, nhaddr, true);
  377|       |
  378|      0|		if (!nbr)
  ------------------
  |  Branch (378:7): [True: 0, False: 0]
  ------------------
  379|      0|			continue;
  380|       |
  381|      0|		return nh->ifindex == src_ifp->ifindex;
  382|      0|	}
  383|      0|	return false;
  384|      0|}
pim_rp_nexthop_del:
  387|  32.0k|{
  388|  32.0k|	rp_info->rp.source_nexthop.interface = NULL;
  389|  32.0k|	rp_info->rp.source_nexthop.mrib_nexthop_addr = PIMADDR_ANY;
  ------------------
  |  |   79|  32.0k|#define PIMADDR_ANY (pim_addr){ }
  ------------------
  390|  32.0k|	rp_info->rp.source_nexthop.mrib_metric_preference =
  391|  32.0k|		router->infinite_assert_metric.metric_preference;
  392|  32.0k|	rp_info->rp.source_nexthop.mrib_route_metric =
  393|  32.0k|		router->infinite_assert_metric.route_metric;
  394|  32.0k|}
pim_ecmp_nexthop_lookup:
  898|   118k|{
  899|   118k|	struct pim_nexthop_cache *pnc;
  900|   118k|	struct pim_zlookup_nexthop nexthop_tab[router->multipath];
  901|   118k|	struct pim_neighbor *nbrs[router->multipath], *nbr = NULL;
  902|   118k|	struct pim_rpf rpf;
  903|   118k|	int num_ifindex;
  904|   118k|	struct interface *ifps[router->multipath], *ifp;
  905|   118k|	int first_ifindex;
  906|   118k|	int found = 0;
  907|   118k|	uint8_t i = 0;
  908|   118k|	uint32_t hash_val = 0, mod_val = 0;
  909|   118k|	uint32_t num_nbrs = 0;
  910|   118k|	struct pim_interface *pim_ifp;
  911|       |
  912|   118k|	if (PIM_DEBUG_PIM_NHT_DETAIL)
  ------------------
  |  |  168|   118k|#define PIM_DEBUG_PIM_NHT_DETAIL (router->debugs & PIM_MASK_PIM_NHT_DETAIL)
  |  |  ------------------
  |  |  |  |   95|   118k|#define PIM_MASK_PIM_NHT_DETAIL      (1 << 23)
  |  |  ------------------
  |  |  |  Branch (168:34): [True: 0, False: 118k]
  |  |  ------------------
  ------------------
  913|      0|		zlog_debug("%s: Looking up: %pPA(%s), last lookup time: %lld",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  914|   118k|			   __func__, &src, pim->vrf->name,
  915|   118k|			   nexthop->last_lookup_time);
  916|       |
  917|   118k|	rpf.rpf_addr = src;
  918|       |
  919|   118k|	pnc = pim_nexthop_cache_find(pim, &rpf);
  920|   118k|	if (pnc) {
  ------------------
  |  Branch (920:6): [True: 118k, False: 0]
  ------------------
  921|   118k|		if (CHECK_FLAG(pnc->flags, PIM_NEXTHOP_ANSWER_RECEIVED))
  ------------------
  |  |  394|   118k|#define CHECK_FLAG(V,F)      ((V) & (F))
  |  |  ------------------
  |  |  |  Branch (394:30): [True: 0, False: 118k]
  |  |  ------------------
  ------------------
  922|      0|		    return pim_ecmp_nexthop_search(pim, pnc, nexthop, src, grp,
  923|      0|						   neighbor_needed);
  924|   118k|	}
  925|       |
  926|   118k|	memset(nexthop_tab, 0,
  927|   118k|	       sizeof(struct pim_zlookup_nexthop) * router->multipath);
  928|   118k|	num_ifindex =
  929|   118k|		zclient_lookup_nexthop(pim, nexthop_tab, router->multipath, src,
  930|   118k|				       PIM_NEXTHOP_LOOKUP_MAX);
  ------------------
  |  |   14|   118k|#define PIM_NEXTHOP_LOOKUP_MAX (3) /* max. recursive route lookup */
  ------------------
  931|   118k|	if (num_ifindex < 1) {
  ------------------
  |  Branch (931:6): [True: 118k, False: 0]
  ------------------
  932|   118k|		if (PIM_DEBUG_PIM_NHT)
  ------------------
  |  |  167|   118k|#define PIM_DEBUG_PIM_NHT (router->debugs & PIM_MASK_PIM_NHT)
  |  |  ------------------
  |  |  |  |   94|   118k|#define PIM_MASK_PIM_NHT             (1 << 22)
  |  |  ------------------
  |  |  |  Branch (167:27): [True: 0, False: 118k]
  |  |  ------------------
  ------------------
  933|      0|			zlog_warn(
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
  934|   118k|				"%s: could not find nexthop ifindex for address %pPA(%s)",
  935|   118k|				__func__, &src, pim->vrf->name);
  936|   118k|		return 0;
  937|   118k|	}
  938|       |
  939|      0|	memset(&nbrs, 0, sizeof(nbrs));
  940|      0|	memset(&ifps, 0, sizeof(ifps));
  941|       |
  942|       |	/*
  943|       |	 * Look up all interfaces and neighbors,
  944|       |	 * store for later usage
  945|       |	 */
  946|      0|	for (i = 0; i < num_ifindex; i++) {
  ------------------
  |  Branch (946:14): [True: 0, False: 0]
  ------------------
  947|      0|		ifps[i] = if_lookup_by_index(nexthop_tab[i].ifindex,
  948|      0|					     pim->vrf->vrf_id);
  949|      0|		if (ifps[i]) {
  ------------------
  |  Branch (949:7): [True: 0, False: 0]
  ------------------
  950|      0|			nbrs[i] = pim_neighbor_find(
  951|      0|				ifps[i], nexthop_tab[i].nexthop_addr, true);
  952|       |
  953|      0|			if (nbrs[i] || pim_if_connected_to_source(ifps[i], src))
  ------------------
  |  Branch (953:8): [True: 0, False: 0]
  |  Branch (953:19): [True: 0, False: 0]
  ------------------
  954|      0|				num_nbrs++;
  955|      0|		}
  956|      0|	}
  957|       |
  958|       |	// If PIM ECMP enable then choose ECMP path.
  959|      0|	if (pim->ecmp_enable) {
  ------------------
  |  Branch (959:6): [True: 0, False: 0]
  ------------------
  960|      0|		struct prefix src_pfx;
  961|      0|		uint32_t consider = num_ifindex;
  962|       |
  963|      0|		if (neighbor_needed && num_nbrs < consider)
  ------------------
  |  Branch (963:7): [True: 0, False: 0]
  |  Branch (963:26): [True: 0, False: 0]
  ------------------
  964|      0|			consider = num_nbrs;
  965|       |
  966|      0|		if (consider == 0)
  ------------------
  |  Branch (966:7): [True: 0, False: 0]
  ------------------
  967|      0|			return 0;
  968|       |
  969|      0|		pim_addr_to_prefix(&src_pfx, src);
  970|      0|		hash_val = pim_compute_ecmp_hash(&src_pfx, grp);
  971|      0|		mod_val = hash_val % consider;
  972|      0|		if (PIM_DEBUG_PIM_NHT_DETAIL)
  ------------------
  |  |  168|      0|#define PIM_DEBUG_PIM_NHT_DETAIL (router->debugs & PIM_MASK_PIM_NHT_DETAIL)
  |  |  ------------------
  |  |  |  |   95|      0|#define PIM_MASK_PIM_NHT_DETAIL      (1 << 23)
  |  |  ------------------
  |  |  |  Branch (168:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  973|      0|			zlog_debug("%s: hash_val %u mod_val %u", __func__,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  974|      0|				   hash_val, mod_val);
  975|      0|	}
  976|       |
  977|      0|	i = 0;
  978|      0|	while (!found && (i < num_ifindex)) {
  ------------------
  |  Branch (978:9): [True: 0, False: 0]
  |  Branch (978:19): [True: 0, False: 0]
  ------------------
  979|      0|		first_ifindex = nexthop_tab[i].ifindex;
  980|       |
  981|      0|		ifp = ifps[i];
  982|      0|		if (!ifp) {
  ------------------
  |  Branch (982:7): [True: 0, False: 0]
  ------------------
  983|      0|			if (PIM_DEBUG_PIM_NHT)
  ------------------
  |  |  167|      0|#define PIM_DEBUG_PIM_NHT (router->debugs & PIM_MASK_PIM_NHT)
  |  |  ------------------
  |  |  |  |   94|      0|#define PIM_MASK_PIM_NHT             (1 << 22)
  |  |  ------------------
  |  |  |  Branch (167:27): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  984|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  985|      0|					"%s %s: could not find interface for ifindex %d (address %pPA(%s))",
  986|      0|					__FILE__, __func__, first_ifindex, &src,
  987|      0|					pim->vrf->name);
  988|      0|			if (i == mod_val)
  ------------------
  |  Branch (988:8): [True: 0, False: 0]
  ------------------
  989|      0|				mod_val++;
  990|      0|			i++;
  991|      0|			continue;
  992|      0|		}
  993|       |
  994|      0|		pim_ifp = ifp->info;
  995|       |
  996|      0|		if (!pim_ifp || !pim_ifp->pim_enable) {
  ------------------
  |  Branch (996:7): [True: 0, False: 0]
  |  Branch (996:19): [True: 0, False: 0]
  ------------------
  997|      0|			if (PIM_DEBUG_PIM_NHT)
  ------------------
  |  |  167|      0|#define PIM_DEBUG_PIM_NHT (router->debugs & PIM_MASK_PIM_NHT)
  |  |  ------------------
  |  |  |  |   94|      0|#define PIM_MASK_PIM_NHT             (1 << 22)
  |  |  ------------------
  |  |  |  Branch (167:27): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  998|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  999|      0|					"%s: pim not enabled on input interface %s(%s) (ifindex=%d, RPF for source %pPA)",
 1000|      0|					__func__, ifp->name, pim->vrf->name,
 1001|      0|					first_ifindex, &src);
 1002|      0|			if (i == mod_val)
  ------------------
  |  Branch (1002:8): [True: 0, False: 0]
  ------------------
 1003|      0|				mod_val++;
 1004|      0|			i++;
 1005|      0|			continue;
 1006|      0|		}
 1007|      0|		if (neighbor_needed && !pim_if_connected_to_source(ifp, src)) {
  ------------------
  |  Branch (1007:7): [True: 0, False: 0]
  |  Branch (1007:26): [True: 0, False: 0]
  ------------------
 1008|      0|			nbr = nbrs[i];
 1009|      0|			if (PIM_DEBUG_PIM_NHT_DETAIL)
  ------------------
  |  |  168|      0|#define PIM_DEBUG_PIM_NHT_DETAIL (router->debugs & PIM_MASK_PIM_NHT_DETAIL)
  |  |  ------------------
  |  |  |  |   95|      0|#define PIM_MASK_PIM_NHT_DETAIL      (1 << 23)
  |  |  ------------------
  |  |  |  Branch (168:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1010|      0|				zlog_debug("ifp name: %s(%s), pim nbr: %p",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1011|      0|					   ifp->name, pim->vrf->name, nbr);
 1012|      0|			if (!nbr && !if_is_loopback(ifp)) {
  ------------------
  |  Branch (1012:8): [True: 0, False: 0]
  |  Branch (1012:16): [True: 0, False: 0]
  ------------------
 1013|      0|				if (i == mod_val)
  ------------------
  |  Branch (1013:9): [True: 0, False: 0]
  ------------------
 1014|      0|					mod_val++;
 1015|      0|				if (PIM_DEBUG_PIM_NHT)
  ------------------
  |  |  167|      0|#define PIM_DEBUG_PIM_NHT (router->debugs & PIM_MASK_PIM_NHT)
  |  |  ------------------
  |  |  |  |   94|      0|#define PIM_MASK_PIM_NHT             (1 << 22)
  |  |  ------------------
  |  |  |  Branch (167:27): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1016|      0|					zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1017|      0|						"%s: NBR (%pPA) not found on input interface %s(%s) (RPF for source %pPA)",
 1018|      0|						__func__,
 1019|      0|						&nexthop_tab[i].nexthop_addr,
 1020|      0|						ifp->name, pim->vrf->name,
 1021|      0|						&src);
 1022|      0|				i++;
 1023|      0|				continue;
 1024|      0|			}
 1025|      0|		}
 1026|       |
 1027|      0|		if (i == mod_val) {
  ------------------
  |  Branch (1027:7): [True: 0, False: 0]
  ------------------
 1028|      0|			if (PIM_DEBUG_PIM_NHT)
  ------------------
  |  |  167|      0|#define PIM_DEBUG_PIM_NHT (router->debugs & PIM_MASK_PIM_NHT)
  |  |  ------------------
  |  |  |  |   94|      0|#define PIM_MASK_PIM_NHT             (1 << 22)
  |  |  ------------------
  |  |  |  Branch (167:27): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1029|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1030|      0|					"%s: found nhop %pPA for addr %pPA interface %s(%s) metric %d dist %d",
 1031|      0|					__func__, &nexthop_tab[i].nexthop_addr,
 1032|      0|					&src, ifp->name, pim->vrf->name,
 1033|      0|					nexthop_tab[i].route_metric,
 1034|      0|					nexthop_tab[i].protocol_distance);
 1035|       |			/* update nexthop data */
 1036|      0|			nexthop->interface = ifp;
 1037|      0|			nexthop->mrib_nexthop_addr =
 1038|      0|				nexthop_tab[i].nexthop_addr;
 1039|      0|			nexthop->mrib_metric_preference =
 1040|      0|				nexthop_tab[i].protocol_distance;
 1041|      0|			nexthop->mrib_route_metric =
 1042|      0|				nexthop_tab[i].route_metric;
 1043|      0|			nexthop->last_lookup = src;
 1044|      0|			nexthop->last_lookup_time = pim_time_monotonic_usec();
 1045|      0|			nexthop->nbr = nbr;
 1046|      0|			found = 1;
 1047|      0|		}
 1048|      0|		i++;
 1049|      0|	}
 1050|       |
 1051|      0|	if (found)
  ------------------
  |  Branch (1051:6): [True: 0, False: 0]
  ------------------
 1052|      0|		return 1;
 1053|      0|	else
 1054|      0|		return 0;
 1055|      0|}
pim_nht.c:pim_nht_get:
   98|   124k|{
   99|   124k|	struct pim_nexthop_cache *pnc = NULL;
  100|   124k|	struct pim_rpf rpf;
  101|   124k|	struct zclient *zclient = NULL;
  102|       |
  103|   124k|	zclient = pim_zebra_zclient_get();
  104|   124k|	memset(&rpf, 0, sizeof(rpf));
  105|   124k|	rpf.rpf_addr = addr;
  106|       |
  107|   124k|	pnc = pim_nexthop_cache_find(pim, &rpf);
  108|   124k|	if (!pnc) {
  ------------------
  |  Branch (108:6): [True: 30.2k, False: 94.3k]
  ------------------
  109|  30.2k|		pnc = pim_nexthop_cache_add(pim, &rpf);
  110|  30.2k|		pim_sendmsg_zebra_rnh(pim, zclient, pnc,
  111|  30.2k|				      ZEBRA_NEXTHOP_REGISTER);
  112|  30.2k|		if (PIM_DEBUG_PIM_NHT_DETAIL)
  ------------------
  |  |  168|  30.2k|#define PIM_DEBUG_PIM_NHT_DETAIL (router->debugs & PIM_MASK_PIM_NHT_DETAIL)
  |  |  ------------------
  |  |  |  |   95|  30.2k|#define PIM_MASK_PIM_NHT_DETAIL      (1 << 23)
  |  |  ------------------
  |  |  |  Branch (168:34): [True: 0, False: 30.2k]
  |  |  ------------------
  ------------------
  113|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  114|  30.2k|				"%s: NHT cache and zebra notification added for %pPA(%s)",
  115|  30.2k|				__func__, &addr, pim->vrf->name);
  116|  30.2k|	}
  117|       |
  118|   124k|	return pnc;
  119|   124k|}
pim_nht.c:pim_nexthop_cache_add:
   75|  30.2k|{
   76|  30.2k|	struct pim_nexthop_cache *pnc;
   77|  30.2k|	char hash_name[64];
   78|       |
   79|  30.2k|	pnc = XCALLOC(MTYPE_PIM_NEXTHOP_CACHE,
  ------------------
  |  |  165|  30.2k|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
   80|  30.2k|		      sizeof(struct pim_nexthop_cache));
   81|  30.2k|	pnc->rpf.rpf_addr = rpf_addr->rpf_addr;
   82|       |
   83|  30.2k|	pnc = hash_get(pim->rpf_hash, pnc, hash_alloc_intern);
   84|       |
   85|  30.2k|	pnc->rp_list = list_new();
   86|  30.2k|	pnc->rp_list->cmp = pim_rp_list_cmp;
   87|       |
   88|  30.2k|	snprintfrr(hash_name, sizeof(hash_name), "PNC %pPA(%s) Upstream Hash",
   89|  30.2k|		   &pnc->rpf.rpf_addr, pim->vrf->name);
   90|  30.2k|	pnc->upstream_hash = hash_create_size(8192, pim_upstream_hash_key,
   91|  30.2k|					      pim_upstream_equal, hash_name);
   92|       |
   93|  30.2k|	return pnc;
   94|  30.2k|}
pim_nht.c:pim_nht_drop_maybe:
  164|  72.5k|{
  165|  72.5k|	if (PIM_DEBUG_PIM_NHT)
  ------------------
  |  |  167|  72.5k|#define PIM_DEBUG_PIM_NHT (router->debugs & PIM_MASK_PIM_NHT)
  |  |  ------------------
  |  |  |  |   94|  72.5k|#define PIM_MASK_PIM_NHT             (1 << 22)
  |  |  ------------------
  |  |  |  Branch (167:27): [True: 0, False: 72.5k]
  |  |  ------------------
  ------------------
  166|      0|		zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  167|  72.5k|			"%s: NHT %pPA(%s) rp_list count:%d upstream count:%ld BSR count:%u",
  168|  72.5k|			__func__, &pnc->rpf.rpf_addr, pim->vrf->name,
  169|  72.5k|			pnc->rp_list->count, pnc->upstream_hash->count,
  170|  72.5k|			pnc->bsr_count);
  171|       |
  172|  72.5k|	if (pnc->rp_list->count == 0 && pnc->upstream_hash->count == 0
  ------------------
  |  Branch (172:6): [True: 43.1k, False: 29.3k]
  |  Branch (172:34): [True: 30.0k, False: 13.1k]
  ------------------
  173|  30.0k|	    && pnc->bsr_count == 0) {
  ------------------
  |  Branch (173:9): [True: 30.0k, False: 0]
  ------------------
  174|  30.0k|		struct zclient *zclient = pim_zebra_zclient_get();
  175|       |
  176|  30.0k|		pim_sendmsg_zebra_rnh(pim, zclient, pnc,
  177|  30.0k|				      ZEBRA_NEXTHOP_UNREGISTER);
  178|       |
  179|  30.0k|		list_delete(&pnc->rp_list);
  180|  30.0k|		hash_free(pnc->upstream_hash);
  181|       |
  182|  30.0k|		hash_release(pim->rpf_hash, pnc);
  183|  30.0k|		if (pnc->nexthop)
  ------------------
  |  Branch (183:7): [True: 0, False: 30.0k]
  ------------------
  184|      0|			nexthops_free(pnc->nexthop);
  185|       |		XFREE(MTYPE_PIM_NEXTHOP_CACHE, pnc);
  ------------------
  |  |  170|  30.0k|	do {                                                                   \
  |  |  171|  30.0k|		qfree(mtype, ptr);                                             \
  |  |  172|  30.0k|		ptr = NULL;                                                    \
  |  |  173|  30.0k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 30.0k]
  |  |  ------------------
  ------------------
  186|  30.0k|	}
  187|  72.5k|}

pim_channel_oil_compare:
   53|   830k|{
   54|   830k|	struct channel_oil *c1 = (struct channel_oil *)cc1;
   55|   830k|	struct channel_oil *c2 = (struct channel_oil *)cc2;
   56|   830k|	int rv;
   57|       |
   58|   830k|	rv = pim_addr_cmp(*oil_mcastgrp(c1), *oil_mcastgrp(c2));
   59|   830k|	if (rv)
  ------------------
  |  Branch (59:6): [True: 540k, False: 290k]
  ------------------
   60|   540k|		return rv;
   61|   290k|	rv = pim_addr_cmp(*oil_origin(c1), *oil_origin(c2));
   62|   290k|	if (rv)
  ------------------
  |  Branch (62:6): [True: 290k, False: 0]
  ------------------
   63|   290k|		return rv;
   64|      0|	return 0;
   65|   290k|}
pim_oil_init:
   68|      1|{
   69|      1|	rb_pim_oil_init(&pim->channel_oil_head);
   70|      1|}
pim_channel_oil_free:
   83|  42.5k|{
   84|       |	XFREE(MTYPE_PIM_CHANNEL_OIL, c_oil);
  ------------------
  |  |  170|  42.5k|	do {                                                                   \
  |  |  171|  42.5k|		qfree(mtype, ptr);                                             \
  |  |  172|  42.5k|		ptr = NULL;                                                    \
  |  |  173|  42.5k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 42.5k]
  |  |  ------------------
  ------------------
   85|  42.5k|}
pim_find_channel_oil:
   89|  43.2k|{
   90|  43.2k|	struct channel_oil *c_oil = NULL;
   91|  43.2k|	struct channel_oil lookup;
   92|       |
   93|  43.2k|	*oil_mcastgrp(&lookup) = sg->grp;
   94|  43.2k|	*oil_origin(&lookup) = sg->src;
   95|       |
   96|  43.2k|	c_oil = rb_pim_oil_find(&pim->channel_oil_head, &lookup);
   97|       |
   98|  43.2k|	return c_oil;
   99|  43.2k|}
pim_channel_oil_add:
  103|  43.2k|{
  104|  43.2k|	struct channel_oil *c_oil;
  105|       |
  106|  43.2k|	c_oil = pim_find_channel_oil(pim, sg);
  107|  43.2k|	if (c_oil) {
  ------------------
  |  Branch (107:6): [True: 0, False: 43.2k]
  ------------------
  108|      0|		++c_oil->oil_ref_count;
  109|       |
  110|      0|		if (!c_oil->up) {
  ------------------
  |  Branch (110:7): [True: 0, False: 0]
  ------------------
  111|       |			/* channel might be present prior to upstream */
  112|      0|			c_oil->up = pim_upstream_find(
  113|      0|					pim, sg);
  114|       |			/* if the upstream entry is being anchored to an
  115|       |			 * already existing channel OIL we need to re-evaluate
  116|       |			 * the "Mute" state on AA OIFs
  117|       |			 */
  118|      0|			pim_channel_update_mute(c_oil);
  119|      0|		}
  120|       |
  121|       |		/* check if the IIF has changed
  122|       |		 * XXX - is this really needed
  123|       |		 */
  124|      0|		pim_upstream_mroute_iif_update(c_oil, __func__);
  125|       |
  126|      0|		if (PIM_DEBUG_MROUTE)
  ------------------
  |  |  158|      0|	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   85|      0|#define PIM_MASK_MROUTE              (1 << 13)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   86|      0|#define PIM_MASK_MROUTE_DETAIL       (1 << 14)
  |  |  ------------------
  |  |  |  Branch (158:2): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  127|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  128|      0|				"%s(%s): Existing oil for %pSG Ref Count: %d (Post Increment)",
  129|      0|				__func__, name, sg, c_oil->oil_ref_count);
  130|      0|		return c_oil;
  131|      0|	}
  132|       |
  133|  43.2k|	c_oil = XCALLOC(MTYPE_PIM_CHANNEL_OIL, sizeof(*c_oil));
  ------------------
  |  |  165|  43.2k|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  134|       |
  135|  43.2k|	*oil_mcastgrp(c_oil) = sg->grp;
  136|  43.2k|	*oil_origin(c_oil) = sg->src;
  137|       |
  138|  43.2k|	*oil_parent(c_oil) = MAXVIFS;
  ------------------
  |  |   43|  43.2k|#define MAXVIFS 32
  ------------------
  139|  43.2k|	c_oil->oil_ref_count = 1;
  140|  43.2k|	c_oil->installed = 0;
  141|  43.2k|	c_oil->up = pim_upstream_find(pim, sg);
  142|  43.2k|	c_oil->pim = pim;
  143|       |
  144|  43.2k|	rb_pim_oil_add(&pim->channel_oil_head, c_oil);
  145|       |
  146|  43.2k|	if (PIM_DEBUG_MROUTE)
  ------------------
  |  |  158|  43.2k|	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   85|  43.2k|#define PIM_MASK_MROUTE              (1 << 13)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   86|  43.2k|#define PIM_MASK_MROUTE_DETAIL       (1 << 14)
  |  |  ------------------
  |  |  |  Branch (158:2): [True: 0, False: 43.2k]
  |  |  ------------------
  ------------------
  147|      0|		zlog_debug("%s(%s): c_oil %pSG add", __func__, name, sg);
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  148|       |
  149|  43.2k|	return c_oil;
  150|  43.2k|}
pim_channel_oil_del:
  179|  42.5k|{
  180|  42.5k|	if (PIM_DEBUG_MROUTE) {
  ------------------
  |  |  158|  42.5k|	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   85|  42.5k|#define PIM_MASK_MROUTE              (1 << 13)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   86|  42.5k|#define PIM_MASK_MROUTE_DETAIL       (1 << 14)
  |  |  ------------------
  |  |  |  Branch (158:2): [True: 0, False: 42.5k]
  |  |  ------------------
  ------------------
  181|      0|		pim_sgaddr sg = {.src = *oil_origin(c_oil),
  182|      0|				 .grp = *oil_mcastgrp(c_oil)};
  183|       |
  184|      0|		zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  185|      0|			"%s(%s): Del oil for %pSG, Ref Count: %d (Predecrement)",
  186|      0|			__func__, name, &sg, c_oil->oil_ref_count);
  187|      0|	}
  188|  42.5k|	--c_oil->oil_ref_count;
  189|       |
  190|  42.5k|	if (c_oil->oil_ref_count < 1) {
  ------------------
  |  Branch (190:6): [True: 42.5k, False: 0]
  ------------------
  191|       |		/*
  192|       |		 * notice that listnode_delete() can't be moved
  193|       |		 * into pim_channel_oil_free() because the later is
  194|       |		 * called by list_delete_all_node()
  195|       |		 */
  196|  42.5k|		c_oil->up = NULL;
  197|  42.5k|		rb_pim_oil_del(&c_oil->pim->channel_oil_head, c_oil);
  198|       |
  199|  42.5k|		pim_channel_oil_free(c_oil);
  200|  42.5k|		return NULL;
  201|  42.5k|	}
  202|       |
  203|      0|	return c_oil;
  204|  42.5k|}
pim_channel_oil_upstream_deref:
  207|  42.5k|{
  208|       |	/* The upstream entry associated with a channel_oil is abt to be
  209|       |	 * deleted. If the channel_oil is kept around because of other
  210|       |	 * references we need to remove upstream based states out of it.
  211|       |	 */
  212|  42.5k|	c_oil = pim_channel_oil_del(c_oil, __func__);
  213|  42.5k|	if (c_oil) {
  ------------------
  |  Branch (213:6): [True: 0, False: 42.5k]
  ------------------
  214|       |		/* note: here we assume that c_oil->up has already been
  215|       |		 * cleared
  216|       |		 */
  217|      0|		pim_channel_update_mute(c_oil);
  218|      0|	}
  219|  42.5k|}
pim_channel_del_oif:
  223|  49.6k|{
  224|  49.6k|	struct pim_interface *pim_ifp;
  225|       |
  226|  49.6k|	assert(channel_oil);
  ------------------
  |  |   51|  49.6k|	({                                                                     \
  |  |   52|  49.6k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  49.6k|			(used)) = {                                            \
  |  |   54|  49.6k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  49.6k|	{                                                                      \
  |  |  |  |  284|  49.6k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  49.6k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  49.6k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  49.6k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  49.6k|	}                                                                      \
  |  |  ------------------
  |  |   55|  49.6k|			.expr = #expr_,                                        \
  |  |   56|  49.6k|		};                                                             \
  |  |   57|  49.6k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  49.6k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  49.6k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  49.6k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  49.6k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 49.6k]
  |  |  |  Branch (58:24): [True: 49.6k, False: 0]
  |  |  ------------------
  |  |   59|  49.6k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  49.6k|	})
  ------------------
  227|  49.6k|	assert(oif);
  ------------------
  |  |   51|  49.6k|	({                                                                     \
  |  |   52|  49.6k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  49.6k|			(used)) = {                                            \
  |  |   54|  49.6k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  49.6k|	{                                                                      \
  |  |  |  |  284|  49.6k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  49.6k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  49.6k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  49.6k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  49.6k|	}                                                                      \
  |  |  ------------------
  |  |   55|  49.6k|			.expr = #expr_,                                        \
  |  |   56|  49.6k|		};                                                             \
  |  |   57|  49.6k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  49.6k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  49.6k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  49.6k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  49.6k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 49.6k]
  |  |  |  Branch (58:24): [True: 49.6k, False: 0]
  |  |  ------------------
  |  |   59|  49.6k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  49.6k|	})
  ------------------
  228|       |
  229|  49.6k|	pim_ifp = oif->info;
  230|       |
  231|  49.6k|	assertf(pim_ifp->mroute_vif_index >= 0,
  ------------------
  |  |   65|  49.6k|	({                                                                     \
  |  |   66|  49.6k|		static const struct xref_assert _xref __attribute__(           \
  |  |   67|  49.6k|			(used)) = {                                            \
  |  |   68|  49.6k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  49.6k|	{                                                                      \
  |  |  |  |  284|  49.6k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  49.6k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  49.6k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  49.6k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  49.6k|	}                                                                      \
  |  |  ------------------
  |  |   69|  49.6k|			.expr = #expr_,                                        \
  |  |   70|  49.6k|			.extra = extra_,                                       \
  |  |   71|  49.6k|			.args = #__VA_ARGS__,                                  \
  |  |   72|  49.6k|		};                                                             \
  |  |   73|  49.6k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  49.6k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  49.6k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  49.6k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   74|  49.6k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (74:7): [True: 0, False: 49.6k]
  |  |  |  Branch (74:24): [True: 49.6k, False: 0]
  |  |  ------------------
  |  |   75|  49.6k|			do {                                                   \
  |  |   76|      0|				_zlog_assert_failed(&_xref, extra_,            \
  |  |   77|      0|						    ##__VA_ARGS__);            \
  |  |   78|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (78:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   79|  49.6k|	})
  ------------------
  232|  49.6k|		"trying to del OIF %s with VIF (%d)", oif->name,
  233|  49.6k|		pim_ifp->mroute_vif_index);
  234|       |
  235|       |	/*
  236|       |	 * Don't do anything if we've been asked to remove a source
  237|       |	 * that is not actually on it.
  238|       |	 */
  239|  49.6k|	if (!(channel_oil->oif_flags[pim_ifp->mroute_vif_index] & proto_mask)) {
  ------------------
  |  Branch (239:6): [True: 48.5k, False: 1.15k]
  ------------------
  240|  48.5k|		if (PIM_DEBUG_MROUTE) {
  ------------------
  |  |  158|  48.5k|	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   85|  48.5k|#define PIM_MASK_MROUTE              (1 << 13)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   86|  48.5k|#define PIM_MASK_MROUTE_DETAIL       (1 << 14)
  |  |  ------------------
  |  |  |  Branch (158:2): [True: 0, False: 48.5k]
  |  |  ------------------
  ------------------
  241|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  242|      0|				"%s %s: no existing protocol mask %u(%u) for requested OIF %s (vif_index=%d, min_ttl=%d) for channel (S,G)=(%pPAs,%pPAs)",
  243|      0|				__FILE__, __func__, proto_mask,
  244|      0|				channel_oil
  245|      0|					->oif_flags[pim_ifp->mroute_vif_index],
  246|      0|				oif->name, pim_ifp->mroute_vif_index,
  247|      0|				oil_if_has(channel_oil, pim_ifp->mroute_vif_index),
  248|      0|				oil_origin(channel_oil),
  249|      0|				oil_mcastgrp(channel_oil));
  250|      0|		}
  251|  48.5k|		return 0;
  252|  48.5k|	}
  253|       |
  254|  1.15k|	channel_oil->oif_flags[pim_ifp->mroute_vif_index] &= ~proto_mask;
  255|       |
  256|  1.15k|	if (channel_oil->oif_flags[pim_ifp->mroute_vif_index] &
  ------------------
  |  Branch (256:6): [True: 604, False: 546]
  ------------------
  257|  1.15k|			PIM_OIF_FLAG_PROTO_ANY) {
  ------------------
  |  |   27|  1.15k|	(PIM_OIF_FLAG_PROTO_GM | PIM_OIF_FLAG_PROTO_PIM |                      \
  |  |  ------------------
  |  |  |  |   22|  1.15k|#define PIM_OIF_FLAG_PROTO_GM     (1 << 0)
  |  |  ------------------
  |  |               	(PIM_OIF_FLAG_PROTO_GM | PIM_OIF_FLAG_PROTO_PIM |                      \
  |  |  ------------------
  |  |  |  |   23|  1.15k|#define PIM_OIF_FLAG_PROTO_PIM    (1 << 1)
  |  |  ------------------
  |  |   28|  1.15k|	 PIM_OIF_FLAG_PROTO_STAR | PIM_OIF_FLAG_PROTO_VXLAN)
  |  |  ------------------
  |  |  |  |   24|  1.15k|#define PIM_OIF_FLAG_PROTO_STAR   (1 << 2)
  |  |  ------------------
  |  |               	 PIM_OIF_FLAG_PROTO_STAR | PIM_OIF_FLAG_PROTO_VXLAN)
  |  |  ------------------
  |  |  |  |   25|  1.15k|#define PIM_OIF_FLAG_PROTO_VXLAN  (1 << 3)
  |  |  ------------------
  ------------------
  258|    604|		if (PIM_DEBUG_MROUTE) {
  ------------------
  |  |  158|    604|	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   85|    604|#define PIM_MASK_MROUTE              (1 << 13)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   86|    604|#define PIM_MASK_MROUTE_DETAIL       (1 << 14)
  |  |  ------------------
  |  |  |  Branch (158:2): [True: 0, False: 604]
  |  |  ------------------
  ------------------
  259|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  260|      0|				"%s %s: other protocol masks remain for requested OIF %s (vif_index=%d, min_ttl=%d) for channel (S,G)=(%pPAs,%pPAs)",
  261|      0|				__FILE__, __func__, oif->name,
  262|      0|				pim_ifp->mroute_vif_index,
  263|      0|				oil_if_has(channel_oil, pim_ifp->mroute_vif_index),
  264|      0|				oil_origin(channel_oil),
  265|      0|				oil_mcastgrp(channel_oil));
  266|      0|		}
  267|    604|		return 0;
  268|    604|	}
  269|       |
  270|    546|	oil_if_set(channel_oil, pim_ifp->mroute_vif_index, 0);
  271|       |	/* clear mute; will be re-evaluated when the OIF becomes valid again */
  272|    546|	channel_oil->oif_flags[pim_ifp->mroute_vif_index] &= ~PIM_OIF_FLAG_MUTE;
  ------------------
  |  |   31|    546|#define PIM_OIF_FLAG_MUTE         (1 << 4)
  ------------------
  273|       |
  274|    546|	if (pim_upstream_mroute_add(channel_oil, __func__)) {
  ------------------
  |  Branch (274:6): [True: 0, False: 546]
  ------------------
  275|      0|		if (PIM_DEBUG_MROUTE) {
  ------------------
  |  |  158|      0|	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   85|      0|#define PIM_MASK_MROUTE              (1 << 13)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   86|      0|#define PIM_MASK_MROUTE_DETAIL       (1 << 14)
  |  |  ------------------
  |  |  |  Branch (158:2): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  276|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  277|      0|				"%s %s: could not remove output interface %s (vif_index=%d) for channel (S,G)=(%pPAs,%pPAs)",
  278|      0|				__FILE__, __func__, oif->name,
  279|      0|				pim_ifp->mroute_vif_index,
  280|      0|				oil_origin(channel_oil),
  281|      0|				oil_mcastgrp(channel_oil));
  282|      0|		}
  283|      0|		return -1;
  284|      0|	}
  285|       |
  286|    546|	--channel_oil->oil_size;
  287|       |
  288|    546|	if (PIM_DEBUG_MROUTE) {
  ------------------
  |  |  158|    546|	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   85|    546|#define PIM_MASK_MROUTE              (1 << 13)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   86|    546|#define PIM_MASK_MROUTE_DETAIL       (1 << 14)
  |  |  ------------------
  |  |  |  Branch (158:2): [True: 0, False: 546]
  |  |  ------------------
  ------------------
  289|      0|		zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  290|      0|			"%s(%s): (S,G)=(%pPAs,%pPAs): proto_mask=%u IIF:%d OIF=%s vif_index=%d",
  291|      0|			__func__, caller, oil_origin(channel_oil),
  292|      0|			oil_mcastgrp(channel_oil),
  293|      0|			proto_mask,
  294|      0|			*oil_parent(channel_oil), oif->name,
  295|      0|			pim_ifp->mroute_vif_index);
  296|      0|	}
  297|       |
  298|    546|	return 0;
  299|    546|}
pim_channel_del_inherited_oif:
  303|  7.12k|{
  304|  7.12k|	struct pim_upstream *up = c_oil->up;
  305|       |
  306|  7.12k|	pim_channel_del_oif(c_oil, oif, PIM_OIF_FLAG_PROTO_STAR,
  ------------------
  |  |   24|  7.12k|#define PIM_OIF_FLAG_PROTO_STAR   (1 << 2)
  ------------------
  307|  7.12k|			caller);
  308|       |
  309|       |	/* if an inherited OIF is being removed join-desired can change
  310|       |	 * if the inherited OIL is now empty and KAT is running
  311|       |	 */
  312|  7.12k|	if (up && !pim_addr_is_any(up->sg.src) &&
  ------------------
  |  Branch (312:6): [True: 7.12k, False: 0]
  |  Branch (312:12): [True: 6.46k, False: 659]
  ------------------
  313|  6.46k|	    pim_upstream_empty_inherited_olist(up))
  ------------------
  |  Branch (313:6): [True: 6.10k, False: 358]
  ------------------
  314|  6.10k|		pim_upstream_update_join_desired(up->pim, up);
  315|  7.12k|}
pim_channel_add_oif:
  422|  53.5k|{
  423|  53.5k|	struct pim_interface *pim_ifp;
  424|  53.5k|	int old_ttl;
  425|       |
  426|       |	/*
  427|       |	 * If we've gotten here we've gone bad, but let's
  428|       |	 * not take down pim
  429|       |	 */
  430|  53.5k|	if (!channel_oil) {
  ------------------
  |  Branch (430:6): [True: 0, False: 53.5k]
  ------------------
  431|      0|		zlog_warn("Attempt to Add OIF for non-existent channel oil");
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
  432|      0|		return -1;
  433|      0|	}
  434|       |
  435|  53.5k|	pim_ifp = oif->info;
  436|       |
  437|  53.5k|	assertf(pim_ifp->mroute_vif_index >= 0,
  ------------------
  |  |   65|  53.5k|	({                                                                     \
  |  |   66|  53.5k|		static const struct xref_assert _xref __attribute__(           \
  |  |   67|  53.5k|			(used)) = {                                            \
  |  |   68|  53.5k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  53.5k|	{                                                                      \
  |  |  |  |  284|  53.5k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  53.5k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  53.5k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  53.5k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  53.5k|	}                                                                      \
  |  |  ------------------
  |  |   69|  53.5k|			.expr = #expr_,                                        \
  |  |   70|  53.5k|			.extra = extra_,                                       \
  |  |   71|  53.5k|			.args = #__VA_ARGS__,                                  \
  |  |   72|  53.5k|		};                                                             \
  |  |   73|  53.5k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  53.5k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  53.5k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  53.5k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   74|  53.5k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (74:7): [True: 0, False: 53.5k]
  |  |  |  Branch (74:24): [True: 53.5k, False: 0]
  |  |  ------------------
  |  |   75|  53.5k|			do {                                                   \
  |  |   76|      0|				_zlog_assert_failed(&_xref, extra_,            \
  |  |   77|      0|						    ##__VA_ARGS__);            \
  |  |   78|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (78:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   79|  53.5k|	})
  ------------------
  438|  53.5k|		"trying to add OIF %s with VIF (%d)", oif->name,
  439|  53.5k|		pim_ifp->mroute_vif_index);
  440|       |
  441|       |	/* Prevent single protocol from subscribing same interface to
  442|       |	   channel (S,G) multiple times */
  443|  53.5k|	if (channel_oil->oif_flags[pim_ifp->mroute_vif_index] & proto_mask) {
  ------------------
  |  Branch (443:6): [True: 9.76k, False: 43.8k]
  ------------------
  444|  9.76k|		channel_oil->oif_flags[pim_ifp->mroute_vif_index] |= proto_mask;
  445|       |
  446|  9.76k|		if (PIM_DEBUG_MROUTE) {
  ------------------
  |  |  158|  9.76k|	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   85|  9.76k|#define PIM_MASK_MROUTE              (1 << 13)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   86|  9.76k|#define PIM_MASK_MROUTE_DETAIL       (1 << 14)
  |  |  ------------------
  |  |  |  Branch (158:2): [True: 0, False: 9.76k]
  |  |  ------------------
  ------------------
  447|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  448|      0|				"%s %s: existing protocol mask %u requested OIF %s (vif_index=%d, min_ttl=%d) for channel (S,G)=(%pPAs,%pPAs)",
  449|      0|				__FILE__, __func__, proto_mask, oif->name,
  450|      0|				pim_ifp->mroute_vif_index,
  451|      0|				oil_if_has(channel_oil, pim_ifp->mroute_vif_index),
  452|      0|				oil_origin(channel_oil),
  453|      0|				oil_mcastgrp(channel_oil));
  454|      0|		}
  455|  9.76k|		return -3;
  456|  9.76k|	}
  457|       |
  458|       |	/* Allow other protocol to request subscription of same interface to
  459|       |	 * channel (S,G), we need to note this information
  460|       |	 */
  461|  43.8k|	if (channel_oil->oif_flags[pim_ifp->mroute_vif_index]
  ------------------
  |  Branch (461:6): [True: 606, False: 43.1k]
  ------------------
  462|  43.8k|	    & PIM_OIF_FLAG_PROTO_ANY) {
  ------------------
  |  |   27|  43.8k|	(PIM_OIF_FLAG_PROTO_GM | PIM_OIF_FLAG_PROTO_PIM |                      \
  |  |  ------------------
  |  |  |  |   22|  43.8k|#define PIM_OIF_FLAG_PROTO_GM     (1 << 0)
  |  |  ------------------
  |  |               	(PIM_OIF_FLAG_PROTO_GM | PIM_OIF_FLAG_PROTO_PIM |                      \
  |  |  ------------------
  |  |  |  |   23|  43.8k|#define PIM_OIF_FLAG_PROTO_PIM    (1 << 1)
  |  |  ------------------
  |  |   28|  43.8k|	 PIM_OIF_FLAG_PROTO_STAR | PIM_OIF_FLAG_PROTO_VXLAN)
  |  |  ------------------
  |  |  |  |   24|  43.8k|#define PIM_OIF_FLAG_PROTO_STAR   (1 << 2)
  |  |  ------------------
  |  |               	 PIM_OIF_FLAG_PROTO_STAR | PIM_OIF_FLAG_PROTO_VXLAN)
  |  |  ------------------
  |  |  |  |   25|  43.8k|#define PIM_OIF_FLAG_PROTO_VXLAN  (1 << 3)
  |  |  ------------------
  ------------------
  463|       |
  464|       |		/* Updating time here is not required as this time has to
  465|       |		 * indicate when the interface is added
  466|       |		 */
  467|       |
  468|    606|		channel_oil->oif_flags[pim_ifp->mroute_vif_index] |= proto_mask;
  469|       |		/* Check the OIF really exists before returning, and only log
  470|       |		   warning otherwise */
  471|    606|		if (oil_if_has(channel_oil, pim_ifp->mroute_vif_index) < 1) {
  ------------------
  |  Branch (471:7): [True: 0, False: 606]
  ------------------
  472|      0|			zlog_warn(
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
  473|      0|				"%s %s: new protocol mask %u requested nonexistent OIF %s (vif_index=%d, min_ttl=%d) for channel (S,G)=(%pPAs,%pPAs)",
  474|      0|				__FILE__, __func__, proto_mask, oif->name,
  475|      0|				pim_ifp->mroute_vif_index,
  476|      0|				oil_if_has(channel_oil, pim_ifp->mroute_vif_index),
  477|      0|				oil_origin(channel_oil),
  478|      0|				oil_mcastgrp(channel_oil));
  479|      0|		}
  480|       |
  481|    606|		if (PIM_DEBUG_MROUTE) {
  ------------------
  |  |  158|    606|	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   85|    606|#define PIM_MASK_MROUTE              (1 << 13)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   86|    606|#define PIM_MASK_MROUTE_DETAIL       (1 << 14)
  |  |  ------------------
  |  |  |  Branch (158:2): [True: 0, False: 606]
  |  |  ------------------
  ------------------
  482|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  483|      0|				"%s(%s): (S,G)=(%pPAs,%pPAs): proto_mask=%u OIF=%s vif_index=%d added to 0x%x",
  484|      0|				__func__, caller, oil_origin(channel_oil),
  485|      0|				oil_mcastgrp(channel_oil),
  486|      0|				proto_mask, oif->name,
  487|      0|				pim_ifp->mroute_vif_index,
  488|      0|				channel_oil
  489|      0|					->oif_flags[pim_ifp->mroute_vif_index]);
  490|      0|		}
  491|    606|		return 0;
  492|    606|	}
  493|       |
  494|  43.1k|	old_ttl = oil_if_has(channel_oil, pim_ifp->mroute_vif_index);
  495|       |
  496|  43.1k|	if (old_ttl > 0) {
  ------------------
  |  Branch (496:6): [True: 0, False: 43.1k]
  ------------------
  497|      0|		if (PIM_DEBUG_MROUTE) {
  ------------------
  |  |  158|      0|	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   85|      0|#define PIM_MASK_MROUTE              (1 << 13)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   86|      0|#define PIM_MASK_MROUTE_DETAIL       (1 << 14)
  |  |  ------------------
  |  |  |  Branch (158:2): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  498|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  499|      0|				"%s %s: interface %s (vif_index=%d) is existing output for channel (S,G)=(%pPAs,%pPAs)",
  500|      0|				__FILE__, __func__, oif->name,
  501|      0|				pim_ifp->mroute_vif_index,
  502|      0|				oil_origin(channel_oil),
  503|      0|				oil_mcastgrp(channel_oil));
  504|      0|		}
  505|      0|		return -4;
  506|      0|	}
  507|       |
  508|  43.1k|	oil_if_set(channel_oil, pim_ifp->mroute_vif_index, PIM_MROUTE_MIN_TTL);
  ------------------
  |  |   21|  43.1k|#define PIM_MROUTE_MIN_TTL (1)
  ------------------
  509|       |
  510|       |	/* Some OIFs are held in a muted state i.e. the PIM state machine
  511|       |	 * decided to include the OIF but additional status check such as
  512|       |	 * MLAG DF role prevent it from being activated for traffic
  513|       |	 * forwarding.
  514|       |	 */
  515|  43.1k|	if (pim_channel_eval_oif_mute(channel_oil, pim_ifp))
  ------------------
  |  Branch (515:6): [True: 0, False: 43.1k]
  ------------------
  516|      0|		channel_oil->oif_flags[pim_ifp->mroute_vif_index] |=
  517|      0|			PIM_OIF_FLAG_MUTE;
  ------------------
  |  |   31|      0|#define PIM_OIF_FLAG_MUTE         (1 << 4)
  ------------------
  518|  43.1k|	else
  519|  43.1k|		channel_oil->oif_flags[pim_ifp->mroute_vif_index] &=
  520|  43.1k|			~PIM_OIF_FLAG_MUTE;
  ------------------
  |  |   31|  43.1k|#define PIM_OIF_FLAG_MUTE         (1 << 4)
  ------------------
  521|       |
  522|       |	/* channel_oil->oil.mfcc_parent != MAXVIFS indicate this entry is not
  523|       |	 * valid to get installed in kernel.
  524|       |	 */
  525|  43.1k|	if (*oil_parent(channel_oil) != MAXVIFS) {
  ------------------
  |  |   43|  43.1k|#define MAXVIFS 32
  ------------------
  |  Branch (525:6): [True: 0, False: 43.1k]
  ------------------
  526|      0|		if (pim_upstream_mroute_add(channel_oil, __func__)) {
  ------------------
  |  Branch (526:7): [True: 0, False: 0]
  ------------------
  527|      0|			if (PIM_DEBUG_MROUTE) {
  ------------------
  |  |  158|      0|	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   85|      0|#define PIM_MASK_MROUTE              (1 << 13)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   86|      0|#define PIM_MASK_MROUTE_DETAIL       (1 << 14)
  |  |  ------------------
  |  |  |  Branch (158:2): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  528|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  529|      0|					"%s %s: could not add output interface %s (vif_index=%d) for channel (S,G)=(%pPAs,%pPAs)",
  530|      0|					__FILE__, __func__, oif->name,
  531|      0|					pim_ifp->mroute_vif_index,
  532|      0|					oil_origin(channel_oil),
  533|      0|					oil_mcastgrp(channel_oil));
  534|      0|			}
  535|       |
  536|      0|			oil_if_set(channel_oil, pim_ifp->mroute_vif_index,
  537|      0|				   old_ttl);
  538|      0|			return -5;
  539|      0|		}
  540|      0|	}
  541|       |
  542|  43.1k|	channel_oil->oif_creation[pim_ifp->mroute_vif_index] =
  543|  43.1k|		pim_time_monotonic_sec();
  544|  43.1k|	++channel_oil->oil_size;
  545|  43.1k|	channel_oil->oif_flags[pim_ifp->mroute_vif_index] |= proto_mask;
  546|       |
  547|  43.1k|	if (PIM_DEBUG_MROUTE) {
  ------------------
  |  |  158|  43.1k|	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   85|  43.1k|#define PIM_MASK_MROUTE              (1 << 13)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_MROUTE | PIM_MASK_MROUTE_DETAIL))
  |  |  ------------------
  |  |  |  |   86|  43.1k|#define PIM_MASK_MROUTE_DETAIL       (1 << 14)
  |  |  ------------------
  |  |  |  Branch (158:2): [True: 0, False: 43.1k]
  |  |  ------------------
  ------------------
  548|      0|		zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  549|      0|			"%s(%s): (S,G)=(%pPAs,%pPAs): proto_mask=%u OIF=%s vif_index=%d: DONE",
  550|      0|			__func__, caller, oil_origin(channel_oil),
  551|      0|			oil_mcastgrp(channel_oil),
  552|      0|			proto_mask,
  553|      0|			oif->name, pim_ifp->mroute_vif_index);
  554|      0|	}
  555|       |
  556|  43.1k|	return 0;
  557|  43.1k|}
pim_channel_oil_empty:
  560|  55.3k|{
  561|  55.3k|	static struct channel_oil null_oil;
  562|       |
  563|  55.3k|	if (!c_oil)
  ------------------
  |  Branch (563:6): [True: 0, False: 55.3k]
  ------------------
  564|      0|		return 1;
  565|       |
  566|       |	/* exclude pimreg from the OIL when checking if the inherited_oil is
  567|       |	 * non-NULL.
  568|       |	 * pimreg device (in all vrfs) uses a vifi of
  569|       |	 * 0 (PIM_OIF_PIM_REGISTER_VIF) so we simply mfcc_ttls[0] */
  570|  55.3k|	if (oil_if_has(c_oil, 0))
  ------------------
  |  Branch (570:6): [True: 0, False: 55.3k]
  ------------------
  571|      0|		oil_if_set(&null_oil, 0, 1);
  572|  55.3k|	else
  573|  55.3k|		oil_if_set(&null_oil, 0, 0);
  574|       |
  575|  55.3k|	return !oil_if_cmp(&c_oil->oil, &null_oil.oil);
  576|  55.3k|}
pim_oil.c:pim_channel_eval_oif_mute:
  319|  43.1k|{
  320|  43.1k|	struct pim_interface *pim_reg_ifp;
  321|  43.1k|	struct pim_interface *vxlan_ifp;
  322|  43.1k|	bool do_mute = false;
  323|  43.1k|	struct pim_instance *pim = c_oil->pim;
  324|       |
  325|  43.1k|	if (!c_oil->up)
  ------------------
  |  Branch (325:6): [True: 0, False: 43.1k]
  ------------------
  326|      0|		return do_mute;
  327|       |
  328|  43.1k|	pim_reg_ifp = pim->regiface->info;
  329|  43.1k|	if (pim_ifp == pim_reg_ifp) {
  ------------------
  |  Branch (329:6): [True: 0, False: 43.1k]
  ------------------
  330|       |		/* suppress pimreg in the OIL if the mroute is not supposed to
  331|       |		 * trigger register encapsulated data
  332|       |		 */
  333|      0|		if (PIM_UPSTREAM_FLAG_TEST_NO_PIMREG_DATA(c_oil->up->flags))
  ------------------
  |  |   99|      0|#define PIM_UPSTREAM_FLAG_TEST_NO_PIMREG_DATA(flags) ((flags) & PIM_UPSTREAM_FLAG_MASK_NO_PIMREG_DATA)
  |  |  ------------------
  |  |  |  |   40|      0|#define PIM_UPSTREAM_FLAG_MASK_NO_PIMREG_DATA          (1 << 12)
  |  |  ------------------
  |  |  |  Branch (99:54): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  334|      0|			do_mute = true;
  335|       |
  336|      0|		return do_mute;
  337|      0|	}
  338|       |
  339|  43.1k|	vxlan_ifp = pim_vxlan_get_term_ifp(pim);
  340|  43.1k|	if (pim_ifp == vxlan_ifp) {
  ------------------
  |  Branch (340:6): [True: 0, False: 43.1k]
  ------------------
  341|       |		/* 1. vxlan termination device must never be added to the
  342|       |		 * origination mroute (and that can actually happen because
  343|       |		 * of XG inheritance from the termination mroute) otherwise
  344|       |		 * traffic will end up looping.
  345|       |		 * PS: This check has also been extended to non-orig mroutes
  346|       |		 * that have a local SIP as such mroutes can move back and
  347|       |		 * forth between orig<=>non-orig type.
  348|       |		 * 2. vxlan termination device should be removed from the non-DF
  349|       |		 * to prevent duplicates to the overlay rxer
  350|       |		 */
  351|      0|		if (PIM_UPSTREAM_FLAG_TEST_SRC_VXLAN_ORIG(c_oil->up->flags) ||
  ------------------
  |  |  101|      0|#define PIM_UPSTREAM_FLAG_TEST_SRC_VXLAN_ORIG(flags) ((flags) & PIM_UPSTREAM_FLAG_MASK_SRC_VXLAN_ORIG)
  |  |  ------------------
  |  |  |  |   49|      0|#define PIM_UPSTREAM_FLAG_MASK_SRC_VXLAN_ORIG          (1 << 14)
  |  |  ------------------
  |  |  |  Branch (101:54): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  352|      0|			PIM_UPSTREAM_FLAG_TEST_MLAG_NON_DF(c_oil->up->flags) ||
  ------------------
  |  |  105|      0|#define PIM_UPSTREAM_FLAG_TEST_MLAG_NON_DF(flags) ((flags) & PIM_UPSTREAM_FLAG_MASK_MLAG_NON_DF)
  |  |  ------------------
  |  |  |  |   63|      0|#define PIM_UPSTREAM_FLAG_MASK_MLAG_NON_DF             (1 << 17)
  |  |  ------------------
  |  |  |  Branch (105:51): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  353|      0|			pim_vxlan_is_local_sip(c_oil->up))
  ------------------
  |  Branch (353:4): [True: 0, False: 0]
  ------------------
  354|      0|			do_mute = true;
  355|       |
  356|      0|		return do_mute;
  357|      0|	}
  358|       |
  359|  43.1k|	if (PIM_I_am_DualActive(pim_ifp)) {
  ------------------
  |  |   27|  43.1k|#define PIM_I_am_DualActive(pim_ifp) (pim_ifp)->activeactive == true
  |  |  ------------------
  |  |  |  Branch (27:38): [True: 0, False: 43.1k]
  |  |  ------------------
  ------------------
  360|      0|		struct pim_upstream *starup = c_oil->up->parent;
  361|      0|		if (PIM_UPSTREAM_FLAG_TEST_MLAG_INTERFACE(c_oil->up->flags)
  ------------------
  |  |  110|      0|#define PIM_UPSTREAM_FLAG_TEST_MLAG_INTERFACE(flags) ((flags)&PIM_UPSTREAM_FLAG_MASK_MLAG_INTERFACE)
  |  |  ------------------
  |  |  |  |   82|      0|#define PIM_UPSTREAM_FLAG_MASK_MLAG_INTERFACE          (1 << 21)
  |  |  ------------------
  |  |  |  Branch (110:54): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  362|      0|		    && (PIM_UPSTREAM_FLAG_TEST_MLAG_NON_DF(c_oil->up->flags)))
  ------------------
  |  |  105|      0|#define PIM_UPSTREAM_FLAG_TEST_MLAG_NON_DF(flags) ((flags) & PIM_UPSTREAM_FLAG_MASK_MLAG_NON_DF)
  |  |  ------------------
  |  |  |  |   63|      0|#define PIM_UPSTREAM_FLAG_MASK_MLAG_NON_DF             (1 << 17)
  |  |  ------------------
  ------------------
  |  Branch (362:10): [True: 0, False: 0]
  ------------------
  363|      0|			do_mute = true;
  364|       |
  365|       |		/* In case entry is (S,G), Negotiation happens at (*.G) */
  366|      0|		if (starup
  ------------------
  |  Branch (366:7): [True: 0, False: 0]
  ------------------
  367|       |
  368|      0|		    && PIM_UPSTREAM_FLAG_TEST_MLAG_INTERFACE(starup->flags)
  ------------------
  |  |  110|      0|#define PIM_UPSTREAM_FLAG_TEST_MLAG_INTERFACE(flags) ((flags)&PIM_UPSTREAM_FLAG_MASK_MLAG_INTERFACE)
  |  |  ------------------
  |  |  |  |   82|      0|#define PIM_UPSTREAM_FLAG_MASK_MLAG_INTERFACE          (1 << 21)
  |  |  ------------------
  |  |  |  Branch (110:54): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  369|      0|		    && (PIM_UPSTREAM_FLAG_TEST_MLAG_NON_DF(starup->flags)))
  ------------------
  |  |  105|      0|#define PIM_UPSTREAM_FLAG_TEST_MLAG_NON_DF(flags) ((flags) & PIM_UPSTREAM_FLAG_MASK_MLAG_NON_DF)
  |  |  ------------------
  |  |  |  |   63|      0|#define PIM_UPSTREAM_FLAG_MASK_MLAG_NON_DF             (1 << 17)
  |  |  ------------------
  ------------------
  |  Branch (369:10): [True: 0, False: 0]
  ------------------
  370|      0|			do_mute = true;
  371|      0|		return do_mute;
  372|      0|	}
  373|  43.1k|	return do_mute;
  374|  43.1k|}

pim_mroute.c:oil_parent:
  116|  34.5k|{
  117|  34.5k|	return &c_oil->oil.mfcc_parent;
  118|  34.5k|}
pim_oil.c:oil_origin:
  106|   666k|{
  107|   666k|	return &c_oil->oil.mfcc_origin;
  108|   666k|}
pim_oil.c:oil_mcastgrp:
  111|  1.74M|{
  112|  1.74M|	return &c_oil->oil.mfcc_mcastgrp;
  113|  1.74M|}
pim_oil.c:oil_parent:
  116|  86.4k|{
  117|  86.4k|	return &c_oil->oil.mfcc_parent;
  118|  86.4k|}
pim_oil.c:oil_if_has:
  121|  99.1k|{
  122|  99.1k|	return !!c_oil->oil.mfcc_ttls[ifi];
  123|  99.1k|}
pim_oil.c:oil_if_set:
  126|  99.1k|{
  127|  99.1k|	c_oil->oil.mfcc_ttls[ifi] = set;
  128|  99.1k|}
pim_oil.c:oil_if_cmp:
  131|  55.3k|{
  132|  55.3k|	return memcmp(&oil1->mfcc_ttls[0], &oil2->mfcc_ttls[0],
  133|  55.3k|		      sizeof(oil1->mfcc_ttls));
  134|  55.3k|}

pim_pim_packet:
  143|  2.91k|{
  144|  2.91k|	struct iovec iov[2], *iovp = iov;
  145|  2.91k|#if PIM_IPV == 4
  146|  2.91k|	struct ip *ip_hdr = (struct ip *)buf;
  147|  2.91k|	size_t ip_hlen; /* ip header length in bytes */
  148|  2.91k|#endif
  149|  2.91k|	uint8_t *pim_msg;
  150|  2.91k|	uint32_t pim_msg_len = 0;
  151|  2.91k|	uint16_t pim_checksum; /* received checksum */
  152|  2.91k|	uint16_t checksum;     /* computed checksum */
  153|  2.91k|	struct pim_neighbor *neigh;
  154|  2.91k|	struct pim_msg_header *header;
  155|  2.91k|	bool   no_fwd;
  156|       |
  157|  2.91k|#if PIM_IPV == 4
  158|  2.91k|	if (len <= sizeof(*ip_hdr)) {
  ------------------
  |  Branch (158:6): [True: 10, False: 2.90k]
  ------------------
  159|     10|		if (PIM_DEBUG_PIM_PACKETS)
  ------------------
  |  |  140|     10|#define PIM_DEBUG_PIM_PACKETS (router->debugs & PIM_MASK_PIM_PACKETS)
  |  |  ------------------
  |  |  |  |   74|     10|#define PIM_MASK_PIM_PACKETS         (1 << 2)
  |  |  ------------------
  |  |  |  Branch (140:31): [True: 0, False: 10]
  |  |  ------------------
  ------------------
  160|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  161|     10|				"PIM packet size=%zu shorter than minimum=%zu",
  162|     10|				len, sizeof(*ip_hdr));
  163|     10|		return -1;
  164|     10|	}
  165|       |
  166|  2.90k|	ip_hlen = ip_hdr->ip_hl << 2; /* ip_hl gives length in 4-byte words */
  167|  2.90k|#ifdef FUZZING
  168|       |	/*
  169|       |	 * Ensure that the header length is 20 or 24 bytes as is appropriate
  170|       |	 * The kernel typically ensures that the passed up ip header meets
  171|       |	 * standards, and would actually drop the packet if it didn't meet
  172|       |	 * them.  So since we are fuzzing and faking the header bits/bobs
  173|       |	 * then let's ensure that we don't get into a weird situation
  174|       |	 * where a bad ip_hlen here causes pim_msg_len to wrap around into
  175|       |	 * the high billions and then we have an issue later
  176|       |	 */
  177|  2.90k|	if (ip_hlen != 20 && ip_hlen != 24)
  ------------------
  |  Branch (177:6): [True: 15, False: 2.88k]
  |  Branch (177:23): [True: 11, False: 4]
  ------------------
  178|     11|		return -1;
  179|  2.89k|#endif
  180|  2.89k|	sg = pim_sgaddr_from_iphdr(ip_hdr);
  181|       |
  182|  2.89k|	pim_msg = buf + ip_hlen;
  183|  2.89k|	pim_msg_len = len - ip_hlen;
  184|       |#else
  185|       |	struct ipv6_ph phdr = {
  186|       |		.src = sg.src,
  187|       |		.dst = sg.grp,
  188|       |		.ulpl = htonl(len),
  189|       |		.next_hdr = IPPROTO_PIM,
  190|       |	};
  191|       |
  192|       |	iovp->iov_base = &phdr;
  193|       |	iovp->iov_len = sizeof(phdr);
  194|       |	iovp++;
  195|       |
  196|       |	/* NB: header is not included in IPv6 RX */
  197|       |	pim_msg = buf;
  198|       |	pim_msg_len = len;
  199|       |#endif
  200|       |
  201|  2.89k|	iovp->iov_base = pim_msg;
  202|  2.89k|	iovp->iov_len = pim_msg_len;
  203|  2.89k|	iovp++;
  204|       |
  205|  2.89k|	if (pim_msg_len < PIM_PIM_MIN_LEN) {
  ------------------
  |  |   39|  2.89k|#define PIM_PIM_MIN_LEN               PIM_MSG_HEADER_LEN
  |  |  ------------------
  |  |  |  |   38|  2.89k|#define PIM_MSG_HEADER_LEN            (4)
  |  |  ------------------
  ------------------
  |  Branch (205:6): [True: 4, False: 2.88k]
  ------------------
  206|      4|		if (PIM_DEBUG_PIM_PACKETS)
  ------------------
  |  |  140|      4|#define PIM_DEBUG_PIM_PACKETS (router->debugs & PIM_MASK_PIM_PACKETS)
  |  |  ------------------
  |  |  |  |   74|      4|#define PIM_MASK_PIM_PACKETS         (1 << 2)
  |  |  ------------------
  |  |  |  Branch (140:31): [True: 0, False: 4]
  |  |  ------------------
  ------------------
  207|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  208|      4|				"PIM message size=%d shorter than minimum=%d",
  209|      4|				pim_msg_len, PIM_PIM_MIN_LEN);
  210|      4|		return -1;
  211|      4|	}
  212|  2.88k|	header = (struct pim_msg_header *)pim_msg;
  213|       |
  214|  2.88k|	if (header->ver != PIM_PROTO_VERSION) {
  ------------------
  |  |   61|  2.88k|#define PIM_PROTO_VERSION             (2)
  ------------------
  |  Branch (214:6): [True: 7, False: 2.88k]
  ------------------
  215|      7|		if (PIM_DEBUG_PIM_PACKETS)
  ------------------
  |  |  140|      7|#define PIM_DEBUG_PIM_PACKETS (router->debugs & PIM_MASK_PIM_PACKETS)
  |  |  ------------------
  |  |  |  |   74|      7|#define PIM_MASK_PIM_PACKETS         (1 << 2)
  |  |  ------------------
  |  |  |  Branch (140:31): [True: 0, False: 7]
  |  |  ------------------
  ------------------
  216|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  217|      7|				"Ignoring PIM pkt from %s with unsupported version: %d",
  218|      7|				ifp->name, header->ver);
  219|      7|		return -1;
  220|      7|	}
  221|       |
  222|       |	/* save received checksum */
  223|  2.88k|	pim_checksum = header->checksum;
  224|       |
  225|       |	/* for computing checksum */
  226|  2.88k|	header->checksum = 0;
  227|  2.88k|	no_fwd = header->Nbit;
  228|       |
  229|  2.88k|	if (header->type == PIM_MSG_TYPE_REGISTER) {
  ------------------
  |  Branch (229:6): [True: 145, False: 2.73k]
  ------------------
  230|    145|		if (pim_msg_len < PIM_MSG_REGISTER_LEN) {
  ------------------
  |  |   17|    145|#define PIM_MSG_REGISTER_LEN   (8)
  ------------------
  |  Branch (230:7): [True: 3, False: 142]
  ------------------
  231|      3|			if (PIM_DEBUG_PIM_PACKETS)
  ------------------
  |  |  140|      3|#define PIM_DEBUG_PIM_PACKETS (router->debugs & PIM_MASK_PIM_PACKETS)
  |  |  ------------------
  |  |  |  |   74|      3|#define PIM_MASK_PIM_PACKETS         (1 << 2)
  |  |  ------------------
  |  |  |  Branch (140:31): [True: 0, False: 3]
  |  |  ------------------
  ------------------
  232|      0|				zlog_debug("PIM Register Message size=%d shorther than min length %d",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  233|      3|					   pim_msg_len, PIM_MSG_REGISTER_LEN);
  234|      3|			return -1;
  235|      3|		}
  236|       |
  237|       |#if PIM_IPV == 6
  238|       |		phdr.ulpl = htonl(PIM_MSG_REGISTER_LEN);
  239|       |#endif
  240|       |		/* First 8 byte header checksum */
  241|    142|		iovp[-1].iov_len = PIM_MSG_REGISTER_LEN;
  ------------------
  |  |   17|    142|#define PIM_MSG_REGISTER_LEN   (8)
  ------------------
  242|    142|		checksum = in_cksumv(iov, iovp - iov);
  243|       |
  244|    142|		if (checksum != pim_checksum) {
  ------------------
  |  Branch (244:7): [True: 141, False: 1]
  ------------------
  245|       |#if PIM_IPV == 6
  246|       |			phdr.ulpl = htonl(pim_msg_len);
  247|       |#endif
  248|    141|			iovp[-1].iov_len = pim_msg_len;
  249|       |
  250|    141|			checksum = in_cksumv(iov, iovp - iov);
  251|    141|			if (checksum != pim_checksum) {
  ------------------
  |  Branch (251:8): [True: 141, False: 0]
  ------------------
  252|    141|				if (PIM_DEBUG_PIM_PACKETS)
  ------------------
  |  |  140|    141|#define PIM_DEBUG_PIM_PACKETS (router->debugs & PIM_MASK_PIM_PACKETS)
  |  |  ------------------
  |  |  |  |   74|    141|#define PIM_MASK_PIM_PACKETS         (1 << 2)
  |  |  ------------------
  |  |  |  Branch (140:31): [True: 0, False: 141]
  |  |  ------------------
  ------------------
  253|      0|					zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  254|    141|						"Ignoring PIM pkt from %s with invalid checksum: received=%x calculated=%x",
  255|    141|						ifp->name, pim_checksum,
  256|    141|						checksum);
  257|       |#ifndef FUZZING
  258|       |				return -1;
  259|       |#endif
  260|    141|			}
  261|    141|		}
  262|  2.73k|	} else {
  263|  2.73k|		checksum = in_cksumv(iov, iovp - iov);
  264|  2.73k|		if (checksum != pim_checksum) {
  ------------------
  |  Branch (264:7): [True: 2.73k, False: 0]
  ------------------
  265|  2.73k|			if (PIM_DEBUG_PIM_PACKETS)
  ------------------
  |  |  140|  2.73k|#define PIM_DEBUG_PIM_PACKETS (router->debugs & PIM_MASK_PIM_PACKETS)
  |  |  ------------------
  |  |  |  |   74|  2.73k|#define PIM_MASK_PIM_PACKETS         (1 << 2)
  |  |  ------------------
  |  |  |  Branch (140:31): [True: 0, False: 2.73k]
  |  |  ------------------
  ------------------
  266|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  267|  2.73k|					"Ignoring PIM pkt from %s with invalid checksum: received=%x calculated=%x",
  268|  2.73k|					ifp->name, pim_checksum, checksum);
  269|       |#ifndef FUZZING
  270|       |			return -1;
  271|       |#endif
  272|  2.73k|		}
  273|  2.73k|	}
  274|       |
  275|  2.87k|	if (PIM_DEBUG_PIM_PACKETS) {
  ------------------
  |  |  140|  2.87k|#define PIM_DEBUG_PIM_PACKETS (router->debugs & PIM_MASK_PIM_PACKETS)
  |  |  ------------------
  |  |  |  |   74|  2.87k|#define PIM_MASK_PIM_PACKETS         (1 << 2)
  |  |  ------------------
  |  |  |  Branch (140:31): [True: 0, False: 2.87k]
  |  |  ------------------
  ------------------
  276|      0|		zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  277|      0|			"Recv PIM %s packet from %pPA to %pPA on %s: pim_version=%d pim_msg_size=%d checksum=%x",
  278|      0|			pim_pim_msgtype2str(header->type), &sg.src, &sg.grp,
  279|      0|			ifp->name, header->ver, pim_msg_len, checksum);
  280|      0|		if (PIM_DEBUG_PIM_PACKETDUMP_RECV)
  ------------------
  |  |  144|      0|	(router->debugs & PIM_MASK_PIM_PACKETDUMP_RECV)
  |  |  ------------------
  |  |  |  |   76|      0|#define PIM_MASK_PIM_PACKETDUMP_RECV (1 << 4)
  |  |  ------------------
  |  |  |  Branch (144:2): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  281|      0|			pim_pkt_dump(__func__, pim_msg, pim_msg_len);
  282|      0|	}
  283|       |
  284|  2.87k|	if (!pim_pkt_dst_addr_ok(header->type, sg.grp)) {
  ------------------
  |  Branch (284:6): [True: 10, False: 2.86k]
  ------------------
  285|     10|		zlog_warn(
  ------------------
  |  |  131|     10|#define zlog_warn(...) 0
  ------------------
  286|     10|			"%s: Ignoring Pkt. Unexpected IP destination %pPA for %s (Expected: all_pim_routers_addr) from %pPA",
  287|     10|			__func__, &sg.grp, pim_pim_msgtype2str(header->type),
  288|     10|			&sg.src);
  289|     10|		return -1;
  290|     10|	}
  291|       |
  292|  2.86k|	switch (header->type) {
  293|    481|	case PIM_MSG_TYPE_HELLO:
  ------------------
  |  Branch (293:2): [True: 481, False: 2.38k]
  ------------------
  294|    481|		return pim_hello_recv(ifp, sg.src, pim_msg + PIM_MSG_HEADER_LEN,
  ------------------
  |  |   38|    481|#define PIM_MSG_HEADER_LEN            (4)
  ------------------
  295|    481|				      pim_msg_len - PIM_MSG_HEADER_LEN);
  ------------------
  |  |   38|    481|#define PIM_MSG_HEADER_LEN            (4)
  ------------------
  296|      0|		break;
  297|    142|	case PIM_MSG_TYPE_REGISTER:
  ------------------
  |  Branch (297:2): [True: 142, False: 2.72k]
  ------------------
  298|    142|		return pim_register_recv(ifp, sg.grp, sg.src,
  299|    142|					 pim_msg + PIM_MSG_HEADER_LEN,
  ------------------
  |  |   38|    142|#define PIM_MSG_HEADER_LEN            (4)
  ------------------
  300|    142|					 pim_msg_len - PIM_MSG_HEADER_LEN);
  ------------------
  |  |   38|    142|#define PIM_MSG_HEADER_LEN            (4)
  ------------------
  301|      0|		break;
  302|    144|	case PIM_MSG_TYPE_REG_STOP:
  ------------------
  |  Branch (302:2): [True: 144, False: 2.72k]
  ------------------
  303|    144|		return pim_register_stop_recv(ifp, pim_msg + PIM_MSG_HEADER_LEN,
  ------------------
  |  |   38|    144|#define PIM_MSG_HEADER_LEN            (4)
  ------------------
  304|    144|					      pim_msg_len - PIM_MSG_HEADER_LEN);
  ------------------
  |  |   38|    144|#define PIM_MSG_HEADER_LEN            (4)
  ------------------
  305|      0|		break;
  306|    831|	case PIM_MSG_TYPE_JOIN_PRUNE:
  ------------------
  |  Branch (306:2): [True: 831, False: 2.03k]
  ------------------
  307|    831|		neigh = pim_neighbor_find(ifp, sg.src, false);
  308|    831|		if (!neigh) {
  ------------------
  |  Branch (308:7): [True: 1, False: 830]
  ------------------
  309|      1|			if (PIM_DEBUG_PIM_PACKETS)
  ------------------
  |  |  140|      1|#define PIM_DEBUG_PIM_PACKETS (router->debugs & PIM_MASK_PIM_PACKETS)
  |  |  ------------------
  |  |  |  |   74|      1|#define PIM_MASK_PIM_PACKETS         (1 << 2)
  |  |  ------------------
  |  |  |  Branch (140:31): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  310|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  311|      1|					"%s %s: non-hello PIM message type=%d from non-neighbor %pPA on %s",
  312|      1|					__FILE__, __func__, header->type,
  313|      1|					&sg.src, ifp->name);
  314|      1|			return -1;
  315|      1|		}
  316|    830|		pim_neighbor_timer_reset(neigh, neigh->holdtime);
  317|    830|		return pim_joinprune_recv(ifp, neigh, sg.src,
  318|    830|					  pim_msg + PIM_MSG_HEADER_LEN,
  ------------------
  |  |   38|    830|#define PIM_MSG_HEADER_LEN            (4)
  ------------------
  319|    830|					  pim_msg_len - PIM_MSG_HEADER_LEN);
  ------------------
  |  |   38|    830|#define PIM_MSG_HEADER_LEN            (4)
  ------------------
  320|      0|		break;
  321|    163|	case PIM_MSG_TYPE_ASSERT:
  ------------------
  |  Branch (321:2): [True: 163, False: 2.70k]
  ------------------
  322|    163|		neigh = pim_neighbor_find(ifp, sg.src, false);
  323|    163|		if (!neigh) {
  ------------------
  |  Branch (323:7): [True: 1, False: 162]
  ------------------
  324|      1|			if (PIM_DEBUG_PIM_PACKETS)
  ------------------
  |  |  140|      1|#define PIM_DEBUG_PIM_PACKETS (router->debugs & PIM_MASK_PIM_PACKETS)
  |  |  ------------------
  |  |  |  |   74|      1|#define PIM_MASK_PIM_PACKETS         (1 << 2)
  |  |  ------------------
  |  |  |  Branch (140:31): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  325|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  326|      1|					"%s %s: non-hello PIM message type=%d from non-neighbor %pPA on %s",
  327|      1|					__FILE__, __func__, header->type,
  328|      1|					&sg.src, ifp->name);
  329|      1|			return -1;
  330|      1|		}
  331|    162|		pim_neighbor_timer_reset(neigh, neigh->holdtime);
  332|    162|		return pim_assert_recv(ifp, neigh, sg.src,
  333|    162|				       pim_msg + PIM_MSG_HEADER_LEN,
  ------------------
  |  |   38|    162|#define PIM_MSG_HEADER_LEN            (4)
  ------------------
  334|    162|				       pim_msg_len - PIM_MSG_HEADER_LEN);
  ------------------
  |  |   38|    162|#define PIM_MSG_HEADER_LEN            (4)
  ------------------
  335|      0|		break;
  336|  1.10k|	case PIM_MSG_TYPE_BOOTSTRAP:
  ------------------
  |  Branch (336:2): [True: 1.10k, False: 1.76k]
  ------------------
  337|  1.10k|		return pim_bsm_process(ifp, &sg, pim_msg, pim_msg_len, no_fwd);
  338|      0|		break;
  339|       |
  340|      5|	default:
  ------------------
  |  Branch (340:2): [True: 5, False: 2.86k]
  ------------------
  341|      5|		if (PIM_DEBUG_PIM_PACKETS) {
  ------------------
  |  |  140|      5|#define PIM_DEBUG_PIM_PACKETS (router->debugs & PIM_MASK_PIM_PACKETS)
  |  |  ------------------
  |  |  |  |   74|      5|#define PIM_MASK_PIM_PACKETS         (1 << 2)
  |  |  ------------------
  |  |  |  Branch (140:31): [True: 0, False: 5]
  |  |  ------------------
  ------------------
  342|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  343|      0|				"Recv PIM packet type %d which is not currently understood",
  344|      0|				header->type);
  345|      0|		}
  346|      5|		return -1;
  347|  2.86k|	}
  348|  2.86k|}
pim_ifstat_reset:
  473|      2|{
  474|      2|	struct pim_interface *pim_ifp;
  475|       |
  476|      2|	assert(ifp);
  ------------------
  |  |   51|      2|	({                                                                     \
  |  |   52|      2|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|      2|			(used)) = {                                            \
  |  |   54|      2|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|      2|	{                                                                      \
  |  |  |  |  284|      2|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      2|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      2|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      2|		/* .func = */ func_,                                           \
  |  |  |  |  289|      2|	}                                                                      \
  |  |  ------------------
  |  |   55|      2|			.expr = #expr_,                                        \
  |  |   56|      2|		};                                                             \
  |  |   57|      2|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      2|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      2|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      2|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|      2|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 2]
  |  |  |  Branch (58:24): [True: 2, False: 0]
  |  |  ------------------
  |  |   59|      2|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|      2|	})
  ------------------
  477|       |
  478|      2|	pim_ifp = ifp->info;
  479|      2|	if (!pim_ifp) {
  ------------------
  |  Branch (479:6): [True: 0, False: 2]
  ------------------
  480|      0|		return;
  481|      0|	}
  482|       |
  483|      2|	pim_ifp->pim_ifstat_start = pim_time_monotonic_sec();
  484|      2|	pim_ifp->pim_ifstat_hello_sent = 0;
  485|      2|	pim_ifp->pim_ifstat_hello_sendfail = 0;
  486|      2|	pim_ifp->pim_ifstat_hello_recv = 0;
  487|      2|	pim_ifp->pim_ifstat_hello_recvfail = 0;
  488|      2|	pim_ifp->pim_ifstat_bsm_rx = 0;
  489|      2|	pim_ifp->pim_ifstat_bsm_tx = 0;
  490|      2|	pim_ifp->pim_ifstat_join_recv = 0;
  491|      2|	pim_ifp->pim_ifstat_join_send = 0;
  492|      2|	pim_ifp->pim_ifstat_prune_recv = 0;
  493|      2|	pim_ifp->pim_ifstat_prune_send = 0;
  494|      2|	pim_ifp->pim_ifstat_reg_recv = 0;
  495|      2|	pim_ifp->pim_ifstat_reg_send = 0;
  496|      2|	pim_ifp->pim_ifstat_reg_stop_recv = 0;
  497|      2|	pim_ifp->pim_ifstat_reg_stop_send = 0;
  498|      2|	pim_ifp->pim_ifstat_assert_recv = 0;
  499|      2|	pim_ifp->pim_ifstat_assert_send = 0;
  500|      2|	pim_ifp->pim_ifstat_bsm_cfg_miss = 0;
  501|      2|	pim_ifp->pim_ifstat_ucast_bsm_cfg_miss = 0;
  502|      2|	pim_ifp->pim_ifstat_bsm_invalid_sz = 0;
  503|      2|	pim_ifp->igmp_ifstat_joins_sent = 0;
  504|      2|	pim_ifp->igmp_ifstat_joins_failed = 0;
  505|      2|	pim_ifp->igmp_peak_group_count = 0;
  506|      2|}
pim_sock_reset:
  509|      2|{
  510|      2|	struct pim_interface *pim_ifp;
  511|       |
  512|      2|	assert(ifp);
  ------------------
  |  |   51|      2|	({                                                                     \
  |  |   52|      2|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|      2|			(used)) = {                                            \
  |  |   54|      2|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|      2|	{                                                                      \
  |  |  |  |  284|      2|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      2|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      2|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      2|		/* .func = */ func_,                                           \
  |  |  |  |  289|      2|	}                                                                      \
  |  |  ------------------
  |  |   55|      2|			.expr = #expr_,                                        \
  |  |   56|      2|		};                                                             \
  |  |   57|      2|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      2|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      2|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      2|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|      2|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 2]
  |  |  |  Branch (58:24): [True: 2, False: 0]
  |  |  ------------------
  |  |   59|      2|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|      2|	})
  ------------------
  513|      2|	assert(ifp->info);
  ------------------
  |  |   51|      2|	({                                                                     \
  |  |   52|      2|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|      2|			(used)) = {                                            \
  |  |   54|      2|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|      2|	{                                                                      \
  |  |  |  |  284|      2|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|      2|		/* .type = */ (type_),                                         \
  |  |  |  |  286|      2|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|      2|		/* .func = */ func_,                                           \
  |  |  |  |  289|      2|	}                                                                      \
  |  |  ------------------
  |  |   55|      2|			.expr = #expr_,                                        \
  |  |   56|      2|		};                                                             \
  |  |   57|      2|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|      2|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|      2|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|      2|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|      2|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 2]
  |  |  |  Branch (58:24): [True: 2, False: 0]
  |  |  ------------------
  |  |   59|      2|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|      2|	})
  ------------------
  514|       |
  515|      2|	pim_ifp = ifp->info;
  516|       |
  517|      2|	pim_ifp->primary_address = pim_find_primary_addr(ifp);
  518|       |
  519|      2|	pim_ifp->pim_sock_fd = -1;
  520|      2|	pim_ifp->pim_sock_creation = 0;
  521|      2|	pim_ifp->t_pim_sock_read = NULL;
  522|       |
  523|      2|	pim_ifp->t_pim_hello_timer = NULL;
  524|      2|	pim_ifp->pim_hello_period = PIM_DEFAULT_HELLO_PERIOD;
  ------------------
  |  |   17|      2|#define PIM_DEFAULT_HELLO_PERIOD                 (30)   /* seconds, RFC 4601: 4.11 */
  ------------------
  525|      2|	pim_ifp->pim_default_holdtime =
  526|      2|		-1; /* unset: means 3.5 * pim_hello_period */
  527|      2|	pim_ifp->pim_triggered_hello_delay = PIM_DEFAULT_TRIGGERED_HELLO_DELAY;
  ------------------
  |  |   18|      2|#define PIM_DEFAULT_TRIGGERED_HELLO_DELAY        (5)    /* seconds, RFC 4601: 4.11 */
  ------------------
  528|      2|	pim_ifp->pim_dr_priority = PIM_DEFAULT_DR_PRIORITY;
  ------------------
  |  |   19|      2|#define PIM_DEFAULT_DR_PRIORITY                  (1)    /* RFC 4601: 4.3.1 */
  ------------------
  529|      2|	pim_ifp->pim_propagation_delay_msec =
  530|      2|		PIM_DEFAULT_PROPAGATION_DELAY_MSEC;
  ------------------
  |  |   20|      2|#define PIM_DEFAULT_PROPAGATION_DELAY_MSEC       (500)  /* RFC 4601: 4.11.  Timer Values */
  ------------------
  531|      2|	pim_ifp->pim_override_interval_msec =
  532|      2|		PIM_DEFAULT_OVERRIDE_INTERVAL_MSEC;
  ------------------
  |  |   21|      2|#define PIM_DEFAULT_OVERRIDE_INTERVAL_MSEC       (2500) /* RFC 4601: 4.11.  Timer Values */
  ------------------
  533|      2|	pim_ifp->pim_can_disable_join_suppression =
  534|      2|		PIM_DEFAULT_CAN_DISABLE_JOIN_SUPPRESSION;
  ------------------
  |  |   22|      2|#define PIM_DEFAULT_CAN_DISABLE_JOIN_SUPPRESSION (0)    /* boolean */
  ------------------
  535|       |
  536|       |	/* neighbors without lan_delay */
  537|      2|	pim_ifp->pim_number_of_nonlandelay_neighbors = 0;
  538|      2|	pim_ifp->pim_neighbors_highest_propagation_delay_msec = 0;
  539|      2|	pim_ifp->pim_neighbors_highest_override_interval_msec = 0;
  540|       |
  541|       |	/* DR Election */
  542|      2|	pim_ifp->pim_dr_election_last = 0; /* timestamp */
  543|      2|	pim_ifp->pim_dr_election_count = 0;
  544|      2|	pim_ifp->pim_dr_election_changes = 0;
  545|      2|	pim_ifp->pim_dr_num_nondrpri_neighbors =
  546|      2|		0; /* neighbors without dr_pri */
  547|      2|	pim_ifp->pim_dr_addr = pim_ifp->primary_address;
  548|      2|	pim_ifp->am_i_dr = true;
  549|       |
  550|      2|	pim_ifstat_reset(ifp);
  551|      2|}
pim_msg_send:
  653|    160|{
  654|    160|	struct pim_interface *pim_ifp;
  655|       |
  656|       |
  657|    160|	pim_ifp = ifp->info;
  658|       |
  659|    160|	if (pim_ifp->pim_passive_enable) {
  ------------------
  |  Branch (659:6): [True: 0, False: 160]
  ------------------
  660|      0|		if (PIM_DEBUG_PIM_PACKETS)
  ------------------
  |  |  140|      0|#define PIM_DEBUG_PIM_PACKETS (router->debugs & PIM_MASK_PIM_PACKETS)
  |  |  ------------------
  |  |  |  |   74|      0|#define PIM_MASK_PIM_PACKETS         (1 << 2)
  |  |  ------------------
  |  |  |  Branch (140:31): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  661|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  662|      0|				"skip sending PIM message on passive interface %s",
  663|      0|				ifp->name);
  664|      0|		return 0;
  665|      0|	}
  666|       |
  667|    160|#if PIM_IPV == 4
  668|    160|	uint8_t ttl;
  669|    160|	struct pim_msg_header *header;
  670|    160|	unsigned char buffer[10000];
  671|       |
  672|    160|	memset(buffer, 0, 10000);
  673|       |
  674|    160|	header = (struct pim_msg_header *)pim_msg;
  675|       |
  676|       |/*
  677|       | * Omnios apparently doesn't have a #define for IP default
  678|       | * ttl that is the same as all other platforms.
  679|       | */
  680|       |#ifndef IPDEFTTL
  681|       |#define IPDEFTTL   64
  682|       |#endif
  683|       |	/* TTL for packets destine to ALL-PIM-ROUTERS is 1 */
  684|    160|	switch (header->type) {
  685|    154|	case PIM_MSG_TYPE_HELLO:
  ------------------
  |  Branch (685:2): [True: 154, False: 6]
  ------------------
  686|    154|	case PIM_MSG_TYPE_JOIN_PRUNE:
  ------------------
  |  Branch (686:2): [True: 0, False: 160]
  ------------------
  687|    154|	case PIM_MSG_TYPE_BOOTSTRAP:
  ------------------
  |  Branch (687:2): [True: 0, False: 160]
  ------------------
  688|    154|	case PIM_MSG_TYPE_ASSERT:
  ------------------
  |  Branch (688:2): [True: 0, False: 160]
  ------------------
  689|    154|		ttl = 1;
  690|    154|		break;
  691|      0|	case PIM_MSG_TYPE_REGISTER:
  ------------------
  |  Branch (691:2): [True: 0, False: 160]
  ------------------
  692|      6|	case PIM_MSG_TYPE_REG_STOP:
  ------------------
  |  Branch (692:2): [True: 6, False: 154]
  ------------------
  693|      6|	case PIM_MSG_TYPE_GRAFT:
  ------------------
  |  Branch (693:2): [True: 0, False: 160]
  ------------------
  694|      6|	case PIM_MSG_TYPE_GRAFT_ACK:
  ------------------
  |  Branch (694:2): [True: 0, False: 160]
  ------------------
  695|      6|	case PIM_MSG_TYPE_CANDIDATE:
  ------------------
  |  Branch (695:2): [True: 0, False: 160]
  ------------------
  696|      6|		ttl = IPDEFTTL;
  697|      6|		break;
  698|      0|	default:
  ------------------
  |  Branch (698:2): [True: 0, False: 160]
  ------------------
  699|      0|		ttl = MAXTTL;
  700|      0|		break;
  701|    160|	}
  702|       |
  703|    160|	struct ip *ip = (struct ip *)buffer;
  704|    160|	struct sockaddr_in to = {};
  705|    160|	int sendlen = sizeof(*ip) + pim_msg_size;
  706|    160|	socklen_t tolen;
  707|    160|	unsigned char *msg_start;
  708|       |
  709|    160|	ip->ip_id = htons(++ip_id);
  710|    160|	ip->ip_hl = 5;
  711|    160|	ip->ip_v = 4;
  712|    160|	ip->ip_tos = IPTOS_PREC_INTERNETCONTROL;
  713|    160|	ip->ip_p = PIM_IP_PROTO_PIM;
  ------------------
  |  |   26|    160|#define PIM_IP_PROTO_PIM              (103)
  ------------------
  714|    160|	ip->ip_src = src;
  715|    160|	ip->ip_dst = dst;
  716|    160|	ip->ip_ttl = ttl;
  717|    160|	ip->ip_len = htons(sendlen);
  718|       |
  719|    160|	to.sin_family = AF_INET;
  720|    160|	to.sin_addr = dst;
  721|    160|	tolen = sizeof(to);
  722|       |
  723|    160|	msg_start = buffer + sizeof(*ip);
  724|    160|	memcpy(msg_start, pim_msg, pim_msg_size);
  725|       |
  726|    160|	if (PIM_DEBUG_PIM_PACKETS)
  ------------------
  |  |  140|    160|#define PIM_DEBUG_PIM_PACKETS (router->debugs & PIM_MASK_PIM_PACKETS)
  |  |  ------------------
  |  |  |  |   74|    160|#define PIM_MASK_PIM_PACKETS         (1 << 2)
  |  |  ------------------
  |  |  |  Branch (140:31): [True: 0, False: 160]
  |  |  ------------------
  ------------------
  727|      0|		zlog_debug("%s: to %pPA on %s: msg_size=%d checksum=%x",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  728|    160|			   __func__, &dst, ifp->name, pim_msg_size,
  729|    160|			   header->checksum);
  730|       |
  731|    160|	if (PIM_DEBUG_PIM_PACKETDUMP_SEND) {
  ------------------
  |  |  142|    160|	(router->debugs & PIM_MASK_PIM_PACKETDUMP_SEND)
  |  |  ------------------
  |  |  |  |   75|    160|#define PIM_MASK_PIM_PACKETDUMP_SEND (1 << 3)
  |  |  ------------------
  |  |  |  Branch (142:2): [True: 0, False: 160]
  |  |  ------------------
  ------------------
  732|      0|		pim_pkt_dump(__func__, pim_msg, pim_msg_size);
  733|      0|	}
  734|       |
  735|    160|	pim_msg_send_frame(fd, (char *)buffer, sendlen, (struct sockaddr *)&to,
  736|    160|			   tolen, ifp->name);
  737|    160|	return 0;
  738|       |
  739|       |#else
  740|       |	struct iovec iovector[2];
  741|       |
  742|       |	iovector[0].iov_base = pim_msg;
  743|       |	iovector[0].iov_len = pim_msg_size;
  744|       |
  745|       |	pim_msg_send_frame(src, dst, ifp->ifindex, &iovector[0], fd);
  746|       |
  747|       |	return 0;
  748|       |#endif
  749|    160|}
pim_hello_send:
  805|    154|{
  806|    154|	struct pim_interface *pim_ifp = ifp->info;
  807|       |
  808|    154|	if (if_is_loopback(ifp))
  ------------------
  |  Branch (808:6): [True: 0, False: 154]
  ------------------
  809|      0|		return 0;
  810|       |
  811|    154|	if (hello_send(ifp, holdtime)) {
  ------------------
  |  Branch (811:6): [True: 0, False: 154]
  ------------------
  812|      0|		++pim_ifp->pim_ifstat_hello_sendfail;
  813|       |
  814|      0|		if (PIM_DEBUG_PIM_HELLO) {
  ------------------
  |  |  160|      0|#define PIM_DEBUG_PIM_HELLO (router->debugs & PIM_MASK_PIM_HELLO)
  |  |  ------------------
  |  |  |  |   87|      0|#define PIM_MASK_PIM_HELLO           (1 << 15)
  |  |  ------------------
  |  |  |  Branch (160:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  815|      0|			zlog_warn("Could not send PIM hello on interface %s",
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
  816|      0|				  ifp->name);
  817|      0|		}
  818|      0|		return -1;
  819|      0|	}
  820|       |
  821|    154|	if (!pim_ifp->pim_passive_enable) {
  ------------------
  |  Branch (821:6): [True: 154, False: 0]
  ------------------
  822|    154|		++pim_ifp->pim_ifstat_hello_sent;
  823|    154|		PIM_IF_FLAG_SET_HELLO_SENT(pim_ifp->flags);
  ------------------
  |  |   39|    154|#define PIM_IF_FLAG_SET_HELLO_SENT(flags) ((flags) |= PIM_IF_FLAG_HELLO_SENT)
  |  |  ------------------
  |  |  |  |   35|    154|#define PIM_IF_FLAG_HELLO_SENT (1 << 0)
  |  |  ------------------
  ------------------
  824|    154|	}
  825|       |
  826|    154|	return 0;
  827|    154|}
pim_hello_restart_now:
  876|    154|{
  877|    154|	struct pim_interface *pim_ifp;
  878|       |
  879|    154|	pim_ifp = ifp->info;
  880|       |
  881|       |	/*
  882|       |	 * Reset next hello timer
  883|       |	 */
  884|    154|	hello_resched(ifp);
  885|       |
  886|       |	/*
  887|       |	 * Immediately send hello
  888|       |	 */
  889|    154|	pim_hello_send(ifp, PIM_IF_DEFAULT_HOLDTIME(pim_ifp));
  ------------------
  |  |  183|    154|	(((pim_ifp)->pim_default_holdtime < 0)                                 \
  |  |  ------------------
  |  |  |  Branch (183:3): [True: 154, False: 0]
  |  |  ------------------
  |  |  184|    154|		 ? ((pim_ifp)->pim_hello_period * 7 / 2)                       \
  |  |  185|    154|		 : ((pim_ifp)->pim_default_holdtime))
  ------------------
  890|    154|}
pim_hello_restart_triggered:
  902|    144|{
  903|    144|	struct pim_interface *pim_ifp;
  904|    144|	int triggered_hello_delay_msec;
  905|    144|	int random_msec;
  906|       |
  907|    144|	pim_ifp = ifp->info;
  908|       |
  909|       |	/*
  910|       |	 * No need to ever start loopback or vrf device hello's
  911|       |	 */
  912|    144|	if (if_is_loopback(ifp))
  ------------------
  |  Branch (912:6): [True: 0, False: 144]
  ------------------
  913|      0|		return;
  914|       |
  915|       |	/*
  916|       |	 * There exists situations where we have the a RPF out this
  917|       |	 * interface, but we haven't formed a neighbor yet.  This
  918|       |	 * happens especially during interface flaps.  While
  919|       |	 * we would like to handle this more gracefully in other
  920|       |	 * parts of the code.  In order to get us up and running
  921|       |	 * let's just send the hello immediate'ish
  922|       |	 * This should be revisited when we get nexthop tracking
  923|       |	 * in and when we have a better handle on safely
  924|       |	 * handling the rpf information for upstreams that
  925|       |	 * we cannot legally reach yet.
  926|       |	 */
  927|    144|	triggered_hello_delay_msec = 1;
  928|       |	// triggered_hello_delay_msec = 1000 *
  929|       |	// pim_ifp->pim_triggered_hello_delay;
  930|       |
  931|    144|	if (pim_ifp->t_pim_hello_timer) {
  ------------------
  |  Branch (931:6): [True: 0, False: 144]
  ------------------
  932|      0|		long remain_msec =
  933|      0|			pim_time_timer_remain_msec(pim_ifp->t_pim_hello_timer);
  934|      0|		if (remain_msec <= triggered_hello_delay_msec) {
  ------------------
  |  Branch (934:7): [True: 0, False: 0]
  ------------------
  935|       |			/* Rescheduling hello would increase the delay, then
  936|       |			   it's faster
  937|       |			   to just wait for the scheduled periodic hello. */
  938|      0|			return;
  939|      0|		}
  940|       |
  941|      0|		EVENT_OFF(pim_ifp->t_pim_hello_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]
  |  |  ------------------
  ------------------
  942|      0|	}
  943|       |
  944|    144|	random_msec = triggered_hello_delay_msec;
  945|       |	// random_msec = random() % (triggered_hello_delay_msec + 1);
  946|       |
  947|    144|	if (PIM_DEBUG_PIM_HELLO) {
  ------------------
  |  |  160|    144|#define PIM_DEBUG_PIM_HELLO (router->debugs & PIM_MASK_PIM_HELLO)
  |  |  ------------------
  |  |  |  |   87|    144|#define PIM_MASK_PIM_HELLO           (1 << 15)
  |  |  ------------------
  |  |  |  Branch (160:29): [True: 0, False: 144]
  |  |  ------------------
  ------------------
  948|      0|		zlog_debug("Scheduling %d msec triggered hello on interface %s",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  949|      0|			   random_msec, ifp->name);
  950|      0|	}
  951|       |
  952|    144|	event_add_timer_msec(router->master, on_pim_hello_send, ifp,
  ------------------
  |  |  217|    144|#define event_add_timer_msec(m, f, a, v, t) 0
  ------------------
  953|    144|			     random_msec, &pim_ifp->t_pim_hello_timer);
  954|    144|}
pim_pim.c:pim_pkt_dst_addr_ok:
  131|  2.87k|{
  132|  2.87k|	if ((type == PIM_MSG_TYPE_HELLO) || (type == PIM_MSG_TYPE_ASSERT)
  ------------------
  |  Branch (132:6): [True: 489, False: 2.38k]
  |  Branch (132:38): [True: 163, False: 2.22k]
  ------------------
  133|  2.22k|	    || (type == PIM_MSG_TYPE_JOIN_PRUNE)) {
  ------------------
  |  Branch (133:9): [True: 833, False: 1.39k]
  ------------------
  134|  1.48k|		if (pim_addr_cmp(addr, qpim_all_pim_routers_addr))
  ------------------
  |  Branch (134:7): [True: 10, False: 1.47k]
  ------------------
  135|     10|			return false;
  136|  1.48k|	}
  137|       |
  138|  2.86k|	return true;
  139|  2.87k|}
pim_pim.c:pim_msg_send_frame:
  561|    160|{
  562|    160|	if (sendto(fd, buf, len, MSG_DONTWAIT, dst, salen) >= 0)
  ------------------
  |  Branch (562:6): [True: 0, False: 160]
  ------------------
  563|      0|		return 0;
  564|       |
  565|    160|	if (errno == EMSGSIZE) {
  ------------------
  |  Branch (565:6): [True: 0, False: 160]
  ------------------
  566|      0|		struct ip *ip = (struct ip *)buf;
  567|      0|		size_t hdrsize = sizeof(struct ip);
  568|      0|		size_t newlen1 = ((len - hdrsize) / 2) & 0xFFF8;
  569|      0|		size_t sendlen = newlen1 + hdrsize;
  570|      0|		size_t offset = ntohs(ip->ip_off);
  571|      0|		int ret;
  572|       |
  573|      0|		ip->ip_len = htons(sendlen);
  574|      0|		ip->ip_off = htons(offset | IP_MF);
  575|       |
  576|      0|		ret = pim_msg_send_frame(fd, buf, sendlen, dst, salen, ifname);
  577|      0|		if (ret)
  ------------------
  |  Branch (577:7): [True: 0, False: 0]
  ------------------
  578|      0|			return ret;
  579|       |
  580|      0|		struct ip *ip2 = (struct ip *)(buf + newlen1);
  581|      0|		size_t newlen2 = len - sendlen;
  582|       |
  583|      0|		sendlen = newlen2 + hdrsize;
  584|       |
  585|      0|		memcpy(ip2, ip, hdrsize);
  586|      0|		ip2->ip_len = htons(sendlen);
  587|      0|		ip2->ip_off = htons(offset + (newlen1 >> 3));
  588|      0|		return pim_msg_send_frame(fd, (char *)ip2, sendlen, dst, salen,
  589|      0|					  ifname);
  590|      0|	}
  591|       |
  592|    160|	zlog_warn(
  ------------------
  |  |  131|    160|#define zlog_warn(...) 0
  ------------------
  593|    160|		"%s: sendto() failure to %pSU: iface=%s fd=%d msg_size=%zd: %m",
  594|    160|		__func__, dst, ifname, fd, len);
  595|    160|	return -1;
  596|    160|}
pim_pim.c:hello_send:
  752|    154|{
  753|    154|	uint8_t pim_msg[PIM_PIM_BUFSIZE_WRITE];
  754|    154|	struct pim_interface *pim_ifp;
  755|    154|	int pim_tlv_size;
  756|    154|	int pim_msg_size;
  757|       |
  758|    154|	pim_ifp = ifp->info;
  759|       |
  760|    154|	if (PIM_DEBUG_PIM_HELLO)
  ------------------
  |  |  160|    154|#define PIM_DEBUG_PIM_HELLO (router->debugs & PIM_MASK_PIM_HELLO)
  |  |  ------------------
  |  |  |  |   87|    154|#define PIM_MASK_PIM_HELLO           (1 << 15)
  |  |  ------------------
  |  |  |  Branch (160:29): [True: 0, False: 154]
  |  |  ------------------
  ------------------
  761|      0|		zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  762|    154|			"%s: to %pPA on %s: holdt=%u prop_d=%u overr_i=%u dis_join_supp=%d dr_prio=%u gen_id=%08x addrs=%d",
  763|    154|			__func__, &qpim_all_pim_routers_addr, ifp->name,
  764|    154|			holdtime, pim_ifp->pim_propagation_delay_msec,
  765|    154|			pim_ifp->pim_override_interval_msec,
  766|    154|			pim_ifp->pim_can_disable_join_suppression,
  767|    154|			pim_ifp->pim_dr_priority, pim_ifp->pim_generation_id,
  768|    154|			listcount(ifp->connected));
  769|       |
  770|    154|	pim_tlv_size = pim_hello_build_tlv(
  771|    154|		ifp, pim_msg + PIM_PIM_MIN_LEN,
  ------------------
  |  |   39|    154|#define PIM_PIM_MIN_LEN               PIM_MSG_HEADER_LEN
  |  |  ------------------
  |  |  |  |   38|    154|#define PIM_MSG_HEADER_LEN            (4)
  |  |  ------------------
  ------------------
  772|    154|		sizeof(pim_msg) - PIM_PIM_MIN_LEN, holdtime,
  ------------------
  |  |   39|    154|#define PIM_PIM_MIN_LEN               PIM_MSG_HEADER_LEN
  |  |  ------------------
  |  |  |  |   38|    154|#define PIM_MSG_HEADER_LEN            (4)
  |  |  ------------------
  ------------------
  773|    154|		pim_ifp->pim_dr_priority, pim_ifp->pim_generation_id,
  774|    154|		pim_ifp->pim_propagation_delay_msec,
  775|    154|		pim_ifp->pim_override_interval_msec,
  776|    154|		pim_ifp->pim_can_disable_join_suppression);
  777|    154|	if (pim_tlv_size < 0) {
  ------------------
  |  Branch (777:6): [True: 0, False: 154]
  ------------------
  778|      0|		return -1;
  779|      0|	}
  780|       |
  781|    154|	pim_msg_size = pim_tlv_size + PIM_PIM_MIN_LEN;
  ------------------
  |  |   39|    154|#define PIM_PIM_MIN_LEN               PIM_MSG_HEADER_LEN
  |  |  ------------------
  |  |  |  |   38|    154|#define PIM_MSG_HEADER_LEN            (4)
  |  |  ------------------
  ------------------
  782|       |
  783|    154|	assert(pim_msg_size >= PIM_PIM_MIN_LEN);
  ------------------
  |  |   51|    154|	({                                                                     \
  |  |   52|    154|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|    154|			(used)) = {                                            \
  |  |   54|    154|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|    154|	{                                                                      \
  |  |  |  |  284|    154|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|    154|		/* .type = */ (type_),                                         \
  |  |  |  |  286|    154|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|    154|		/* .func = */ func_,                                           \
  |  |  |  |  289|    154|	}                                                                      \
  |  |  ------------------
  |  |   55|    154|			.expr = #expr_,                                        \
  |  |   56|    154|		};                                                             \
  |  |   57|    154|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|    154|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|    154|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|    154|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|    154|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 154]
  |  |  |  Branch (58:24): [True: 154, False: 0]
  |  |  ------------------
  |  |   59|    154|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|    154|	})
  ------------------
  784|    154|	assert(pim_msg_size <= PIM_PIM_BUFSIZE_WRITE);
  ------------------
  |  |   51|    154|	({                                                                     \
  |  |   52|    154|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|    154|			(used)) = {                                            \
  |  |   54|    154|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|    154|	{                                                                      \
  |  |  |  |  284|    154|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|    154|		/* .type = */ (type_),                                         \
  |  |  |  |  286|    154|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|    154|		/* .func = */ func_,                                           \
  |  |  |  |  289|    154|	}                                                                      \
  |  |  ------------------
  |  |   55|    154|			.expr = #expr_,                                        \
  |  |   56|    154|		};                                                             \
  |  |   57|    154|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|    154|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|    154|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|    154|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|    154|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 154]
  |  |  |  Branch (58:24): [True: 154, False: 0]
  |  |  ------------------
  |  |   59|    154|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|    154|	})
  ------------------
  785|       |
  786|    154|	pim_msg_build_header(pim_ifp->primary_address,
  787|    154|			     qpim_all_pim_routers_addr, pim_msg, pim_msg_size,
  788|    154|			     PIM_MSG_TYPE_HELLO, false);
  789|       |
  790|    154|	if (pim_msg_send(pim_ifp->pim_sock_fd, pim_ifp->primary_address,
  ------------------
  |  Branch (790:6): [True: 0, False: 154]
  ------------------
  791|    154|			 qpim_all_pim_routers_addr, pim_msg, pim_msg_size,
  792|    154|			 ifp)) {
  793|      0|		if (PIM_DEBUG_PIM_HELLO) {
  ------------------
  |  |  160|      0|#define PIM_DEBUG_PIM_HELLO (router->debugs & PIM_MASK_PIM_HELLO)
  |  |  ------------------
  |  |  |  |   87|      0|#define PIM_MASK_PIM_HELLO           (1 << 15)
  |  |  ------------------
  |  |  |  Branch (160:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  794|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  795|      0|				"%s: could not send PIM message on interface %s",
  796|      0|				__func__, ifp->name);
  797|      0|		}
  798|      0|		return -2;
  799|      0|	}
  800|       |
  801|    154|	return 0;
  802|    154|}
pim_pim.c:hello_resched:
  830|    154|{
  831|    154|	struct pim_interface *pim_ifp;
  832|       |
  833|    154|	pim_ifp = ifp->info;
  834|       |
  835|    154|	if (PIM_DEBUG_PIM_HELLO) {
  ------------------
  |  |  160|    154|#define PIM_DEBUG_PIM_HELLO (router->debugs & PIM_MASK_PIM_HELLO)
  |  |  ------------------
  |  |  |  |   87|    154|#define PIM_MASK_PIM_HELLO           (1 << 15)
  |  |  ------------------
  |  |  |  Branch (160:29): [True: 0, False: 154]
  |  |  ------------------
  ------------------
  836|      0|		zlog_debug("Rescheduling %d sec hello on interface %s",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  837|      0|			   pim_ifp->pim_hello_period, ifp->name);
  838|      0|	}
  839|    154|	EVENT_OFF(pim_ifp->t_pim_hello_timer);
  ------------------
  |  |  164|    154|	do {                                                                   \
  |  |  165|    154|		if ((thread))                                                  \
  |  |  ------------------
  |  |  |  Branch (165:7): [True: 0, False: 154]
  |  |  ------------------
  |  |  166|    154|			event_cancel(&(thread));                               \
  |  |  167|    154|	} while (0)
  |  |  ------------------
  |  |  |  Branch (167:11): [Folded, False: 154]
  |  |  ------------------
  ------------------
  840|    154|	event_add_timer(router->master, on_pim_hello_send, ifp,
  ------------------
  |  |  216|    154|#define event_add_timer(m, f, a, v, t) 0
  ------------------
  841|    154|			pim_ifp->pim_hello_period, &pim_ifp->t_pim_hello_timer);
  842|    154|}

pim_register_stop_send:
   56|      6|{
   57|      6|	struct pim_interface *pinfo;
   58|      6|	unsigned char buffer[10000];
   59|      6|	unsigned int b1length = 0;
   60|      6|	unsigned int length;
   61|      6|	uint8_t *b1;
   62|       |
   63|      6|	if (PIM_DEBUG_PIM_REG) {
  ------------------
  |  |  162|      6|#define PIM_DEBUG_PIM_REG (router->debugs & PIM_MASK_PIM_REG)
  |  |  ------------------
  |  |  |  |   90|      6|#define PIM_MASK_PIM_REG             (1 << 18)
  |  |  ------------------
  |  |  |  Branch (162:27): [True: 0, False: 6]
  |  |  ------------------
  ------------------
   64|      0|		zlog_debug("Sending Register stop for %pSG to %pPA on %s", sg,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
   65|      0|			   &originator, ifp->name);
   66|      0|	}
   67|       |
   68|      6|	memset(buffer, 0, 10000);
   69|      6|	b1 = (uint8_t *)buffer + PIM_MSG_REGISTER_STOP_LEN;
  ------------------
  |  |   18|      6|#define PIM_MSG_REGISTER_STOP_LEN (4)
  ------------------
   70|       |
   71|      6|	length = pim_encode_addr_group(b1, AFI_IP, 0, 0, sg->grp);
   72|      6|	b1length += length;
   73|      6|	b1 += length;
   74|       |
   75|      6|	length = pim_encode_addr_ucast(b1, sg->src);
   76|      6|	b1length += length;
   77|       |
   78|      6|	pim_msg_build_header(src, originator, buffer,
   79|      6|			     b1length + PIM_MSG_REGISTER_STOP_LEN,
  ------------------
  |  |   18|      6|#define PIM_MSG_REGISTER_STOP_LEN (4)
  ------------------
   80|      6|			     PIM_MSG_TYPE_REG_STOP, false);
   81|       |
   82|      6|	pinfo = (struct pim_interface *)ifp->info;
   83|      6|	if (!pinfo) {
  ------------------
  |  Branch (83:6): [True: 0, False: 6]
  ------------------
   84|      0|		if (PIM_DEBUG_PIM_TRACE)
  ------------------
  |  |  146|      0|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|      0|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|      0|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   85|      0|			zlog_debug("%s: No pinfo!", __func__);
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
   86|      0|		return;
   87|      0|	}
   88|      6|	if (pim_msg_send(pinfo->pim_sock_fd, src, originator, buffer,
  ------------------
  |  Branch (88:6): [True: 0, False: 6]
  ------------------
   89|      6|			 b1length + PIM_MSG_REGISTER_STOP_LEN, ifp)) {
  ------------------
  |  |   18|      6|#define PIM_MSG_REGISTER_STOP_LEN (4)
  ------------------
   90|      0|		if (PIM_DEBUG_PIM_TRACE) {
  ------------------
  |  |  146|      0|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|      0|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|      0|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   91|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
   92|      0|				"%s: could not send PIM register stop message on interface %s",
   93|      0|				__func__, ifp->name);
   94|      0|		}
   95|      0|	}
   96|       |
   97|      6|	if (!pinfo->pim_passive_enable)
  ------------------
  |  Branch (97:6): [True: 6, False: 0]
  ------------------
   98|      6|		++pinfo->pim_ifstat_reg_stop_send;
   99|      6|}
pim_register_stop_recv:
  123|    144|{
  124|    144|	struct pim_interface *pim_ifp = ifp->info;
  125|    144|	struct pim_instance *pim = pim_ifp->pim;
  126|    144|	struct pim_upstream *up = NULL;
  127|    144|	struct pim_rpf *rp;
  128|    144|	pim_sgaddr sg;
  129|    144|	struct listnode *up_node;
  130|    144|	struct pim_upstream *child;
  131|    144|	bool wrong_af = false;
  132|    144|	bool handling_star = false;
  133|    144|	int l;
  134|       |
  135|    144|	if (pim_ifp->pim_passive_enable) {
  ------------------
  |  Branch (135:6): [True: 0, False: 144]
  ------------------
  136|      0|		if (PIM_DEBUG_PIM_PACKETS)
  ------------------
  |  |  140|      0|#define PIM_DEBUG_PIM_PACKETS (router->debugs & PIM_MASK_PIM_PACKETS)
  |  |  ------------------
  |  |  |  |   74|      0|#define PIM_MASK_PIM_PACKETS         (1 << 2)
  |  |  ------------------
  |  |  |  Branch (140:31): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  137|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  138|      0|				"skip receiving PIM message on passive interface %s",
  139|      0|				ifp->name);
  140|      0|		return 0;
  141|      0|	}
  142|       |
  143|    144|	++pim_ifp->pim_ifstat_reg_stop_recv;
  144|       |
  145|    144|	memset(&sg, 0, sizeof(sg));
  146|    144|	l = pim_parse_addr_group(&sg, buf, buf_size);
  147|    144|	buf += l;
  148|    144|	buf_size -= l;
  149|    144|	pim_parse_addr_ucast(&sg.src, buf, buf_size, &wrong_af);
  150|       |
  151|    144|	if (wrong_af) {
  ------------------
  |  Branch (151:6): [True: 1, False: 143]
  ------------------
  152|      1|		zlog_err("invalid AF in Register-Stop on %s", ifp->name);
  ------------------
  |  |  130|      1|#define zlog_err(...) 0
  ------------------
  153|      1|		return -1;
  154|      1|	}
  155|       |
  156|       |
  157|    143|	if (PIM_DEBUG_PIM_REG)
  ------------------
  |  |  162|    143|#define PIM_DEBUG_PIM_REG (router->debugs & PIM_MASK_PIM_REG)
  |  |  ------------------
  |  |  |  |   90|    143|#define PIM_MASK_PIM_REG             (1 << 18)
  |  |  ------------------
  |  |  |  Branch (162:27): [True: 0, False: 143]
  |  |  ------------------
  ------------------
  158|      0|		zlog_debug("Received Register stop for %pSG", &sg);
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  159|       |
  160|    143|	rp = RP(pim_ifp->pim, sg.grp);
  ------------------
  |  |   67|    143|#define RP(P, G)       pim_rp_g ((P), (G))
  ------------------
  161|    143|	if (rp) {
  ------------------
  |  Branch (161:6): [True: 17, False: 126]
  ------------------
  162|       |		/* As per RFC 7761, Section 4.9.4:
  163|       |		 * A special wildcard value consisting of an address field of
  164|       |		 * all zeros can be used to indicate any source.
  165|       |		 */
  166|     17|		if ((pim_addr_cmp(sg.src, rp->rpf_addr) == 0) ||
  ------------------
  |  Branch (166:7): [True: 10, False: 7]
  ------------------
  167|     15|		    pim_addr_is_any(sg.src)) {
  ------------------
  |  Branch (167:7): [True: 5, False: 2]
  ------------------
  168|     15|			handling_star = true;
  169|     15|			sg.src = PIMADDR_ANY;
  ------------------
  |  |   79|     15|#define PIMADDR_ANY (pim_addr){ }
  ------------------
  170|     15|		}
  171|     17|	}
  172|       |
  173|       |	/*
  174|       |	 * RFC 7761 Sec 4.4.1
  175|       |	 * Handling Register-Stop(*,G) Messages at the DR:
  176|       |	 *   A Register-Stop(*,G) should be treated as a
  177|       |	 *   Register-Stop(S,G) for all (S,G) Register state
  178|       |	 *   machines that are not in the NoInfo state.
  179|       |	 */
  180|    143|	up = pim_upstream_find(pim, &sg);
  181|    143|	if (up) {
  ------------------
  |  Branch (181:6): [True: 24, False: 119]
  ------------------
  182|       |		/*
  183|       |		 * If the upstream find actually found a particular
  184|       |		 * S,G then we *know* that the following for loop
  185|       |		 * is not going to execute and this is ok
  186|       |		 */
  187|     90|		for (ALL_LIST_ELEMENTS_RO(up->sources, up_node, child)) {
  ------------------
  |  |  333|     24|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|     24|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 24, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|    180|	(node) != NULL && ((data) = static_cast(data, listgetdata(node)), 1);  \
  |  |  ------------------
  |  |  |  |  204|    540|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 90, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 90]
  |  |  |  |  |  Branch (204:28): [True: 90, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 90]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (334:2): [True: 90, False: 24]
  |  |  |  Branch (334:20): [True: 90, False: 0]
  |  |  ------------------
  |  |  335|     90|	(node) = listnextnode(node), ((data) = NULL)
  |  |  ------------------
  |  |  |  |   49|     90|#define listnextnode(X) ((X) ? ((X)->next) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:26): [True: 90, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  188|     90|			if (PIM_DEBUG_PIM_REG)
  ------------------
  |  |  162|     90|#define PIM_DEBUG_PIM_REG (router->debugs & PIM_MASK_PIM_REG)
  |  |  ------------------
  |  |  |  |   90|     90|#define PIM_MASK_PIM_REG             (1 << 18)
  |  |  ------------------
  |  |  |  Branch (162:27): [True: 0, False: 90]
  |  |  ------------------
  ------------------
  189|      0|				zlog_debug("Executing Reg stop for %s",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  190|     90|					   child->sg_str);
  191|       |
  192|     90|			pim_reg_stop_upstream(pim, child);
  193|     90|		}
  194|       |
  195|     24|		if (PIM_DEBUG_PIM_REG)
  ------------------
  |  |  162|     24|#define PIM_DEBUG_PIM_REG (router->debugs & PIM_MASK_PIM_REG)
  |  |  ------------------
  |  |  |  |   90|     24|#define PIM_MASK_PIM_REG             (1 << 18)
  |  |  ------------------
  |  |  |  Branch (162:27): [True: 0, False: 24]
  |  |  ------------------
  ------------------
  196|      0|			zlog_debug("Executing Reg stop for %s", up->sg_str);
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  197|     24|		pim_reg_stop_upstream(pim, up);
  198|    119|	} else {
  199|    119|		if (!handling_star)
  ------------------
  |  Branch (199:7): [True: 111, False: 8]
  ------------------
  200|    111|			return 0;
  201|       |		/*
  202|       |		 * Unfortunately pim was unable to find a *,G
  203|       |		 * but pim may still actually have individual
  204|       |		 * S,G's that need to be processed.  In that
  205|       |		 * case pim must do the expensive walk to find
  206|       |		 * and stop
  207|       |		 */
  208|    383|		frr_each (rb_pim_upstream, &pim->upstream_head, up) {
  ------------------
  |  |   21|    391|	for (item = prefix##_first(head); item;                                \
  |  |  ------------------
  |  |  |  Branch (21:36): [True: 383, False: 8]
  |  |  ------------------
  |  |   22|    383|			item = prefix##_next(head, item))
  ------------------
  209|    383|			if (pim_addr_cmp(up->sg.grp, sg.grp) == 0) {
  ------------------
  |  Branch (209:8): [True: 4, False: 379]
  ------------------
  210|      4|				if (PIM_DEBUG_PIM_REG)
  ------------------
  |  |  162|      4|#define PIM_DEBUG_PIM_REG (router->debugs & PIM_MASK_PIM_REG)
  |  |  ------------------
  |  |  |  |   90|      4|#define PIM_MASK_PIM_REG             (1 << 18)
  |  |  ------------------
  |  |  |  Branch (162:27): [True: 0, False: 4]
  |  |  ------------------
  ------------------
  211|      0|					zlog_debug("Executing Reg stop for %s",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  212|      4|						   up->sg_str);
  213|      4|				pim_reg_stop_upstream(pim, up);
  214|      4|			}
  215|    383|		}
  216|      8|	}
  217|       |
  218|     32|	return 0;
  219|    143|}
pim_register_recv:
  488|    142|{
  489|    142|	int sentRegisterStop = 0;
  490|    142|	const void *ip_hdr;
  491|    142|	pim_sgaddr sg;
  492|    142|	uint32_t *bits;
  493|    142|	int i_am_rp = 0;
  494|    142|	struct pim_interface *pim_ifp = ifp->info;
  495|    142|	struct pim_instance *pim = pim_ifp->pim;
  496|    142|	pim_addr rp_addr;
  497|    142|	struct pim_rpf *rpg;
  498|       |
  499|    142|	if (pim_ifp->pim_passive_enable) {
  ------------------
  |  Branch (499:6): [True: 0, False: 142]
  ------------------
  500|      0|		if (PIM_DEBUG_PIM_PACKETS)
  ------------------
  |  |  140|      0|#define PIM_DEBUG_PIM_PACKETS (router->debugs & PIM_MASK_PIM_PACKETS)
  |  |  ------------------
  |  |  |  |   74|      0|#define PIM_MASK_PIM_PACKETS         (1 << 2)
  |  |  ------------------
  |  |  |  Branch (140:31): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  501|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  502|      0|				"skip receiving PIM message on passive interface %s",
  503|      0|				ifp->name);
  504|      0|		return 0;
  505|      0|	}
  506|       |
  507|    142|#define PIM_MSG_REGISTER_BIT_RESERVED_LEN 4
  508|       |
  509|    142|	if (tlv_buf_size
  ------------------
  |  Branch (509:6): [True: 83, False: 59]
  ------------------
  510|    142|	    < (int)(PIM_MSG_REGISTER_BIT_RESERVED_LEN + sizeof(struct ip))) {
  ------------------
  |  |  507|    142|#define PIM_MSG_REGISTER_BIT_RESERVED_LEN 4
  ------------------
  511|     83|		return 0;
  512|     83|	}
  513|     59|	ip_hdr = (tlv_buf + PIM_MSG_REGISTER_BIT_RESERVED_LEN);
  ------------------
  |  |  507|     59|#define PIM_MSG_REGISTER_BIT_RESERVED_LEN 4
  ------------------
  514|       |
  515|     59|	if (!if_address_is_local(&dest_addr, PIM_AF, pim->vrf->vrf_id)) {
  ------------------
  |  |   19|     59|#define PIM_AF		AF_INET
  ------------------
  |  Branch (515:6): [True: 41, False: 18]
  ------------------
  516|     41|		if (PIM_DEBUG_PIM_REG)
  ------------------
  |  |  162|     41|#define PIM_DEBUG_PIM_REG (router->debugs & PIM_MASK_PIM_REG)
  |  |  ------------------
  |  |  |  |   90|     41|#define PIM_MASK_PIM_REG             (1 << 18)
  |  |  ------------------
  |  |  |  Branch (162:27): [True: 0, False: 41]
  |  |  ------------------
  ------------------
  517|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  518|     41|				"%s: Received Register message for destination address: %pPA that I do not own",
  519|     41|				__func__, &dest_addr);
  520|     41|		return 0;
  521|     41|	}
  522|       |
  523|     18|	++pim_ifp->pim_ifstat_reg_recv;
  524|       |
  525|       |	/*
  526|       |	 * Please note this is not drawn to get the correct bit/data size
  527|       |	 *
  528|       |	 * The entirety of the REGISTER packet looks like this:
  529|       |	 * -------------------------------------------------------------
  530|       |	 * | Ver  | Type | Reserved     |       Checksum               |
  531|       |	 * |-----------------------------------------------------------|
  532|       |	 * |B|N|     Reserved 2                                        |
  533|       |	 * |-----------------------------------------------------------|
  534|       |	 * | Encap  |                IP HDR                            |
  535|       |	 * | Mcast  |                                                  |
  536|       |	 * | Packet |--------------------------------------------------|
  537|       |	 * |        |               Mcast Data                         |
  538|       |	 * |        |                                                  |
  539|       |	 * ...
  540|       |	 *
  541|       |	 * tlv_buf when received from the caller points at the B bit
  542|       |	 * We need to know the inner source and dest
  543|       |	 */
  544|     18|	bits = (uint32_t *)tlv_buf;
  545|       |
  546|       |	/*
  547|       |	 * tlv_buf points to the start of the |B|N|... Reserved
  548|       |	 * Line above.  So we need to add 4 bytes to get to the
  549|       |	 * start of the actual Encapsulated data.
  550|       |	 */
  551|     18|	memset(&sg, 0, sizeof(sg));
  552|     18|	sg = pim_sgaddr_from_iphdr(ip_hdr);
  553|       |
  554|       |#if PIM_IPV == 6
  555|       |	/*
  556|       |	 * According to RFC section 4.9.3, If Dummy PIM Header is included
  557|       |	 * in NULL Register as a payload there would be two PIM headers.
  558|       |	 * The inner PIM Header's checksum field should also be validated
  559|       |	 * in addition to the outer PIM Header's checksum. Validation of
  560|       |	 * inner PIM header checksum is done here.
  561|       |	 */
  562|       |	if ((*bits & PIM_REGISTER_NR_BIT) &&
  563|       |	    ((tlv_buf_size - PIM_MSG_REGISTER_BIT_RESERVED_LEN) >
  564|       |	     (int)sizeof(struct ip6_hdr))) {
  565|       |		uint16_t computed_checksum;
  566|       |		uint16_t received_checksum;
  567|       |		struct ipv6_ph ph;
  568|       |		struct pim_msg_header *header;
  569|       |
  570|       |		header = (struct pim_msg_header
  571|       |				  *)(tlv_buf +
  572|       |				     PIM_MSG_REGISTER_BIT_RESERVED_LEN +
  573|       |				     sizeof(struct ip6_hdr));
  574|       |		ph.src = sg.src;
  575|       |		ph.dst = sg.grp;
  576|       |		ph.ulpl = htonl(PIM_MSG_HEADER_LEN);
  577|       |		ph.next_hdr = IPPROTO_PIM;
  578|       |
  579|       |		received_checksum = header->checksum;
  580|       |
  581|       |		header->checksum = 0;
  582|       |		computed_checksum = in_cksum_with_ph6(
  583|       |			&ph, header, htonl(PIM_MSG_HEADER_LEN));
  584|       |
  585|       |		if (computed_checksum != received_checksum) {
  586|       |			if (PIM_DEBUG_PIM_PACKETS)
  587|       |				zlog_debug(
  588|       |					"Ignoring Null Register message%pSG from %pPA due to bad checksum in Encapsulated dummy PIM header",
  589|       |					&sg, &src_addr);
  590|       |			return 0;
  591|       |		}
  592|       |	}
  593|       |#endif
  594|     18|	i_am_rp = I_am_RP(pim, sg.grp);
  ------------------
  |  |   66|     18|#define I_am_RP(P, G)  pim_rp_i_am_rp ((P), (G))
  ------------------
  595|       |
  596|     18|	if (PIM_DEBUG_PIM_REG)
  ------------------
  |  |  162|     18|#define PIM_DEBUG_PIM_REG (router->debugs & PIM_MASK_PIM_REG)
  |  |  ------------------
  |  |  |  |   90|     18|#define PIM_MASK_PIM_REG             (1 << 18)
  |  |  ------------------
  |  |  |  Branch (162:27): [True: 0, False: 18]
  |  |  ------------------
  ------------------
  597|      0|		zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  598|     18|			"Received Register message%pSG from %pPA on %s, rp: %d",
  599|     18|			&sg, &src_addr, ifp->name, i_am_rp);
  600|       |
  601|     18|	if (pim_is_grp_ssm(pim_ifp->pim, sg.grp)) {
  ------------------
  |  Branch (601:6): [True: 2, False: 16]
  ------------------
  602|      2|		if (pim_addr_is_any(sg.src)) {
  ------------------
  |  Branch (602:7): [True: 1, False: 1]
  ------------------
  603|      1|			zlog_warn(
  ------------------
  |  |  131|      1|#define zlog_warn(...) 0
  ------------------
  604|      1|				"%s: Received Register message for Group(%pPA) is now in SSM, dropping the packet",
  605|      1|				__func__, &sg.grp);
  606|       |			/* Drop Packet Silently */
  607|      1|			return 0;
  608|      1|		}
  609|      2|	}
  610|       |
  611|     17|	rpg = RP(pim, sg.grp);
  ------------------
  |  |   67|     17|#define RP(P, G)       pim_rp_g ((P), (G))
  ------------------
  612|     17|	if (!rpg) {
  ------------------
  |  Branch (612:6): [True: 11, False: 6]
  ------------------
  613|     11|		zlog_warn("%s: Received Register Message %pSG from %pPA on %s where the RP could not be looked up",
  ------------------
  |  |  131|     11|#define zlog_warn(...) 0
  ------------------
  614|     11|			  __func__, &sg, &src_addr, ifp->name);
  615|     11|		return 0;
  616|     11|	}
  617|       |
  618|      6|	rp_addr = rpg->rpf_addr;
  619|      6|	if (i_am_rp && (!pim_addr_cmp(dest_addr, rp_addr))) {
  ------------------
  |  Branch (619:6): [True: 0, False: 6]
  |  Branch (619:17): [True: 0, False: 0]
  ------------------
  620|      0|		sentRegisterStop = 0;
  621|       |
  622|      0|		if (pim->register_plist) {
  ------------------
  |  Branch (622:7): [True: 0, False: 0]
  ------------------
  623|      0|			struct prefix_list *plist;
  624|      0|			struct prefix src;
  625|       |
  626|      0|			plist = prefix_list_lookup(PIM_AFI,
  ------------------
  |  |   20|      0|#define PIM_AFI		AFI_IP
  ------------------
  627|      0|						   pim->register_plist);
  628|       |
  629|      0|			pim_addr_to_prefix(&src, sg.src);
  630|       |
  631|      0|			if (prefix_list_apply_ext(plist, NULL, &src, true) ==
  ------------------
  |  Branch (631:8): [True: 0, False: 0]
  ------------------
  632|      0|			    PREFIX_DENY) {
  633|      0|				pim_register_stop_send(ifp, &sg, dest_addr,
  634|      0|						       src_addr);
  635|      0|				if (PIM_DEBUG_PIM_PACKETS)
  ------------------
  |  |  140|      0|#define PIM_DEBUG_PIM_PACKETS (router->debugs & PIM_MASK_PIM_PACKETS)
  |  |  ------------------
  |  |  |  |   74|      0|#define PIM_MASK_PIM_PACKETS         (1 << 2)
  |  |  ------------------
  |  |  |  Branch (140:31): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  636|      0|					zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  637|      0|						"%s: Sending register-stop to %pPA for %pSG due to prefix-list denial, dropping packet",
  638|      0|						__func__, &src_addr, &sg);
  639|       |
  640|      0|				return 0;
  641|      0|			}
  642|      0|		}
  643|       |
  644|      0|		if (*bits & PIM_REGISTER_BORDER_BIT) {
  ------------------
  |  |   14|      0|#define PIM_REGISTER_BORDER_BIT 0x80000000
  ------------------
  |  Branch (644:7): [True: 0, False: 0]
  ------------------
  645|      0|			if (PIM_DEBUG_PIM_PACKETS)
  ------------------
  |  |  140|      0|#define PIM_DEBUG_PIM_PACKETS (router->debugs & PIM_MASK_PIM_PACKETS)
  |  |  ------------------
  |  |  |  |   74|      0|#define PIM_MASK_PIM_PACKETS         (1 << 2)
  |  |  ------------------
  |  |  |  Branch (140:31): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  646|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  647|      0|					"%s: Received Register message with Border bit set, ignoring",
  648|      0|					__func__);
  649|       |
  650|       |				/* Drop Packet Silently */
  651|      0|			return 0;
  652|      0|		}
  653|       |
  654|      0|		struct pim_upstream *upstream = pim_upstream_find(pim, &sg);
  655|       |		/*
  656|       |		 * If we don't have a place to send ignore the packet
  657|       |		 */
  658|      0|		if (!upstream) {
  ------------------
  |  Branch (658:7): [True: 0, False: 0]
  ------------------
  659|      0|			upstream = pim_upstream_add(
  660|      0|				pim, &sg, ifp,
  661|      0|				PIM_UPSTREAM_FLAG_MASK_SRC_STREAM, __func__,
  ------------------
  |  |   23|      0|#define PIM_UPSTREAM_FLAG_MASK_SRC_STREAM              (1 << 5)
  ------------------
  662|      0|				NULL);
  663|      0|			if (!upstream) {
  ------------------
  |  Branch (663:8): [True: 0, False: 0]
  ------------------
  664|      0|				zlog_warn("Failure to create upstream state");
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
  665|      0|				return 1;
  666|      0|			}
  667|       |
  668|      0|			upstream->upstream_register = src_addr;
  669|      0|		} else {
  670|       |			/*
  671|       |			 * If the FHR has set a very very fast register timer
  672|       |			 * there exists a possibility that the incoming NULL
  673|       |			 * register
  674|       |			 * is happening before we set the spt bit.  If so
  675|       |			 * Do a quick check to update the counters and
  676|       |			 * then set the spt bit as appropriate
  677|       |			 */
  678|      0|			if (upstream->sptbit != PIM_UPSTREAM_SPTBIT_TRUE) {
  ------------------
  |  Branch (678:8): [True: 0, False: 0]
  ------------------
  679|      0|				pim_mroute_update_counters(
  680|      0|					upstream->channel_oil);
  681|       |				/*
  682|       |				 * Have we seen packets?
  683|       |				 */
  684|      0|				if (upstream->channel_oil->cc.oldpktcnt
  ------------------
  |  Branch (684:9): [True: 0, False: 0]
  ------------------
  685|      0|				    < upstream->channel_oil->cc.pktcnt)
  686|      0|					pim_upstream_set_sptbit(
  687|      0|						upstream,
  688|      0|						upstream->rpf.source_nexthop
  689|      0|							.interface);
  690|      0|			}
  691|      0|		}
  692|       |
  693|      0|		if ((upstream->sptbit == PIM_UPSTREAM_SPTBIT_TRUE)
  ------------------
  |  Branch (693:7): [True: 0, False: 0]
  ------------------
  694|      0|		    || ((SwitchToSptDesiredOnRp(pim, &sg))
  ------------------
  |  |  375|      0|#define SwitchToSptDesiredOnRp(pim, sg) pim_upstream_switch_to_spt_desired_on_rp (pim, sg)
  ------------------
  |  Branch (694:11): [True: 0, False: 0]
  ------------------
  695|      0|			&& pim_upstream_inherited_olist(pim, upstream) == 0)) {
  ------------------
  |  Branch (695:7): [True: 0, False: 0]
  ------------------
  696|      0|			pim_register_stop_send(ifp, &sg, dest_addr, src_addr);
  697|      0|			sentRegisterStop = 1;
  698|      0|		} else {
  699|      0|			if (PIM_DEBUG_PIM_REG)
  ------------------
  |  |  162|      0|#define PIM_DEBUG_PIM_REG (router->debugs & PIM_MASK_PIM_REG)
  |  |  ------------------
  |  |  |  |   90|      0|#define PIM_MASK_PIM_REG             (1 << 18)
  |  |  ------------------
  |  |  |  Branch (162:27): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  700|      0|				zlog_debug("(%s) sptbit: %d", upstream->sg_str,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  701|      0|					   upstream->sptbit);
  702|      0|		}
  703|      0|		if ((upstream->sptbit == PIM_UPSTREAM_SPTBIT_TRUE)
  ------------------
  |  Branch (703:7): [True: 0, False: 0]
  ------------------
  704|      0|		    || (SwitchToSptDesiredOnRp(pim, &sg))) {
  ------------------
  |  |  375|      0|#define SwitchToSptDesiredOnRp(pim, sg) pim_upstream_switch_to_spt_desired_on_rp (pim, sg)
  ------------------
  |  Branch (704:10): [True: 0, False: 0]
  ------------------
  705|      0|			if (sentRegisterStop) {
  ------------------
  |  Branch (705:8): [True: 0, False: 0]
  ------------------
  706|      0|				pim_upstream_keep_alive_timer_start(
  707|      0|					upstream, pim->rp_keep_alive_time);
  708|      0|			} else {
  709|      0|				pim_upstream_keep_alive_timer_start(
  710|      0|					upstream, pim->keep_alive_time);
  711|      0|			}
  712|      0|		}
  713|       |
  714|      0|		if (!(upstream->sptbit == PIM_UPSTREAM_SPTBIT_TRUE)
  ------------------
  |  Branch (714:7): [True: 0, False: 0]
  ------------------
  715|      0|		    && !(*bits & PIM_REGISTER_NR_BIT)) {
  ------------------
  |  |   15|      0|#define PIM_REGISTER_NR_BIT     0x40000000
  ------------------
  |  Branch (715:10): [True: 0, False: 0]
  ------------------
  716|       |			// decapsulate and forward the iner packet to
  717|       |			// inherited_olist(S,G,rpt)
  718|       |			// This is taken care of by the kernel for us
  719|      0|		}
  720|      0|		pim_upstream_msdp_reg_timer_start(upstream);
  721|      6|	} else {
  722|      6|		if (PIM_DEBUG_PIM_REG) {
  ------------------
  |  |  162|      6|#define PIM_DEBUG_PIM_REG (router->debugs & PIM_MASK_PIM_REG)
  |  |  ------------------
  |  |  |  |   90|      6|#define PIM_MASK_PIM_REG             (1 << 18)
  |  |  ------------------
  |  |  |  Branch (162:27): [True: 0, False: 6]
  |  |  ------------------
  ------------------
  723|      0|			if (!i_am_rp)
  ------------------
  |  Branch (723:8): [True: 0, False: 0]
  ------------------
  724|      0|				zlog_debug("Received Register packet for %pSG, Rejecting packet because I am not the RP configured for group",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  725|      0|					   &sg);
  726|      0|			else
  727|      0|				zlog_debug("Received Register packet for %pSG, Rejecting packet because the dst ip address is not the actual RP",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  728|      0|					   &sg);
  729|      0|		}
  730|      6|		pim_register_stop_send(ifp, &sg, dest_addr, src_addr);
  731|      6|	}
  732|       |
  733|      6|	return 0;
  734|      6|}
pim_reg_del_on_couldreg_fail:
  741|      1|{
  742|      1|	struct pim_interface *pim_ifp = ifp->info;
  743|      1|	struct pim_instance *pim;
  744|      1|	struct pim_upstream *up;
  745|       |
  746|      1|	if (!pim_ifp)
  ------------------
  |  Branch (746:6): [True: 0, False: 1]
  ------------------
  747|      0|		return;
  748|       |
  749|      1|	pim = pim_ifp->pim;
  750|       |
  751|      1|	frr_each (rb_pim_upstream, &pim->upstream_head, up) {
  ------------------
  |  |   21|      1|	for (item = prefix##_first(head); item;                                \
  |  |  ------------------
  |  |  |  Branch (21:36): [True: 0, False: 1]
  |  |  ------------------
  |  |   22|      1|			item = prefix##_next(head, item))
  ------------------
  752|      0|		if (ifp != up->rpf.source_nexthop.interface)
  ------------------
  |  Branch (752:7): [True: 0, False: 0]
  ------------------
  753|      0|			continue;
  754|       |
  755|      0|		if (!pim_upstream_could_register(up)
  ------------------
  |  Branch (755:7): [True: 0, False: 0]
  ------------------
  756|      0|		    && (up->reg_state != PIM_REG_NOINFO)) {
  ------------------
  |  Branch (756:10): [True: 0, False: 0]
  ------------------
  757|      0|			pim_channel_del_oif(up->channel_oil, pim->regiface,
  758|      0|					    PIM_OIF_FLAG_PROTO_PIM, __func__);
  ------------------
  |  |   23|      0|#define PIM_OIF_FLAG_PROTO_PIM    (1 << 1)
  ------------------
  759|      0|			EVENT_OFF(up->t_rs_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]
  |  |  ------------------
  ------------------
  760|      0|			up->reg_state = PIM_REG_NOINFO;
  761|      0|		}
  762|      0|	}
  763|      1|}
pim_register.c:pim_reg_stop_upstream:
  103|    118|{
  104|    118|	switch (up->reg_state) {
  ------------------
  |  Branch (104:10): [True: 118, False: 0]
  ------------------
  105|    118|	case PIM_REG_NOINFO:
  ------------------
  |  Branch (105:2): [True: 118, False: 0]
  ------------------
  106|    118|	case PIM_REG_PRUNE:
  ------------------
  |  Branch (106:2): [True: 0, False: 118]
  ------------------
  107|    118|		return;
  108|      0|	case PIM_REG_JOIN:
  ------------------
  |  Branch (108:2): [True: 0, False: 118]
  ------------------
  109|      0|		up->reg_state = PIM_REG_PRUNE;
  110|      0|		pim_channel_del_oif(up->channel_oil, pim->regiface,
  111|      0|				    PIM_OIF_FLAG_PROTO_PIM, __func__);
  ------------------
  |  |   23|      0|#define PIM_OIF_FLAG_PROTO_PIM    (1 << 1)
  ------------------
  112|      0|		pim_upstream_start_register_stop_timer(up, 0);
  113|      0|		pim_vxlan_update_sg_reg_state(pim, up, false);
  114|      0|		break;
  115|      0|	case PIM_REG_JOIN_PENDING:
  ------------------
  |  Branch (115:2): [True: 0, False: 118]
  ------------------
  116|      0|		up->reg_state = PIM_REG_PRUNE;
  117|      0|		pim_upstream_start_register_stop_timer(up, 0);
  118|      0|		return;
  119|    118|	}
  120|    118|}

pim_route_map_init:
   32|      1|{
   33|      1|	route_map_init();
   34|       |
   35|      1|	route_map_add_hook(pim_route_map_add);
   36|      1|	route_map_delete_hook(pim_route_map_delete);
   37|      1|	route_map_event_hook(pim_route_map_event);
   38|      1|}

pim_rp_list_cmp:
   65|   626k|{
   66|   626k|	struct rp_info *rp1 = (struct rp_info *)v1;
   67|   626k|	struct rp_info *rp2 = (struct rp_info *)v2;
   68|   626k|	int ret;
   69|       |
   70|       |	/*
   71|       |	 * Sort by RP IP address
   72|       |	 */
   73|   626k|	ret = pim_addr_cmp(rp1->rp.rpf_addr, rp2->rp.rpf_addr);
   74|   626k|	if (ret)
  ------------------
  |  Branch (74:6): [True: 584k, False: 42.1k]
  ------------------
   75|   584k|		return ret;
   76|       |
   77|       |	/*
   78|       |	 * Sort by group IP address
   79|       |	 */
   80|  42.1k|	ret = prefix_cmp(&rp1->group, &rp2->group);
   81|  42.1k|	if (ret)
  ------------------
  |  Branch (81:6): [True: 42.1k, False: 0]
  ------------------
   82|  42.1k|		return ret;
   83|       |
   84|      0|	return 0;
   85|  42.1k|}
pim_rp_init:
   88|      1|{
   89|      1|	struct rp_info *rp_info;
   90|      1|	struct route_node *rn;
   91|       |
   92|      1|	pim->rp_list = list_new();
   93|      1|	pim->rp_list->del = (void (*)(void *))pim_rp_info_free;
   94|      1|	pim->rp_list->cmp = pim_rp_list_cmp;
   95|       |
   96|      1|	pim->rp_table = route_table_init();
   97|       |
   98|      1|	rp_info = XCALLOC(MTYPE_PIM_RP, sizeof(*rp_info));
  ------------------
  |  |  165|      1|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
   99|       |
  100|      1|	if (!pim_get_all_mcast_group(&rp_info->group)) {
  ------------------
  |  Branch (100:6): [True: 0, False: 1]
  ------------------
  101|      0|		flog_err(EC_LIB_DEVELOPMENT,
  ------------------
  |  |  136|      0|#define flog_err(ferr_id, format, ...) 0
  ------------------
  102|      0|			 "Unable to convert all-multicast prefix");
  103|      0|		list_delete(&pim->rp_list);
  104|      0|		route_table_finish(pim->rp_table);
  105|      0|		XFREE(MTYPE_PIM_RP, rp_info);
  ------------------
  |  |  170|      0|	do {                                                                   \
  |  |  171|      0|		qfree(mtype, ptr);                                             \
  |  |  172|      0|		ptr = NULL;                                                    \
  |  |  173|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  106|      0|		return;
  107|      0|	}
  108|      1|	rp_info->rp.rpf_addr = PIMADDR_ANY;
  ------------------
  |  |   79|      1|#define PIMADDR_ANY (pim_addr){ }
  ------------------
  109|       |
  110|      1|	listnode_add(pim->rp_list, rp_info);
  111|       |
  112|      1|	rn = route_node_get(pim->rp_table, &rp_info->group);
  113|      1|	rn->info = rp_info;
  114|      1|	if (PIM_DEBUG_PIM_TRACE)
  ------------------
  |  |  146|      1|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|      1|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|      1|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  115|      0|		zlog_debug("Allocated: %p for rp_info: %p(%pFX) Lock: %d", rn,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  116|      1|			   rp_info, &rp_info->group,
  117|      1|			   route_node_get_lock_count(rn));
  118|      1|}
pim_rp_find_match_group:
  210|  25.7M|{
  211|  25.7M|	struct listnode *node;
  212|  25.7M|	struct rp_info *best = NULL;
  213|  25.7M|	struct rp_info *rp_info;
  214|  25.7M|	struct prefix_list *plist;
  215|  25.7M|	const struct prefix *bp;
  216|  25.7M|	const struct prefix_list_entry *entry;
  217|  25.7M|	struct route_node *rn;
  218|       |
  219|  25.7M|	bp = NULL;
  220|  4.77G|	for (ALL_LIST_ELEMENTS_RO(pim->rp_list, node, rp_info)) {
  ------------------
  |  |  333|  25.7M|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|  25.7M|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 25.7M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|  9.54G|	(node) != NULL && ((data) = static_cast(data, listgetdata(node)), 1);  \
  |  |  ------------------
  |  |  |  |  204|  28.6G|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 4.77G, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 4.77G]
  |  |  |  |  |  Branch (204:28): [True: 4.77G, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 4.77G]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (334:2): [True: 4.77G, False: 25.7M]
  |  |  |  Branch (334:20): [True: 4.77G, False: 0]
  |  |  ------------------
  |  |  335|  4.77G|	(node) = listnextnode(node), ((data) = NULL)
  |  |  ------------------
  |  |  |  |   49|  4.77G|#define listnextnode(X) ((X) ? ((X)->next) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:26): [True: 4.77G, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  221|  4.77G|		if (rp_info->plist) {
  ------------------
  |  Branch (221:7): [True: 0, False: 4.77G]
  ------------------
  222|      0|			plist = prefix_list_lookup(PIM_AFI, rp_info->plist);
  ------------------
  |  |   20|      0|#define PIM_AFI		AFI_IP
  ------------------
  223|       |
  224|      0|			if (prefix_list_apply_ext(plist, &entry, group, true)
  ------------------
  |  Branch (224:8): [True: 0, False: 0]
  ------------------
  225|      0|			    == PREFIX_DENY || !entry)
  ------------------
  |  Branch (225:26): [True: 0, False: 0]
  ------------------
  226|      0|				continue;
  227|       |
  228|      0|			if (!best) {
  ------------------
  |  Branch (228:8): [True: 0, False: 0]
  ------------------
  229|      0|				best = rp_info;
  230|      0|				bp = &entry->prefix;
  231|      0|				continue;
  232|      0|			}
  233|       |
  234|      0|			if (bp && bp->prefixlen < entry->prefix.prefixlen) {
  ------------------
  |  Branch (234:8): [True: 0, False: 0]
  |  Branch (234:14): [True: 0, False: 0]
  ------------------
  235|      0|				best = rp_info;
  236|      0|				bp = &entry->prefix;
  237|      0|			}
  238|      0|		}
  239|  4.77G|	}
  240|       |
  241|  25.7M|	rn = route_node_match(pim->rp_table, group);
  242|  25.7M|	if (!rn) {
  ------------------
  |  Branch (242:6): [True: 13.4M, False: 12.3M]
  ------------------
  243|  13.4M|		flog_err(
  ------------------
  |  |  136|  13.4M|#define flog_err(ferr_id, format, ...) 0
  ------------------
  244|  13.4M|			EC_LIB_DEVELOPMENT,
  245|  13.4M|			"%s: BUG We should have found default group information",
  246|  13.4M|			__func__);
  247|  13.4M|		return best;
  248|  13.4M|	}
  249|       |
  250|  12.3M|	rp_info = rn->info;
  251|  12.3M|	if (PIM_DEBUG_PIM_TRACE) {
  ------------------
  |  |  146|  12.3M|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|  12.3M|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|  12.3M|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 12.3M]
  |  |  ------------------
  ------------------
  252|      0|		if (best)
  ------------------
  |  Branch (252:7): [True: 0, False: 0]
  ------------------
  253|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  254|      0|				"Lookedup(%pFX): prefix_list match %s, rn %p found: %pFX",
  255|      0|				group, best->plist, rn, &rp_info->group);
  256|      0|		else
  257|      0|			zlog_debug("Lookedup(%pFX): rn %p found:%pFX", group,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  258|      0|				   rn, &rp_info->group);
  259|      0|	}
  260|       |
  261|  12.3M|	route_unlock_node(rn);
  262|       |
  263|       |	/*
  264|       |	 * rp's with prefix lists have the group as 224.0.0.0/4 which will
  265|       |	 * match anything.  So if we have a rp_info that should match a prefix
  266|       |	 * list then if we do match then best should be the answer( even
  267|       |	 * if it is NULL )
  268|       |	 */
  269|  12.3M|	if (!rp_info || (rp_info && rp_info->plist))
  ------------------
  |  Branch (269:6): [True: 0, False: 12.3M]
  |  Branch (269:19): [True: 12.3M, False: 0]
  |  Branch (269:30): [True: 0, False: 12.3M]
  ------------------
  270|      0|		return best;
  271|       |
  272|       |	/*
  273|       |	 * So we have a non plist rp_info found in the lookup and no plists
  274|       |	 * at all to be choosen, return it!
  275|       |	 */
  276|  12.3M|	if (!best)
  ------------------
  |  Branch (276:6): [True: 12.3M, False: 0]
  ------------------
  277|  12.3M|		return rp_info;
  278|       |
  279|       |	/*
  280|       |	 * If we have a matching non prefix list and a matching prefix
  281|       |	 * list we should return the actual rp_info that has the LPM
  282|       |	 * If they are equal, use the prefix-list( but let's hope
  283|       |	 * the end-operator doesn't do this )
  284|       |	 */
  285|      0|	if (rp_info->group.prefixlen > bp->prefixlen)
  ------------------
  |  Branch (285:6): [True: 0, False: 0]
  ------------------
  286|      0|		best = rp_info;
  287|       |
  288|      0|	return best;
  289|  12.3M|}
pim_rp_refresh_group_to_rp_mapping:
  299|  26.8k|{
  300|  26.8k|	pim_msdp_i_am_rp_changed(pim);
  301|  26.8k|	pim_upstream_reeval_use_rpt(pim);
  302|  26.8k|}
pim_upstream_update:
  367|   125k|{
  368|   125k|	struct pim_rpf old_rpf;
  369|   125k|	enum pim_rpf_result rpf_result;
  370|   125k|	pim_addr old_upstream_addr;
  371|   125k|	pim_addr new_upstream_addr;
  372|       |
  373|   125k|	old_upstream_addr = up->upstream_addr;
  374|   125k|	pim_rp_set_upstream_addr(pim, &new_upstream_addr, up->sg.src,
  375|   125k|				 up->sg.grp);
  376|       |
  377|   125k|	if (PIM_DEBUG_PIM_TRACE)
  ------------------
  |  |  146|   125k|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|   125k|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|   125k|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 125k]
  |  |  ------------------
  ------------------
  378|      0|		zlog_debug("%s: pim upstream update for old upstream %pPA",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  379|   125k|			   __func__, &old_upstream_addr);
  380|       |
  381|   125k|	if (!pim_addr_cmp(old_upstream_addr, new_upstream_addr))
  ------------------
  |  Branch (381:6): [True: 89.4k, False: 35.6k]
  ------------------
  382|  89.4k|		return;
  383|       |
  384|       |	/* Lets consider a case, where a PIM upstream has a better RP as a
  385|       |	 * result of a new RP configuration with more precise group range.
  386|       |	 * This upstream has to be added to the upstream hash of new RP's
  387|       |	 * NHT(pnc) and has to be removed from old RP's NHT upstream hash
  388|       |	 */
  389|  35.6k|	if (!pim_addr_is_any(old_upstream_addr)) {
  ------------------
  |  Branch (389:6): [True: 26.9k, False: 8.62k]
  ------------------
  390|       |		/* Deregister addr with Zebra NHT */
  391|  26.9k|		if (PIM_DEBUG_PIM_TRACE)
  ------------------
  |  |  146|  26.9k|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|  26.9k|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|  26.9k|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 26.9k]
  |  |  ------------------
  ------------------
  392|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  393|  26.9k|				"%s: Deregister upstream %s addr %pPA with Zebra NHT",
  394|  26.9k|				__func__, up->sg_str, &old_upstream_addr);
  395|  26.9k|		pim_delete_tracked_nexthop(pim, old_upstream_addr, up, NULL);
  396|  26.9k|	}
  397|       |
  398|       |	/* Update the upstream address */
  399|  35.6k|	up->upstream_addr = new_upstream_addr;
  400|       |
  401|  35.6k|	old_rpf.source_nexthop.interface = up->rpf.source_nexthop.interface;
  402|       |
  403|  35.6k|	rpf_result = pim_rpf_update(pim, up, &old_rpf, __func__);
  404|  35.6k|	if (rpf_result == PIM_RPF_FAILURE)
  ------------------
  |  Branch (404:6): [True: 35.0k, False: 544]
  ------------------
  405|  35.0k|		pim_mroute_del(up->channel_oil, __func__);
  406|       |
  407|       |	/* update kernel multicast forwarding cache (MFC) */
  408|  35.6k|	if (up->rpf.source_nexthop.interface && up->channel_oil)
  ------------------
  |  Branch (408:6): [True: 0, False: 35.6k]
  |  Branch (408:42): [True: 0, False: 0]
  ------------------
  409|      0|		pim_upstream_mroute_iif_update(up->channel_oil, __func__);
  410|       |
  411|  35.6k|	if (rpf_result == PIM_RPF_CHANGED ||
  ------------------
  |  Branch (411:6): [True: 0, False: 35.6k]
  ------------------
  412|  35.6k|			(rpf_result == PIM_RPF_FAILURE &&
  ------------------
  |  Branch (412:5): [True: 35.0k, False: 544]
  ------------------
  413|  35.0k|			 old_rpf.source_nexthop.interface))
  ------------------
  |  Branch (413:5): [True: 0, False: 35.0k]
  ------------------
  414|      0|		pim_zebra_upstream_rpf_changed(pim, up, &old_rpf);
  415|       |
  416|  35.6k|}
pim_rp_new:
  420|  29.2k|{
  421|  29.2k|	int result = 0;
  422|  29.2k|	struct rp_info *rp_info;
  423|  29.2k|	struct rp_info *rp_all;
  424|  29.2k|	struct prefix group_all;
  425|  29.2k|	struct listnode *node, *nnode;
  426|  29.2k|	struct rp_info *tmp_rp_info;
  427|  29.2k|	char buffer[BUFSIZ];
  428|  29.2k|	pim_addr nht_p;
  429|  29.2k|	struct route_node *rn = NULL;
  430|  29.2k|	struct pim_upstream *up;
  431|  29.2k|	bool upstream_updated = false;
  432|       |
  433|  29.2k|	if (pim_addr_is_any(rp_addr))
  ------------------
  |  Branch (433:6): [True: 3.42k, False: 25.8k]
  ------------------
  434|  3.42k|		return PIM_RP_BAD_ADDRESS;
  ------------------
  |  |  108|  3.42k|#define PIM_RP_BAD_ADDRESS              -5
  ------------------
  435|       |
  436|  25.8k|	rp_info = XCALLOC(MTYPE_PIM_RP, sizeof(*rp_info));
  ------------------
  |  |  165|  25.8k|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  437|       |
  438|  25.8k|	rp_info->rp.rpf_addr = rp_addr;
  439|  25.8k|	prefix_copy(&rp_info->group, &group);
  440|  25.8k|	rp_info->rp_src = rp_src_flag;
  441|       |
  442|  25.8k|	if (plist) {
  ------------------
  |  Branch (442:6): [True: 0, False: 25.8k]
  ------------------
  443|       |		/*
  444|       |		 * Return if the prefix-list is already configured for this RP
  445|       |		 */
  446|      0|		if (pim_rp_find_prefix_list(pim, rp_addr, plist)) {
  ------------------
  |  Branch (446:7): [True: 0, False: 0]
  ------------------
  447|      0|			XFREE(MTYPE_PIM_RP, rp_info);
  ------------------
  |  |  170|      0|	do {                                                                   \
  |  |  171|      0|		qfree(mtype, ptr);                                             \
  |  |  172|      0|		ptr = NULL;                                                    \
  |  |  173|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  448|      0|			return PIM_SUCCESS;
  ------------------
  |  |  104|      0|#define PIM_SUCCESS                      0
  ------------------
  449|      0|		}
  450|       |
  451|       |		/*
  452|       |		 * Barf if the prefix-list is already configured for an RP
  453|       |		 */
  454|      0|		if (pim_rp_prefix_list_used(pim, plist)) {
  ------------------
  |  Branch (454:7): [True: 0, False: 0]
  ------------------
  455|      0|			XFREE(MTYPE_PIM_RP, rp_info);
  ------------------
  |  |  170|      0|	do {                                                                   \
  |  |  171|      0|		qfree(mtype, ptr);                                             \
  |  |  172|      0|		ptr = NULL;                                                    \
  |  |  173|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  456|      0|			return PIM_RP_PFXLIST_IN_USE;
  ------------------
  |  |  111|      0|#define PIM_RP_PFXLIST_IN_USE           -8
  ------------------
  457|      0|		}
  458|       |
  459|       |		/*
  460|       |		 * Free any existing rp_info entries for this RP
  461|       |		 */
  462|      0|		for (ALL_LIST_ELEMENTS(pim->rp_list, node, nnode,
  ------------------
  |  |  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)
  ------------------
  463|      0|				       tmp_rp_info)) {
  464|      0|			if (!pim_addr_cmp(rp_info->rp.rpf_addr,
  ------------------
  |  Branch (464:8): [True: 0, False: 0]
  ------------------
  465|      0|					  tmp_rp_info->rp.rpf_addr)) {
  466|      0|				if (tmp_rp_info->plist)
  ------------------
  |  Branch (466:9): [True: 0, False: 0]
  ------------------
  467|      0|					pim_rp_del_config(pim, rp_addr, NULL,
  468|      0|							  tmp_rp_info->plist);
  469|      0|				else
  470|      0|					pim_rp_del_config(
  471|      0|						pim, rp_addr,
  472|      0|						prefix2str(&tmp_rp_info->group,
  473|      0|							   buffer, BUFSIZ),
  474|      0|						NULL);
  475|      0|			}
  476|      0|		}
  477|       |
  478|      0|		rp_info->plist = XSTRDUP(MTYPE_PIM_FILTER_NAME, plist);
  ------------------
  |  |  167|      0|#define XSTRDUP(mtype, str)		qstrdup(mtype, str)
  ------------------
  479|  25.8k|	} else {
  480|       |
  481|  25.8k|		if (!pim_get_all_mcast_group(&group_all)) {
  ------------------
  |  Branch (481:7): [True: 0, False: 25.8k]
  ------------------
  482|      0|			XFREE(MTYPE_PIM_RP, rp_info);
  ------------------
  |  |  170|      0|	do {                                                                   \
  |  |  171|      0|		qfree(mtype, ptr);                                             \
  |  |  172|      0|		ptr = NULL;                                                    \
  |  |  173|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  483|      0|			return PIM_GROUP_BAD_ADDRESS;
  ------------------
  |  |  105|      0|#define PIM_GROUP_BAD_ADDRESS           -2
  ------------------
  484|      0|		}
  485|  25.8k|		rp_all = pim_rp_find_match_group(pim, &group_all);
  486|       |
  487|       |		/*
  488|       |		 * Barf if group is a non-multicast subnet
  489|       |		 */
  490|  25.8k|		if (!prefix_match(&rp_all->group, &rp_info->group)) {
  ------------------
  |  Branch (490:7): [True: 7.54k, False: 18.2k]
  ------------------
  491|  7.54k|			XFREE(MTYPE_PIM_RP, rp_info);
  ------------------
  |  |  170|  7.54k|	do {                                                                   \
  |  |  171|  7.54k|		qfree(mtype, ptr);                                             \
  |  |  172|  7.54k|		ptr = NULL;                                                    \
  |  |  173|  7.54k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 7.54k]
  |  |  ------------------
  ------------------
  492|  7.54k|			return PIM_GROUP_BAD_ADDRESS;
  ------------------
  |  |  105|  7.54k|#define PIM_GROUP_BAD_ADDRESS           -2
  ------------------
  493|  7.54k|		}
  494|       |
  495|       |		/*
  496|       |		 * Remove any prefix-list rp_info entries for this RP
  497|       |		 */
  498|  18.2k|		for (ALL_LIST_ELEMENTS(pim->rp_list, node, nnode,
  ------------------
  |  |  320|  18.2k|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|  18.2k|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 18.2k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  321|  3.36M|	(node) != NULL                                                         \
  |  |  ------------------
  |  |  |  Branch (321:2): [True: 3.34M, False: 18.2k]
  |  |  ------------------
  |  |  322|  6.69M|		&& ((data) = static_cast(data, listgetdata(node)),             \
  |  |  ------------------
  |  |  |  |  204|  20.0M|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 3.34M, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 3.34M]
  |  |  |  |  |  Branch (204:28): [True: 3.34M, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 3.34M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (322:6): [True: 3.34M, False: 0]
  |  |  ------------------
  |  |  323|  6.69M|		    (nextnode) = node->next, 1);                               \
  |  |  324|  3.34M|	(node) = (nextnode), ((data) = NULL)
  ------------------
  499|  3.34M|				       tmp_rp_info)) {
  500|  3.34M|			if (tmp_rp_info->plist &&
  ------------------
  |  Branch (500:8): [True: 0, False: 3.34M]
  ------------------
  501|      0|			    (!pim_addr_cmp(rp_info->rp.rpf_addr,
  ------------------
  |  Branch (501:8): [True: 0, False: 0]
  ------------------
  502|      0|					   tmp_rp_info->rp.rpf_addr))) {
  503|      0|				pim_rp_del_config(pim, rp_addr, NULL,
  504|      0|						  tmp_rp_info->plist);
  505|      0|			}
  506|  3.34M|		}
  507|       |
  508|       |		/*
  509|       |		 * Take over the 224.0.0.0/4 group if the rp is INADDR_ANY
  510|       |		 */
  511|  18.2k|		if (prefix_same(&rp_all->group, &rp_info->group) &&
  ------------------
  |  Branch (511:7): [True: 9.52k, False: 8.76k]
  ------------------
  512|  9.52k|		    pim_rpf_addr_is_inaddr_any(&rp_all->rp)) {
  ------------------
  |  Branch (512:7): [True: 9.52k, False: 0]
  ------------------
  513|  9.52k|			rp_all->rp.rpf_addr = rp_info->rp.rpf_addr;
  514|  9.52k|			rp_all->rp_src = rp_src_flag;
  515|  9.52k|			XFREE(MTYPE_PIM_RP, rp_info);
  ------------------
  |  |  170|  9.52k|	do {                                                                   \
  |  |  171|  9.52k|		qfree(mtype, ptr);                                             \
  |  |  172|  9.52k|		ptr = NULL;                                                    \
  |  |  173|  9.52k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 9.52k]
  |  |  ------------------
  ------------------
  516|       |
  517|       |			/* Register addr with Zebra NHT */
  518|  9.52k|			nht_p = rp_all->rp.rpf_addr;
  519|  9.52k|			if (PIM_DEBUG_PIM_NHT_RP)
  ------------------
  |  |  169|  9.52k|#define PIM_DEBUG_PIM_NHT_RP (router->debugs & PIM_MASK_PIM_NHT_RP)
  |  |  ------------------
  |  |  |  |   96|  9.52k|#define PIM_MASK_PIM_NHT_RP          (1 << 24)
  |  |  ------------------
  |  |  |  Branch (169:30): [True: 0, False: 9.52k]
  |  |  ------------------
  ------------------
  520|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  521|  9.52k|					"%s: NHT Register rp_all addr %pPA grp %pFX ",
  522|  9.52k|					__func__, &nht_p, &rp_all->group);
  523|       |
  524|  6.29M|			frr_each (rb_pim_upstream, &pim->upstream_head, up) {
  ------------------
  |  |   21|  6.30M|	for (item = prefix##_first(head); item;                                \
  |  |  ------------------
  |  |  |  Branch (21:36): [True: 6.29M, False: 9.52k]
  |  |  ------------------
  |  |   22|  6.29M|			item = prefix##_next(head, item))
  ------------------
  525|       |				/* Find (*, G) upstream whose RP is not
  526|       |				 * configured yet
  527|       |				 */
  528|  6.29M|				if (pim_addr_is_any(up->upstream_addr) &&
  ------------------
  |  Branch (528:9): [True: 3.21M, False: 3.08M]
  ------------------
  529|  3.21M|				    pim_addr_is_any(up->sg.src)) {
  ------------------
  |  Branch (529:9): [True: 847k, False: 2.37M]
  ------------------
  530|   847k|					struct prefix grp;
  531|   847k|					struct rp_info *trp_info;
  532|       |
  533|   847k|					pim_addr_to_prefix(&grp, up->sg.grp);
  534|   847k|					trp_info = pim_rp_find_match_group(
  535|   847k|						pim, &grp);
  536|   847k|					if (trp_info == rp_all) {
  ------------------
  |  Branch (536:10): [True: 4.45k, False: 843k]
  ------------------
  537|  4.45k|						pim_upstream_update(pim, up);
  538|  4.45k|						upstream_updated = true;
  539|  4.45k|					}
  540|   847k|				}
  541|  6.29M|			}
  542|  9.52k|			if (upstream_updated)
  ------------------
  |  Branch (542:8): [True: 437, False: 9.08k]
  ------------------
  543|    437|				pim_zebra_update_all_interfaces(pim);
  544|       |
  545|  9.52k|			pim_rp_check_interfaces(pim, rp_all);
  546|  9.52k|			pim_rp_refresh_group_to_rp_mapping(pim);
  547|  9.52k|			pim_find_or_track_nexthop(pim, nht_p, NULL, rp_all,
  548|  9.52k|						  NULL);
  549|       |
  550|  9.52k|			if (!pim_ecmp_nexthop_lookup(pim,
  ------------------
  |  Branch (550:8): [True: 9.52k, False: 0]
  ------------------
  551|  9.52k|						     &rp_all->rp.source_nexthop,
  552|  9.52k|						     nht_p, &rp_all->group, 1))
  553|  9.52k|				return PIM_RP_NO_PATH;
  ------------------
  |  |  109|  9.52k|#define PIM_RP_NO_PATH                  -6
  ------------------
  554|      0|			return PIM_SUCCESS;
  ------------------
  |  |  104|      0|#define PIM_SUCCESS                      0
  ------------------
  555|  9.52k|		}
  556|       |
  557|       |		/*
  558|       |		 * Return if the group is already configured for this RP
  559|       |		 */
  560|  8.76k|		tmp_rp_info = pim_rp_find_exact(pim, rp_addr, &rp_info->group);
  561|  8.76k|		if (tmp_rp_info) {
  ------------------
  |  Branch (561:7): [True: 0, False: 8.76k]
  ------------------
  562|      0|			if ((tmp_rp_info->rp_src != rp_src_flag)
  ------------------
  |  Branch (562:8): [True: 0, False: 0]
  ------------------
  563|      0|			    && (rp_src_flag == RP_SRC_STATIC))
  ------------------
  |  Branch (563:11): [True: 0, False: 0]
  ------------------
  564|      0|				tmp_rp_info->rp_src = rp_src_flag;
  565|      0|			XFREE(MTYPE_PIM_RP, rp_info);
  ------------------
  |  |  170|      0|	do {                                                                   \
  |  |  171|      0|		qfree(mtype, ptr);                                             \
  |  |  172|      0|		ptr = NULL;                                                    \
  |  |  173|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  566|      0|			return result;
  567|      0|		}
  568|       |
  569|       |		/*
  570|       |		 * Barf if this group is already covered by some other RP
  571|       |		 */
  572|  8.76k|		tmp_rp_info = pim_rp_find_match_group(pim, &rp_info->group);
  573|       |
  574|  8.76k|		if (tmp_rp_info) {
  ------------------
  |  Branch (574:7): [True: 8.76k, False: 0]
  ------------------
  575|  8.76k|			if (tmp_rp_info->plist) {
  ------------------
  |  Branch (575:8): [True: 0, False: 8.76k]
  ------------------
  576|      0|				XFREE(MTYPE_PIM_RP, rp_info);
  ------------------
  |  |  170|      0|	do {                                                                   \
  |  |  171|      0|		qfree(mtype, ptr);                                             \
  |  |  172|      0|		ptr = NULL;                                                    \
  |  |  173|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  577|      0|				return PIM_GROUP_PFXLIST_OVERLAP;
  ------------------
  |  |  107|      0|#define PIM_GROUP_PFXLIST_OVERLAP       -4
  ------------------
  578|  8.76k|			} else {
  579|       |				/*
  580|       |				 * If the only RP that covers this group is an
  581|       |				 * RP configured for
  582|       |				 * 224.0.0.0/4 that is fine, ignore that one.
  583|       |				 * For all others
  584|       |				 * though we must return PIM_GROUP_OVERLAP
  585|       |				 */
  586|  8.76k|				if (prefix_same(&rp_info->group,
  ------------------
  |  Branch (586:9): [True: 0, False: 8.76k]
  ------------------
  587|  8.76k|						&tmp_rp_info->group)) {
  588|      0|					if ((rp_src_flag == RP_SRC_STATIC)
  ------------------
  |  Branch (588:10): [True: 0, False: 0]
  ------------------
  589|      0|					    && (tmp_rp_info->rp_src
  ------------------
  |  Branch (589:13): [True: 0, False: 0]
  ------------------
  590|      0|						== RP_SRC_STATIC)) {
  591|      0|						XFREE(MTYPE_PIM_RP, rp_info);
  ------------------
  |  |  170|      0|	do {                                                                   \
  |  |  171|      0|		qfree(mtype, ptr);                                             \
  |  |  172|      0|		ptr = NULL;                                                    \
  |  |  173|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  592|      0|						return PIM_GROUP_OVERLAP;
  ------------------
  |  |  106|      0|#define PIM_GROUP_OVERLAP               -3
  ------------------
  593|      0|					}
  594|       |
  595|      0|					result = pim_rp_change(
  596|      0|						pim, rp_addr,
  597|      0|						tmp_rp_info->group,
  598|      0|						rp_src_flag);
  599|      0|					XFREE(MTYPE_PIM_RP, rp_info);
  ------------------
  |  |  170|      0|	do {                                                                   \
  |  |  171|      0|		qfree(mtype, ptr);                                             \
  |  |  172|      0|		ptr = NULL;                                                    \
  |  |  173|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  600|      0|					return result;
  601|      0|				}
  602|  8.76k|			}
  603|  8.76k|		}
  604|  8.76k|	}
  605|       |
  606|  8.76k|	listnode_add_sort(pim->rp_list, rp_info);
  607|       |
  608|  8.76k|	if (!rp_info->plist) {
  ------------------
  |  Branch (608:6): [True: 8.76k, False: 0]
  ------------------
  609|  8.76k|		rn = route_node_get(pim->rp_table, &rp_info->group);
  610|  8.76k|		rn->info = rp_info;
  611|  8.76k|	}
  612|       |
  613|  8.76k|	if (PIM_DEBUG_PIM_TRACE)
  ------------------
  |  |  146|  8.76k|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|  8.76k|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|  8.76k|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 8.76k]
  |  |  ------------------
  ------------------
  614|      0|		zlog_debug("Allocated: %p for rp_info: %p(%pFX) Lock: %d", rn,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  615|  8.76k|			   rp_info, &rp_info->group,
  616|  8.76k|			   rn ? route_node_get_lock_count(rn) : 0);
  617|       |
  618|  5.60M|	frr_each (rb_pim_upstream, &pim->upstream_head, up) {
  ------------------
  |  |   21|  5.61M|	for (item = prefix##_first(head); item;                                \
  |  |  ------------------
  |  |  |  Branch (21:36): [True: 5.60M, False: 8.76k]
  |  |  ------------------
  |  |   22|  5.60M|			item = prefix##_next(head, item))
  ------------------
  619|  5.60M|		if (pim_addr_is_any(up->sg.src)) {
  ------------------
  |  Branch (619:7): [True: 1.44M, False: 4.16M]
  ------------------
  620|  1.44M|			struct prefix grp;
  621|  1.44M|			struct rp_info *trp_info;
  622|       |
  623|  1.44M|			pim_addr_to_prefix(&grp, up->sg.grp);
  624|  1.44M|			trp_info = pim_rp_find_match_group(pim, &grp);
  625|       |
  626|  1.44M|			if (trp_info == rp_info) {
  ------------------
  |  Branch (626:8): [True: 6.13k, False: 1.43M]
  ------------------
  627|  6.13k|				pim_upstream_update(pim, up);
  628|  6.13k|				upstream_updated = true;
  629|  6.13k|			}
  630|  1.44M|		}
  631|  5.60M|	}
  632|       |
  633|  8.76k|	if (upstream_updated)
  ------------------
  |  Branch (633:6): [True: 5.52k, False: 3.23k]
  ------------------
  634|  5.52k|		pim_zebra_update_all_interfaces(pim);
  635|       |
  636|  8.76k|	pim_rp_check_interfaces(pim, rp_info);
  637|  8.76k|	pim_rp_refresh_group_to_rp_mapping(pim);
  638|       |
  639|       |	/* Register addr with Zebra NHT */
  640|  8.76k|	nht_p = rp_info->rp.rpf_addr;
  641|  8.76k|	if (PIM_DEBUG_PIM_NHT_RP)
  ------------------
  |  |  169|  8.76k|#define PIM_DEBUG_PIM_NHT_RP (router->debugs & PIM_MASK_PIM_NHT_RP)
  |  |  ------------------
  |  |  |  |   96|  8.76k|#define PIM_MASK_PIM_NHT_RP          (1 << 24)
  |  |  ------------------
  |  |  |  Branch (169:30): [True: 0, False: 8.76k]
  |  |  ------------------
  ------------------
  642|      0|		zlog_debug("%s: NHT Register RP addr %pPA grp %pFX with Zebra ",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  643|  8.76k|			   __func__, &nht_p, &rp_info->group);
  644|  8.76k|	pim_find_or_track_nexthop(pim, nht_p, NULL, rp_info, NULL);
  645|  8.76k|	if (!pim_ecmp_nexthop_lookup(pim, &rp_info->rp.source_nexthop, nht_p,
  ------------------
  |  Branch (645:6): [True: 8.76k, False: 0]
  ------------------
  646|  8.76k|				     &rp_info->group, 1))
  647|  8.76k|		return PIM_RP_NO_PATH;
  ------------------
  |  |  109|  8.76k|#define PIM_RP_NO_PATH                  -6
  ------------------
  648|       |
  649|      0|	return PIM_SUCCESS;
  ------------------
  |  |  104|      0|#define PIM_SUCCESS                      0
  ------------------
  650|  8.76k|}
pim_rp_del:
  676|  20.6k|{
  677|  20.6k|	struct prefix g_all;
  678|  20.6k|	struct rp_info *rp_info;
  679|  20.6k|	struct rp_info *rp_all;
  680|  20.6k|	pim_addr nht_p;
  681|  20.6k|	struct route_node *rn;
  682|  20.6k|	bool was_plist = false;
  683|  20.6k|	struct rp_info *trp_info;
  684|  20.6k|	struct pim_upstream *up;
  685|  20.6k|	struct bsgrp_node *bsgrp = NULL;
  686|  20.6k|	struct bsm_rpinfo *bsrp = NULL;
  687|  20.6k|	bool upstream_updated = false;
  688|       |
  689|  20.6k|	if (plist)
  ------------------
  |  Branch (689:6): [True: 0, False: 20.6k]
  ------------------
  690|      0|		rp_info = pim_rp_find_prefix_list(pim, rp_addr, plist);
  691|  20.6k|	else
  692|  20.6k|		rp_info = pim_rp_find_exact(pim, rp_addr, &group);
  693|       |
  694|  20.6k|	if (!rp_info)
  ------------------
  |  Branch (694:6): [True: 7.05k, False: 13.5k]
  ------------------
  695|  7.05k|		return PIM_RP_NOT_FOUND;
  ------------------
  |  |  110|  7.05k|#define PIM_RP_NOT_FOUND                -7
  ------------------
  696|       |
  697|  13.5k|	if (rp_info->plist) {
  ------------------
  |  Branch (697:6): [True: 0, False: 13.5k]
  ------------------
  698|      0|		XFREE(MTYPE_PIM_FILTER_NAME, rp_info->plist);
  ------------------
  |  |  170|      0|	do {                                                                   \
  |  |  171|      0|		qfree(mtype, ptr);                                             \
  |  |  172|      0|		ptr = NULL;                                                    \
  |  |  173|      0|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  699|      0|		was_plist = true;
  700|      0|	}
  701|       |
  702|  13.5k|	if (PIM_DEBUG_PIM_TRACE)
  ------------------
  |  |  146|  13.5k|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|  13.5k|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|  13.5k|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 13.5k]
  |  |  ------------------
  ------------------
  703|      0|		zlog_debug("%s: Delete RP %pPA for the group %pFX", __func__,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  704|  13.5k|			   &rp_addr, &group);
  705|       |
  706|       |	/* While static RP is getting deleted, we need to check if dynamic RP
  707|       |	 * present for the same group in BSM RP table, then install the dynamic
  708|       |	 * RP for the group node into the main rp table
  709|       |	 */
  710|  13.5k|	if (rp_src_flag == RP_SRC_STATIC) {
  ------------------
  |  Branch (710:6): [True: 0, False: 13.5k]
  ------------------
  711|      0|		bsgrp = pim_bsm_get_bsgrp_node(&pim->global_scope, &group);
  712|       |
  713|      0|		if (bsgrp) {
  ------------------
  |  Branch (713:7): [True: 0, False: 0]
  ------------------
  714|      0|			bsrp = bsm_rpinfos_first(bsgrp->bsrp_list);
  715|      0|			if (bsrp) {
  ------------------
  |  Branch (715:8): [True: 0, False: 0]
  ------------------
  716|      0|				if (PIM_DEBUG_PIM_TRACE)
  ------------------
  |  |  146|      0|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|      0|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|      0|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  717|      0|					zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  718|      0|						"%s: BSM RP %pPA found for the group %pFX",
  719|      0|						__func__, &bsrp->rp_address,
  720|      0|						&group);
  721|      0|				return pim_rp_change(pim, bsrp->rp_address,
  722|      0|						     group, RP_SRC_BSR);
  723|      0|			}
  724|      0|		} else {
  725|      0|			if (PIM_DEBUG_PIM_TRACE)
  ------------------
  |  |  146|      0|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|      0|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|      0|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  726|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  727|      0|					"%s: BSM RP not found for the group %pFX",
  728|      0|					__func__, &group);
  729|      0|		}
  730|      0|	}
  731|       |
  732|       |	/* Deregister addr with Zebra NHT */
  733|  13.5k|	nht_p = rp_info->rp.rpf_addr;
  734|  13.5k|	if (PIM_DEBUG_PIM_NHT_RP)
  ------------------
  |  |  169|  13.5k|#define PIM_DEBUG_PIM_NHT_RP (router->debugs & PIM_MASK_PIM_NHT_RP)
  |  |  ------------------
  |  |  |  |   96|  13.5k|#define PIM_MASK_PIM_NHT_RP          (1 << 24)
  |  |  ------------------
  |  |  |  Branch (169:30): [True: 0, False: 13.5k]
  |  |  ------------------
  ------------------
  735|      0|		zlog_debug("%s: Deregister RP addr %pPA with Zebra ", __func__,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  736|  13.5k|			   &nht_p);
  737|  13.5k|	pim_delete_tracked_nexthop(pim, nht_p, NULL, rp_info);
  738|       |
  739|  13.5k|	if (!pim_get_all_mcast_group(&g_all))
  ------------------
  |  Branch (739:6): [True: 0, False: 13.5k]
  ------------------
  740|      0|		return PIM_RP_BAD_ADDRESS;
  ------------------
  |  |  108|      0|#define PIM_RP_BAD_ADDRESS              -5
  ------------------
  741|       |
  742|  13.5k|	rp_all = pim_rp_find_match_group(pim, &g_all);
  743|       |
  744|  13.5k|	if (rp_all == rp_info) {
  ------------------
  |  Branch (744:6): [True: 5.00k, False: 8.56k]
  ------------------
  745|  3.24M|		frr_each (rb_pim_upstream, &pim->upstream_head, up) {
  ------------------
  |  |   21|  3.25M|	for (item = prefix##_first(head); item;                                \
  |  |  ------------------
  |  |  |  Branch (21:36): [True: 3.24M, False: 5.00k]
  |  |  ------------------
  |  |   22|  3.24M|			item = prefix##_next(head, item))
  ------------------
  746|       |			/* Find the upstream (*, G) whose upstream address is
  747|       |			 * same as the deleted RP
  748|       |			 */
  749|  3.24M|			pim_addr rpf_addr;
  750|       |
  751|  3.24M|			rpf_addr = rp_info->rp.rpf_addr;
  752|  3.24M|			if (!pim_addr_cmp(up->upstream_addr, rpf_addr) &&
  ------------------
  |  Branch (752:8): [True: 158k, False: 3.08M]
  ------------------
  753|   158k|			    pim_addr_is_any(up->sg.src)) {
  ------------------
  |  Branch (753:8): [True: 46.1k, False: 112k]
  ------------------
  754|  46.1k|				struct prefix grp;
  755|       |
  756|  46.1k|				pim_addr_to_prefix(&grp, up->sg.grp);
  757|  46.1k|				trp_info = pim_rp_find_match_group(pim, &grp);
  758|  46.1k|				if (trp_info == rp_all) {
  ------------------
  |  Branch (758:9): [True: 4.88k, False: 41.2k]
  ------------------
  759|  4.88k|					pim_upstream_rpf_clear(pim, up);
  760|  4.88k|					up->upstream_addr = PIMADDR_ANY;
  ------------------
  |  |   79|  4.88k|#define PIMADDR_ANY (pim_addr){ }
  ------------------
  761|  4.88k|				}
  762|  46.1k|			}
  763|  3.24M|		}
  764|  5.00k|		rp_all->rp.rpf_addr = PIMADDR_ANY;
  ------------------
  |  |   79|  5.00k|#define PIMADDR_ANY (pim_addr){ }
  ------------------
  765|  5.00k|		rp_all->i_am_rp = 0;
  766|  5.00k|		return PIM_SUCCESS;
  ------------------
  |  |  104|  5.00k|#define PIM_SUCCESS                      0
  ------------------
  767|  5.00k|	}
  768|       |
  769|  8.56k|	listnode_delete(pim->rp_list, rp_info);
  770|       |
  771|  8.56k|	if (!was_plist) {
  ------------------
  |  Branch (771:6): [True: 8.56k, False: 0]
  ------------------
  772|  8.56k|		rn = route_node_get(pim->rp_table, &rp_info->group);
  773|  8.56k|		if (rn) {
  ------------------
  |  Branch (773:7): [True: 8.56k, False: 0]
  ------------------
  774|  8.56k|			if (rn->info != rp_info)
  ------------------
  |  Branch (774:8): [True: 0, False: 8.56k]
  ------------------
  775|      0|				flog_err(
  ------------------
  |  |  136|      0|#define flog_err(ferr_id, format, ...) 0
  ------------------
  776|  8.56k|					EC_LIB_DEVELOPMENT,
  777|  8.56k|					"Expected rn->info to be equal to rp_info");
  778|       |
  779|  8.56k|			if (PIM_DEBUG_PIM_TRACE)
  ------------------
  |  |  146|  8.56k|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|  8.56k|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|  8.56k|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 8.56k]
  |  |  ------------------
  ------------------
  780|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  781|  8.56k|					"%s:Found for Freeing: %p for rp_info: %p(%pFX) Lock: %d",
  782|  8.56k|					__func__, rn, rp_info, &rp_info->group,
  783|  8.56k|					route_node_get_lock_count(rn));
  784|       |
  785|  8.56k|			rn->info = NULL;
  786|  8.56k|			route_unlock_node(rn);
  787|  8.56k|			route_unlock_node(rn);
  788|  8.56k|		}
  789|  8.56k|	}
  790|       |
  791|  8.56k|	pim_rp_refresh_group_to_rp_mapping(pim);
  792|       |
  793|  5.54M|	frr_each (rb_pim_upstream, &pim->upstream_head, up) {
  ------------------
  |  |   21|  5.55M|	for (item = prefix##_first(head); item;                                \
  |  |  ------------------
  |  |  |  Branch (21:36): [True: 5.54M, False: 8.56k]
  |  |  ------------------
  |  |   22|  5.54M|			item = prefix##_next(head, item))
  ------------------
  794|       |		/* Find the upstream (*, G) whose upstream address is same as
  795|       |		 * the deleted RP
  796|       |		 */
  797|  5.54M|		pim_addr rpf_addr;
  798|       |
  799|  5.54M|		rpf_addr = rp_info->rp.rpf_addr;
  800|  5.54M|		if (!pim_addr_cmp(up->upstream_addr, rpf_addr) &&
  ------------------
  |  Branch (800:7): [True: 113k, False: 5.43M]
  ------------------
  801|   113k|		    pim_addr_is_any(up->sg.src)) {
  ------------------
  |  Branch (801:7): [True: 99.6k, False: 13.6k]
  ------------------
  802|  99.6k|			struct prefix grp;
  803|       |
  804|  99.6k|			pim_addr_to_prefix(&grp, up->sg.grp);
  805|  99.6k|			trp_info = pim_rp_find_match_group(pim, &grp);
  806|       |
  807|  99.6k|			if (!trp_info)
  ------------------
  |  Branch (807:8): [True: 4.82k, False: 94.8k]
  ------------------
  808|  4.82k|				continue;
  809|       |
  810|       |			/* RP not found for the group grp */
  811|  94.8k|			if (pim_rpf_addr_is_inaddr_any(&trp_info->rp)) {
  ------------------
  |  Branch (811:8): [True: 3.71k, False: 91.1k]
  ------------------
  812|  3.71k|				pim_upstream_rpf_clear(pim, up);
  813|  3.71k|				pim_rp_set_upstream_addr(
  814|  3.71k|					pim, &up->upstream_addr, up->sg.src,
  815|  3.71k|					up->sg.grp);
  816|  3.71k|			}
  817|       |
  818|       |			/* RP found for the group grp */
  819|  91.1k|			else {
  820|  91.1k|				pim_upstream_update(pim, up);
  821|  91.1k|				upstream_updated = true;
  822|  91.1k|			}
  823|  94.8k|		}
  824|  5.54M|	}
  825|       |
  826|  8.56k|	if (upstream_updated)
  ------------------
  |  Branch (826:6): [True: 4.69k, False: 3.87k]
  ------------------
  827|  4.69k|		pim_zebra_update_all_interfaces(pim);
  828|       |
  829|  8.56k|	XFREE(MTYPE_PIM_RP, rp_info);
  ------------------
  |  |  170|  8.56k|	do {                                                                   \
  |  |  171|  8.56k|		qfree(mtype, ptr);                                             \
  |  |  172|  8.56k|		ptr = NULL;                                                    \
  |  |  173|  8.56k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 8.56k]
  |  |  ------------------
  ------------------
  830|  8.56k|	return PIM_SUCCESS;
  ------------------
  |  |  104|  8.56k|#define PIM_SUCCESS                      0
  ------------------
  831|  13.5k|}
pim_rp_change:
  835|  26.1k|{
  836|  26.1k|	pim_addr nht_p;
  837|  26.1k|	struct route_node *rn;
  838|  26.1k|	int result = 0;
  839|  26.1k|	struct rp_info *rp_info = NULL;
  840|  26.1k|	struct pim_upstream *up;
  841|  26.1k|	bool upstream_updated = false;
  842|  26.1k|	pim_addr old_rp_addr;
  843|       |
  844|  26.1k|	rn = route_node_lookup(pim->rp_table, &group);
  845|  26.1k|	if (!rn) {
  ------------------
  |  Branch (845:6): [True: 0, False: 26.1k]
  ------------------
  846|      0|		result = pim_rp_new(pim, new_rp_addr, group, NULL, rp_src_flag);
  847|      0|		return result;
  848|      0|	}
  849|       |
  850|  26.1k|	rp_info = rn->info;
  851|       |
  852|  26.1k|	if (!rp_info) {
  ------------------
  |  Branch (852:6): [True: 0, False: 26.1k]
  ------------------
  853|      0|		route_unlock_node(rn);
  854|      0|		result = pim_rp_new(pim, new_rp_addr, group, NULL, rp_src_flag);
  855|      0|		return result;
  856|      0|	}
  857|       |
  858|  26.1k|	old_rp_addr = rp_info->rp.rpf_addr;
  859|  26.1k|	if (!pim_addr_cmp(new_rp_addr, old_rp_addr)) {
  ------------------
  |  Branch (859:6): [True: 4.90k, False: 21.2k]
  ------------------
  860|  4.90k|		if (rp_info->rp_src != rp_src_flag) {
  ------------------
  |  Branch (860:7): [True: 0, False: 4.90k]
  ------------------
  861|      0|			rp_info->rp_src = rp_src_flag;
  862|      0|			route_unlock_node(rn);
  863|      0|			return PIM_SUCCESS;
  ------------------
  |  |  104|      0|#define PIM_SUCCESS                      0
  ------------------
  864|      0|		}
  865|  4.90k|	}
  866|       |
  867|       |	/* Deregister old RP addr with Zebra NHT */
  868|       |
  869|  26.1k|	if (!pim_addr_is_any(old_rp_addr)) {
  ------------------
  |  Branch (869:6): [True: 19.2k, False: 6.84k]
  ------------------
  870|  19.2k|		nht_p = rp_info->rp.rpf_addr;
  871|  19.2k|		if (PIM_DEBUG_PIM_NHT_RP)
  ------------------
  |  |  169|  19.2k|#define PIM_DEBUG_PIM_NHT_RP (router->debugs & PIM_MASK_PIM_NHT_RP)
  |  |  ------------------
  |  |  |  |   96|  19.2k|#define PIM_MASK_PIM_NHT_RP          (1 << 24)
  |  |  ------------------
  |  |  |  Branch (169:30): [True: 0, False: 19.2k]
  |  |  ------------------
  ------------------
  872|      0|			zlog_debug("%s: Deregister RP addr %pPA with Zebra ",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  873|  19.2k|				   __func__, &nht_p);
  874|  19.2k|		pim_delete_tracked_nexthop(pim, nht_p, NULL, rp_info);
  875|  19.2k|	}
  876|       |
  877|  26.1k|	pim_rp_nexthop_del(rp_info);
  878|  26.1k|	listnode_delete(pim->rp_list, rp_info);
  879|       |	/* Update the new RP address*/
  880|       |
  881|  26.1k|	rp_info->rp.rpf_addr = new_rp_addr;
  882|  26.1k|	rp_info->rp_src = rp_src_flag;
  883|  26.1k|	rp_info->i_am_rp = 0;
  884|       |
  885|  26.1k|	listnode_add_sort(pim->rp_list, rp_info);
  886|       |
  887|  17.3M|	frr_each (rb_pim_upstream, &pim->upstream_head, up) {
  ------------------
  |  |   21|  17.3M|	for (item = prefix##_first(head); item;                                \
  |  |  ------------------
  |  |  |  Branch (21:36): [True: 17.3M, False: 26.1k]
  |  |  ------------------
  |  |   22|  17.3M|			item = prefix##_next(head, item))
  ------------------
  888|  17.3M|		if (pim_addr_is_any(up->sg.src)) {
  ------------------
  |  Branch (888:7): [True: 4.43M, False: 12.8M]
  ------------------
  889|  4.43M|			struct prefix grp;
  890|  4.43M|			struct rp_info *trp_info;
  891|       |
  892|  4.43M|			pim_addr_to_prefix(&grp, up->sg.grp);
  893|  4.43M|			trp_info = pim_rp_find_match_group(pim, &grp);
  894|       |
  895|  4.43M|			if (trp_info == rp_info) {
  ------------------
  |  Branch (895:8): [True: 23.3k, False: 4.41M]
  ------------------
  896|  23.3k|				pim_upstream_update(pim, up);
  897|  23.3k|				upstream_updated = true;
  898|  23.3k|			}
  899|  4.43M|		}
  900|  17.3M|	}
  901|       |
  902|  26.1k|	if (upstream_updated)
  ------------------
  |  Branch (902:6): [True: 1.12k, False: 24.9k]
  ------------------
  903|  1.12k|		pim_zebra_update_all_interfaces(pim);
  904|       |
  905|       |	/* Register new RP addr with Zebra NHT */
  906|  26.1k|	nht_p = rp_info->rp.rpf_addr;
  907|  26.1k|	if (PIM_DEBUG_PIM_NHT_RP)
  ------------------
  |  |  169|  26.1k|#define PIM_DEBUG_PIM_NHT_RP (router->debugs & PIM_MASK_PIM_NHT_RP)
  |  |  ------------------
  |  |  |  |   96|  26.1k|#define PIM_MASK_PIM_NHT_RP          (1 << 24)
  |  |  ------------------
  |  |  |  Branch (169:30): [True: 0, False: 26.1k]
  |  |  ------------------
  ------------------
  908|      0|		zlog_debug("%s: NHT Register RP addr %pPA grp %pFX with Zebra ",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  909|  26.1k|			   __func__, &nht_p, &rp_info->group);
  910|       |
  911|  26.1k|	pim_find_or_track_nexthop(pim, nht_p, NULL, rp_info, NULL);
  912|  26.1k|	if (!pim_ecmp_nexthop_lookup(pim, &rp_info->rp.source_nexthop, nht_p,
  ------------------
  |  Branch (912:6): [True: 26.1k, False: 0]
  ------------------
  913|  26.1k|				     &rp_info->group, 1)) {
  914|  26.1k|		route_unlock_node(rn);
  915|  26.1k|		return PIM_RP_NO_PATH;
  ------------------
  |  |  109|  26.1k|#define PIM_RP_NO_PATH                  -6
  ------------------
  916|  26.1k|	}
  917|       |
  918|      0|	pim_rp_check_interfaces(pim, rp_info);
  919|       |
  920|      0|	route_unlock_node(rn);
  921|       |
  922|      0|	pim_rp_refresh_group_to_rp_mapping(pim);
  923|       |
  924|      0|	return result;
  925|  26.1k|}
pim_rp_setup:
  928|    212|{
  929|    212|	struct listnode *node;
  930|    212|	struct rp_info *rp_info;
  931|    212|	pim_addr nht_p;
  932|       |
  933|  6.08k|	for (ALL_LIST_ELEMENTS_RO(pim->rp_list, node, rp_info)) {
  ------------------
  |  |  333|    212|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|    212|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 212, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|  12.1k|	(node) != NULL && ((data) = static_cast(data, listgetdata(node)), 1);  \
  |  |  ------------------
  |  |  |  |  204|  36.5k|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 6.08k, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 6.08k]
  |  |  |  |  |  Branch (204:28): [True: 6.08k, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 6.08k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (334:2): [True: 6.08k, False: 212]
  |  |  |  Branch (334:20): [True: 6.08k, False: 0]
  |  |  ------------------
  |  |  335|  6.08k|	(node) = listnextnode(node), ((data) = NULL)
  |  |  ------------------
  |  |  |  |   49|  6.08k|#define listnextnode(X) ((X) ? ((X)->next) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:26): [True: 6.08k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  934|  6.08k|		if (pim_rpf_addr_is_inaddr_any(&rp_info->rp))
  ------------------
  |  Branch (934:7): [True: 172, False: 5.91k]
  ------------------
  935|    172|			continue;
  936|       |
  937|  5.91k|		nht_p = rp_info->rp.rpf_addr;
  938|       |
  939|  5.91k|		pim_find_or_track_nexthop(pim, nht_p, NULL, rp_info, NULL);
  940|  5.91k|		if (!pim_ecmp_nexthop_lookup(pim, &rp_info->rp.source_nexthop,
  ------------------
  |  Branch (940:7): [True: 5.91k, False: 0]
  ------------------
  941|  5.91k|					     nht_p, &rp_info->group, 1)) {
  942|  5.91k|			if (PIM_DEBUG_PIM_NHT_RP)
  ------------------
  |  |  169|  5.91k|#define PIM_DEBUG_PIM_NHT_RP (router->debugs & PIM_MASK_PIM_NHT_RP)
  |  |  ------------------
  |  |  |  |   96|  5.91k|#define PIM_MASK_PIM_NHT_RP          (1 << 24)
  |  |  ------------------
  |  |  |  Branch (169:30): [True: 0, False: 5.91k]
  |  |  ------------------
  ------------------
  943|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  944|  5.91k|					"Unable to lookup nexthop for rp specified");
  945|  5.91k|			pim_rp_nexthop_del(rp_info);
  946|  5.91k|		}
  947|  5.91k|	}
  948|    212|}
pim_rp_i_am_rp:
 1039|  13.0M|{
 1040|  13.0M|	struct prefix g;
 1041|  13.0M|	struct rp_info *rp_info;
 1042|       |
 1043|  13.0M|	memset(&g, 0, sizeof(g));
 1044|  13.0M|	pim_addr_to_prefix(&g, group);
 1045|  13.0M|	rp_info = pim_rp_find_match_group(pim, &g);
 1046|       |
 1047|  13.0M|	if (rp_info)
  ------------------
  |  Branch (1047:6): [True: 6.48M, False: 6.55M]
  ------------------
 1048|  6.48M|		return rp_info->i_am_rp;
 1049|  6.55M|	return 0;
 1050|  13.0M|}
pim_rp_g:
 1058|    802|{
 1059|    802|	struct prefix g;
 1060|    802|	struct rp_info *rp_info;
 1061|       |
 1062|    802|	memset(&g, 0, sizeof(g));
 1063|    802|	pim_addr_to_prefix(&g, group);
 1064|       |
 1065|    802|	rp_info = pim_rp_find_match_group(pim, &g);
 1066|       |
 1067|    802|	if (rp_info) {
  ------------------
  |  Branch (1067:6): [True: 435, False: 367]
  ------------------
 1068|    435|		pim_addr nht_p;
 1069|       |
 1070|    435|		if (pim_addr_is_any(rp_info->rp.rpf_addr)) {
  ------------------
  |  Branch (1070:7): [True: 29, False: 406]
  ------------------
 1071|     29|			if (PIM_DEBUG_PIM_NHT_RP)
  ------------------
  |  |  169|     29|#define PIM_DEBUG_PIM_NHT_RP (router->debugs & PIM_MASK_PIM_NHT_RP)
  |  |  ------------------
  |  |  |  |   96|     29|#define PIM_MASK_PIM_NHT_RP          (1 << 24)
  |  |  ------------------
  |  |  |  Branch (169:30): [True: 0, False: 29]
  |  |  ------------------
  ------------------
 1072|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1073|     29|					"%s: Skipping NHT Register since RP is not configured for the group %pPA",
 1074|     29|					__func__, &group);
 1075|     29|			return &rp_info->rp;
 1076|     29|		}
 1077|       |
 1078|       |		/* Register addr with Zebra NHT */
 1079|    406|		nht_p = rp_info->rp.rpf_addr;
 1080|    406|		if (PIM_DEBUG_PIM_NHT_RP)
  ------------------
  |  |  169|    406|#define PIM_DEBUG_PIM_NHT_RP (router->debugs & PIM_MASK_PIM_NHT_RP)
  |  |  ------------------
  |  |  |  |   96|    406|#define PIM_MASK_PIM_NHT_RP          (1 << 24)
  |  |  ------------------
  |  |  |  Branch (169:30): [True: 0, False: 406]
  |  |  ------------------
  ------------------
 1081|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1082|    406|				"%s: NHT Register RP addr %pPA grp %pFX with Zebra",
 1083|    406|				__func__, &nht_p, &rp_info->group);
 1084|    406|		pim_find_or_track_nexthop(pim, nht_p, NULL, rp_info, NULL);
 1085|    406|		pim_rpf_set_refresh_time(pim);
 1086|    406|		(void)pim_ecmp_nexthop_lookup(pim, &rp_info->rp.source_nexthop,
 1087|    406|					      nht_p, &rp_info->group, 1);
 1088|    406|		return (&rp_info->rp);
 1089|    435|	}
 1090|       |
 1091|       |	// About to Go Down
 1092|    367|	return NULL;
 1093|    802|}
pim_rp_set_upstream_addr:
 1105|   171k|{
 1106|   171k|	struct rp_info *rp_info;
 1107|   171k|	struct prefix g;
 1108|       |
 1109|   171k|	memset(&g, 0, sizeof(g));
 1110|       |
 1111|   171k|	pim_addr_to_prefix(&g, group);
 1112|       |
 1113|   171k|	rp_info = pim_rp_find_match_group(pim, &g);
 1114|       |
 1115|   171k|	if (!rp_info || ((pim_rpf_addr_is_inaddr_any(&rp_info->rp)) &&
  ------------------
  |  Branch (1115:6): [True: 17.7k, False: 154k]
  |  Branch (1115:19): [True: 5.27k, False: 148k]
  ------------------
 1116|  22.6k|			 (pim_addr_is_any(source)))) {
  ------------------
  |  Branch (1116:5): [True: 4.88k, False: 389]
  ------------------
 1117|  22.6k|		if (PIM_DEBUG_PIM_NHT_RP)
  ------------------
  |  |  169|  22.6k|#define PIM_DEBUG_PIM_NHT_RP (router->debugs & PIM_MASK_PIM_NHT_RP)
  |  |  ------------------
  |  |  |  |   96|  22.6k|#define PIM_MASK_PIM_NHT_RP          (1 << 24)
  |  |  ------------------
  |  |  |  Branch (169:30): [True: 0, False: 22.6k]
  |  |  ------------------
  ------------------
 1118|      0|			zlog_debug("%s: Received a (*,G) with no RP configured",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1119|  22.6k|				   __func__);
 1120|  22.6k|		*up = PIMADDR_ANY;
  ------------------
  |  |   79|  22.6k|#define PIMADDR_ANY (pim_addr){ }
  ------------------
 1121|  22.6k|		return 0;
 1122|  22.6k|	}
 1123|       |
 1124|   149k|	if (pim_addr_is_any(source))
  ------------------
  |  Branch (1124:6): [True: 123k, False: 25.4k]
  ------------------
 1125|   123k|		*up = rp_info->rp.rpf_addr;
 1126|  25.4k|	else
 1127|  25.4k|		*up = source;
 1128|       |
 1129|   149k|	return 1;
 1130|   171k|}
pim_resolve_rp_nh:
 1288|    212|{
 1289|    212|	struct listnode *node = NULL;
 1290|    212|	struct rp_info *rp_info = NULL;
 1291|    212|	struct nexthop *nh_node = NULL;
 1292|    212|	pim_addr nht_p;
 1293|    212|	struct pim_nexthop_cache pnc;
 1294|       |
 1295|  6.08k|	for (ALL_LIST_ELEMENTS_RO(pim->rp_list, node, rp_info)) {
  ------------------
  |  |  333|    212|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|    212|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 212, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|  12.1k|	(node) != NULL && ((data) = static_cast(data, listgetdata(node)), 1);  \
  |  |  ------------------
  |  |  |  |  204|  36.5k|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 6.08k, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 6.08k]
  |  |  |  |  |  Branch (204:28): [True: 6.08k, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 6.08k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (334:2): [True: 6.08k, False: 212]
  |  |  |  Branch (334:20): [True: 6.08k, False: 0]
  |  |  ------------------
  |  |  335|  6.08k|	(node) = listnextnode(node), ((data) = NULL)
  |  |  ------------------
  |  |  |  |   49|  6.08k|#define listnextnode(X) ((X) ? ((X)->next) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:26): [True: 6.08k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1296|  6.08k|		if (pim_rpf_addr_is_inaddr_any(&rp_info->rp))
  ------------------
  |  Branch (1296:7): [True: 172, False: 5.91k]
  ------------------
 1297|    172|			continue;
 1298|       |
 1299|  5.91k|		nht_p = rp_info->rp.rpf_addr;
 1300|  5.91k|		memset(&pnc, 0, sizeof(struct pim_nexthop_cache));
 1301|  5.91k|		if (!pim_find_or_track_nexthop(pim, nht_p, NULL, rp_info, &pnc))
  ------------------
  |  Branch (1301:7): [True: 5.91k, False: 0]
  ------------------
 1302|  5.91k|			continue;
 1303|       |
 1304|      0|		for (nh_node = pnc.nexthop; nh_node; nh_node = nh_node->next) {
  ------------------
  |  Branch (1304:31): [True: 0, False: 0]
  ------------------
 1305|      0|#if PIM_IPV == 4
 1306|      0|			if (!pim_addr_is_any(nh_node->gate.ipv4))
  ------------------
  |  Branch (1306:8): [True: 0, False: 0]
  ------------------
 1307|      0|				continue;
 1308|       |#else
 1309|       |			if (!pim_addr_is_any(nh_node->gate.ipv6))
 1310|       |				continue;
 1311|       |#endif
 1312|       |
 1313|      0|			struct interface *ifp1 = if_lookup_by_index(
 1314|      0|				nh_node->ifindex, pim->vrf->vrf_id);
 1315|       |
 1316|      0|			if (nbr->interface != ifp1)
  ------------------
  |  Branch (1316:8): [True: 0, False: 0]
  ------------------
 1317|      0|				continue;
 1318|       |
 1319|      0|#if PIM_IPV == 4
 1320|      0|			nh_node->gate.ipv4 = nbr->source_addr;
 1321|       |#else
 1322|       |			nh_node->gate.ipv6 = nbr->source_addr;
 1323|       |#endif
 1324|      0|			if (PIM_DEBUG_PIM_NHT_RP)
  ------------------
  |  |  169|      0|#define PIM_DEBUG_PIM_NHT_RP (router->debugs & PIM_MASK_PIM_NHT_RP)
  |  |  ------------------
  |  |  |  |   96|      0|#define PIM_MASK_PIM_NHT_RP          (1 << 24)
  |  |  ------------------
  |  |  |  Branch (169:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1325|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1326|      0|					"%s: addr %pPA new nexthop addr %pPAs interface %s",
 1327|      0|					__func__, &nht_p, &nbr->source_addr,
 1328|      0|					ifp1->name);
 1329|      0|		}
 1330|      0|	}
 1331|    212|}
pim_rp.c:pim_rp_check_interfaces:
  350|  18.2k|{
  351|  18.2k|	struct interface *ifp;
  352|       |
  353|  18.2k|	rp_info->i_am_rp = 0;
  354|  36.5k|	FOR_ALL_INTERFACES (pim->vrf, ifp) {
  ------------------
  |  |  372|  18.2k|	if (vrf)                                                               \
  |  |  ------------------
  |  |  |  Branch (372:6): [True: 18.2k, False: 0]
  |  |  ------------------
  |  |  373|  18.2k|		RB_FOREACH (ifp, if_name_head, &vrf->ifaces_by_name)
  |  |  ------------------
  |  |  |  |  529|  54.8k|	for ((_e) = RB_MIN(_name, (_head)); (_e) != NULL;                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  515|  18.2k|#define RB_MIN(_name, _head)		_name##_RB_MIN(_head)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (529:38): [True: 36.5k, False: 18.2k]
  |  |  |  |  ------------------
  |  |  |  |  530|  36.5k|	     (_e) = RB_NEXT(_name, (_e)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  517|  36.5k|#define RB_NEXT(_name, _elm)		_name##_RB_NEXT(_elm)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  355|  36.5k|		struct pim_interface *pim_ifp = ifp->info;
  356|       |
  357|  36.5k|		if (!pim_ifp)
  ------------------
  |  Branch (357:7): [True: 0, False: 36.5k]
  ------------------
  358|      0|			continue;
  359|       |
  360|  36.5k|		if (pim_rp_check_interface_addrs(rp_info, pim_ifp)) {
  ------------------
  |  Branch (360:7): [True: 1.23k, False: 35.3k]
  ------------------
  361|  1.23k|			rp_info->i_am_rp = 1;
  362|  1.23k|		}
  363|  36.5k|	}
  364|  18.2k|}
pim_rp.c:pim_rp_find_exact:
  172|  29.3k|{
  173|  29.3k|	struct listnode *node;
  174|  29.3k|	struct rp_info *rp_info;
  175|       |
  176|  3.17M|	for (ALL_LIST_ELEMENTS_RO(pim->rp_list, node, rp_info)) {
  ------------------
  |  |  333|  29.3k|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|  29.3k|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 29.3k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|  6.35M|	(node) != NULL && ((data) = static_cast(data, listgetdata(node)), 1);  \
  |  |  ------------------
  |  |  |  |  204|  19.0M|#define static_cast(l, r) (r)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:28): [True: 3.17M, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 3.17M]
  |  |  |  |  |  Branch (204:28): [True: 3.17M, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 0]
  |  |  |  |  |  Branch (204:28): [True: 0, False: 3.17M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (334:2): [True: 3.17M, False: 15.8k]
  |  |  |  Branch (334:20): [True: 3.17M, False: 0]
  |  |  ------------------
  |  |  335|  3.16M|	(node) = listnextnode(node), ((data) = NULL)
  |  |  ------------------
  |  |  |  |   49|  3.16M|#define listnextnode(X) ((X) ? ((X)->next) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:26): [True: 3.16M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  177|  3.17M|		if ((!pim_addr_cmp(rp, rp_info->rp.rpf_addr)) &&
  ------------------
  |  Branch (177:7): [True: 64.5k, False: 3.11M]
  ------------------
  178|  64.5k|		    prefix_same(&rp_info->group, group))
  ------------------
  |  Branch (178:7): [True: 13.5k, False: 50.9k]
  ------------------
  179|  13.5k|			return rp_info;
  180|  3.17M|	}
  181|       |
  182|  15.8k|	return NULL;
  183|  29.3k|}
pim_rp.c:pim_rp_check_interface_addrs:
  325|  36.5k|{
  326|  36.5k|	struct listnode *node;
  327|  36.5k|	struct pim_secondary_addr *sec_addr;
  328|  36.5k|	pim_addr sec_paddr;
  329|       |
  330|  36.5k|	if (!pim_addr_cmp(pim_ifp->primary_address, rp_info->rp.rpf_addr))
  ------------------
  |  Branch (330:6): [True: 1.23k, False: 35.3k]
  ------------------
  331|  1.23k|		return 1;
  332|       |
  333|  35.3k|	if (!pim_ifp->sec_addr_list) {
  ------------------
  |  Branch (333:6): [True: 0, False: 35.3k]
  ------------------
  334|      0|		return 0;
  335|      0|	}
  336|       |
  337|  35.3k|	for (ALL_LIST_ELEMENTS_RO(pim_ifp->sec_addr_list, node, sec_addr)) {
  ------------------
  |  |  333|  35.3k|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|  35.3k|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 35.3k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|  35.3k|	(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: 35.3k]
  |  |  |  Branch (334:20): [True: 0, False: 0]
  |  |  ------------------
  |  |  335|  35.3k|	(node) = listnextnode(node), ((data) = NULL)
  |  |  ------------------
  |  |  |  |   49|      0|#define listnextnode(X) ((X) ? ((X)->next) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  338|      0|		sec_paddr = pim_addr_from_prefix(&sec_addr->addr);
  339|       |		/* If an RP-address is self, It should be enough to say
  340|       |		 * I am RP the prefix-length should not matter here */
  341|      0|		if (!pim_addr_cmp(sec_paddr, rp_info->rp.rpf_addr))
  ------------------
  |  Branch (341:7): [True: 0, False: 0]
  ------------------
  342|      0|			return 1;
  343|      0|	}
  344|       |
  345|  35.3k|	return 0;
  346|  35.3k|}

pim_rpf_set_refresh_time:
   33|    686|{
   34|    686|	pim->last_route_change_time = pim_time_monotonic_usec();
   35|    686|	if (PIM_DEBUG_PIM_TRACE)
  ------------------
  |  |  146|    686|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|    686|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|    686|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 686]
  |  |  ------------------
  ------------------
   36|      0|		zlog_debug("%s: vrf(%s) New last route change time: %" PRId64,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
   37|    686|			   __func__, pim->vrf->name,
   38|    686|			   pim->last_route_change_time);
   39|    686|}
pim_rpf_update:
  193|  68.5k|{
  194|  68.5k|	struct pim_rpf *rpf = &up->rpf;
  195|  68.5k|	struct pim_rpf saved;
  196|  68.5k|	pim_addr src;
  197|  68.5k|	struct prefix grp;
  198|  68.5k|	bool neigh_needed = true;
  199|  68.5k|	uint32_t saved_mrib_route_metric;
  200|       |
  201|  68.5k|	if (PIM_UPSTREAM_FLAG_TEST_STATIC_IIF(up->flags))
  ------------------
  |  |   97|  68.5k|#define PIM_UPSTREAM_FLAG_TEST_STATIC_IIF(flags) ((flags) & PIM_UPSTREAM_FLAG_MASK_STATIC_IIF)
  |  |  ------------------
  |  |  |  |   37|  68.5k|#define PIM_UPSTREAM_FLAG_MASK_STATIC_IIF              (1 << 10)
  |  |  ------------------
  |  |  |  Branch (97:50): [True: 0, False: 68.5k]
  |  |  ------------------
  ------------------
  202|      0|		return PIM_RPF_OK;
  203|       |
  204|  68.5k|	if (pim_addr_is_any(up->upstream_addr)) {
  ------------------
  |  Branch (204:6): [True: 552, False: 68.0k]
  ------------------
  205|    552|		zlog_debug("%s(%s): RP is not configured yet for %s",
  ------------------
  |  |  134|    552|#define zlog_debug(...) 0
  ------------------
  206|    552|			__func__, caller, up->sg_str);
  207|    552|		return PIM_RPF_OK;
  208|    552|	}
  209|       |
  210|  68.0k|	saved.source_nexthop = rpf->source_nexthop;
  211|  68.0k|	saved.rpf_addr = rpf->rpf_addr;
  212|  68.0k|	saved_mrib_route_metric = pim_up_mlag_local_cost(up);
  213|  68.0k|	if (old) {
  ------------------
  |  Branch (213:6): [True: 42.5k, False: 25.4k]
  ------------------
  214|  42.5k|		old->source_nexthop = saved.source_nexthop;
  215|  42.5k|		old->rpf_addr = saved.rpf_addr;
  216|  42.5k|	}
  217|       |
  218|  68.0k|	src = up->upstream_addr; // RP or Src address
  219|  68.0k|	pim_addr_to_prefix(&grp, up->sg.grp);
  220|       |
  221|  68.0k|	if ((pim_addr_is_any(up->sg.src) && I_am_RP(pim, up->sg.grp)) ||
  ------------------
  |  |   66|  36.7k|#define I_am_RP(P, G)  pim_rp_i_am_rp ((P), (G))
  |  |  ------------------
  |  |  |  Branch (66:24): [True: 174, False: 36.6k]
  |  |  ------------------
  ------------------
  |  Branch (221:7): [True: 36.7k, False: 31.2k]
  ------------------
  222|  67.8k|	    PIM_UPSTREAM_FLAG_TEST_FHR(up->flags))
  ------------------
  |  |   89|  67.8k|#define PIM_UPSTREAM_FLAG_TEST_FHR(flags) ((flags) & PIM_UPSTREAM_FLAG_MASK_FHR)
  |  |  ------------------
  |  |  |  |   20|  67.8k|#define PIM_UPSTREAM_FLAG_MASK_FHR                     (1 << 2)
  |  |  ------------------
  |  |  |  Branch (89:43): [True: 0, False: 67.8k]
  |  |  ------------------
  ------------------
  223|    174|		neigh_needed = false;
  224|  68.0k|	pim_find_or_track_nexthop(pim, up->upstream_addr, up, NULL, NULL);
  225|  68.0k|	if (!pim_ecmp_nexthop_lookup(pim, &rpf->source_nexthop, src, &grp,
  ------------------
  |  Branch (225:6): [True: 68.0k, False: 0]
  ------------------
  226|  68.0k|				     neigh_needed)) {
  227|       |		/* Route is Deleted in Zebra, reset the stored NH data */
  228|  68.0k|		pim_upstream_rpf_clear(pim, up);
  229|  68.0k|		pim_rpf_cost_change(pim, up, saved_mrib_route_metric);
  230|  68.0k|		return PIM_RPF_FAILURE;
  231|  68.0k|	}
  232|       |
  233|      0|	rpf->rpf_addr = pim_rpf_find_rpf_addr(up);
  234|       |
  235|      0|	if (pim_rpf_addr_is_inaddr_any(rpf) && PIM_DEBUG_ZEBRA) {
  ------------------
  |  |  154|      0|#define PIM_DEBUG_ZEBRA (router->debugs & PIM_MASK_ZEBRA)
  |  |  ------------------
  |  |  |  |   83|      0|#define PIM_MASK_ZEBRA               (1 << 11)
  |  |  ------------------
  |  |  |  Branch (154:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (235:6): [True: 0, False: 0]
  ------------------
  236|       |		/* RPF'(S,G) not found */
  237|      0|		zlog_debug("%s(%s): RPF'%s not found: won't send join upstream",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  238|      0|			   __func__, caller, up->sg_str);
  239|       |		/* warning only */
  240|      0|	}
  241|       |
  242|       |	/* detect change in pim_nexthop */
  243|      0|	if (nexthop_mismatch(&rpf->source_nexthop, &saved.source_nexthop)) {
  ------------------
  |  Branch (243:6): [True: 0, False: 0]
  ------------------
  244|       |
  245|      0|		if (PIM_DEBUG_ZEBRA)
  ------------------
  |  |  154|      0|#define PIM_DEBUG_ZEBRA (router->debugs & PIM_MASK_ZEBRA)
  |  |  ------------------
  |  |  |  |   83|      0|#define PIM_MASK_ZEBRA               (1 << 11)
  |  |  ------------------
  |  |  |  Branch (154:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  246|      0|			zlog_debug("%s(%s): (S,G)=%s source nexthop now is: interface=%s address=%pPAs pref=%d metric=%d",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  247|      0|		 __func__, caller,
  248|      0|		 up->sg_str,
  249|      0|		 rpf->source_nexthop.interface ? rpf->source_nexthop.interface->name : "<ifname?>",
  250|      0|		 &rpf->source_nexthop.mrib_nexthop_addr,
  251|      0|		 rpf->source_nexthop.mrib_metric_preference,
  252|      0|		 rpf->source_nexthop.mrib_route_metric);
  253|       |
  254|      0|		pim_upstream_update_join_desired(pim, up);
  255|      0|		pim_upstream_update_could_assert(up);
  256|      0|		pim_upstream_update_my_assert_metric(up);
  257|      0|	}
  258|       |
  259|       |	/* detect change in RPF_interface(S) */
  260|      0|	if (saved.source_nexthop.interface != rpf->source_nexthop.interface) {
  ------------------
  |  Branch (260:6): [True: 0, False: 0]
  ------------------
  261|       |
  262|      0|		if (PIM_DEBUG_ZEBRA) {
  ------------------
  |  |  154|      0|#define PIM_DEBUG_ZEBRA (router->debugs & PIM_MASK_ZEBRA)
  |  |  ------------------
  |  |  |  |   83|      0|#define PIM_MASK_ZEBRA               (1 << 11)
  |  |  ------------------
  |  |  |  Branch (154:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  263|      0|			zlog_debug("%s(%s): (S,G)=%s RPF_interface(S) changed from %s to %s",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  264|      0|		 __func__, caller,
  265|      0|		 up->sg_str,
  266|      0|		 saved.source_nexthop.interface ? saved.source_nexthop.interface->name : "<oldif?>",
  267|      0|		 rpf->source_nexthop.interface ? rpf->source_nexthop.interface->name : "<newif?>");
  268|       |			/* warning only */
  269|      0|		}
  270|       |
  271|      0|		pim_upstream_rpf_interface_changed(
  272|      0|			up, saved.source_nexthop.interface);
  273|      0|	}
  274|       |
  275|       |	/* detect change in RPF'(S,G) */
  276|      0|	if (pim_addr_cmp(saved.rpf_addr, rpf->rpf_addr) ||
  ------------------
  |  Branch (276:6): [True: 0, False: 0]
  ------------------
  277|      0|	    saved.source_nexthop.interface != rpf->source_nexthop.interface) {
  ------------------
  |  Branch (277:6): [True: 0, False: 0]
  ------------------
  278|      0|		pim_rpf_cost_change(pim, up, saved_mrib_route_metric);
  279|      0|		return PIM_RPF_CHANGED;
  280|      0|	}
  281|       |
  282|      0|	if (PIM_DEBUG_MLAG)
  ------------------
  |  |  155|      0|#define PIM_DEBUG_MLAG (router->debugs & PIM_MASK_MLAG)
  |  |  ------------------
  |  |  |  |  100|      0|#define PIM_MASK_MLAG                (1 << 28)
  |  |  ------------------
  |  |  |  Branch (155:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  283|      0|		zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  284|      0|			"%s(%s): Cost_to_rp of upstream-%s changed to:%u",
  285|      0|			__func__, caller, up->sg_str,
  286|      0|			rpf->source_nexthop.mrib_route_metric);
  287|       |
  288|      0|	pim_rpf_cost_change(pim, up, saved_mrib_route_metric);
  289|       |
  290|      0|	return PIM_RPF_OK;
  291|      0|}
pim_upstream_rpf_clear:
  301|  76.6k|{
  302|  76.6k|	if (up->rpf.source_nexthop.interface) {
  ------------------
  |  Branch (302:6): [True: 0, False: 76.6k]
  ------------------
  303|      0|		pim_upstream_switch(pim, up, PIM_UPSTREAM_NOTJOINED);
  304|      0|		up->rpf.source_nexthop.interface = NULL;
  305|      0|		up->rpf.source_nexthop.mrib_nexthop_addr = PIMADDR_ANY;
  ------------------
  |  |   79|      0|#define PIMADDR_ANY (pim_addr){ }
  ------------------
  306|      0|		up->rpf.source_nexthop.mrib_metric_preference =
  307|      0|			router->infinite_assert_metric.metric_preference;
  308|      0|		up->rpf.source_nexthop.mrib_route_metric =
  309|      0|			router->infinite_assert_metric.route_metric;
  310|      0|		up->rpf.rpf_addr = PIMADDR_ANY;
  ------------------
  |  |   79|      0|#define PIMADDR_ANY (pim_addr){ }
  ------------------
  311|      0|		pim_upstream_mroute_iif_update(up->channel_oil, __func__);
  312|      0|	}
  313|  76.6k|}
pim_rpf_addr_is_inaddr_any:
  363|   323k|{
  364|   323k|	return pim_addr_is_any(rpf->rpf_addr);
  365|   323k|}
pim_rpf_hash_key:
  376|   388k|{
  377|   388k|	const struct pim_nexthop_cache *r = arg;
  378|       |
  379|   388k|#if PIM_IPV == 4
  380|   388k|	return jhash_1word(r->rpf.rpf_addr.s_addr, 0);
  381|       |#else
  382|       |	return jhash2(r->rpf.rpf_addr.s6_addr32,
  383|       |		      array_size(r->rpf.rpf_addr.s6_addr32), 0);
  384|       |#endif
  385|   388k|}
pim_rpf_equal:
  388|   315k|{
  389|   315k|	const struct pim_nexthop_cache *r1 =
  390|   315k|		(const struct pim_nexthop_cache *)arg1;
  391|   315k|	const struct pim_nexthop_cache *r2 =
  392|   315k|		(const struct pim_nexthop_cache *)arg2;
  393|       |
  394|   315k|	return (!pim_addr_cmp(r1->rpf.rpf_addr, r2->rpf.rpf_addr));
  395|   315k|}
pim_rpf.c:pim_rpf_cost_change:
  166|  68.0k|{
  167|  68.0k|	struct pim_rpf *rpf = &up->rpf;
  168|  68.0k|	uint32_t new_cost;
  169|       |
  170|  68.0k|	new_cost = pim_up_mlag_local_cost(up);
  171|  68.0k|	if (PIM_DEBUG_MLAG)
  ------------------
  |  |  155|  68.0k|#define PIM_DEBUG_MLAG (router->debugs & PIM_MASK_MLAG)
  |  |  ------------------
  |  |  |  |  100|  68.0k|#define PIM_MASK_MLAG                (1 << 28)
  |  |  ------------------
  |  |  |  Branch (155:24): [True: 0, False: 68.0k]
  |  |  ------------------
  ------------------
  172|      0|		zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  173|  68.0k|			"%s: Cost_to_rp of upstream-%s changed to:%u, from:%u",
  174|  68.0k|			__func__, up->sg_str, new_cost, old_cost);
  175|       |
  176|  68.0k|	if (old_cost == new_cost)
  ------------------
  |  Branch (176:6): [True: 68.0k, False: 0]
  ------------------
  177|  68.0k|		return;
  178|       |
  179|       |	/* Cost changed, it might Impact MLAG DF election, update */
  180|      0|	if (PIM_DEBUG_MLAG)
  ------------------
  |  |  155|      0|#define PIM_DEBUG_MLAG (router->debugs & PIM_MASK_MLAG)
  |  |  ------------------
  |  |  |  |  100|      0|#define PIM_MASK_MLAG                (1 << 28)
  |  |  ------------------
  |  |  |  Branch (155:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  181|      0|		zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  182|      0|			"%s: Cost_to_rp of upstream-%s changed to:%u",
  183|      0|			__func__, up->sg_str,
  184|      0|			rpf->source_nexthop.mrib_route_metric);
  185|       |
  186|      0|	if (pim_up_mlag_is_local(up))
  ------------------
  |  Branch (186:6): [True: 0, False: 0]
  ------------------
  187|      0|		pim_mlag_up_local_add(pim, up);
  188|      0|}

pim_is_grp_ssm:
   67|     28|{
   68|     28|	struct pim_ssm *ssm;
   69|     28|	struct prefix group;
   70|     28|	struct prefix_list *plist;
   71|       |
   72|     28|	pim_addr_to_prefix(&group, group_addr);
   73|       |
   74|     28|	ssm = pim->ssm_info;
   75|     28|	if (!ssm->plist_name) {
  ------------------
  |  Branch (75:6): [True: 28, False: 0]
  ------------------
   76|     28|		return pim_is_grp_standard_ssm(&group);
   77|     28|	}
   78|       |
   79|      0|	plist = prefix_list_lookup(PIM_AFI, ssm->plist_name);
  ------------------
  |  |   20|      0|#define PIM_AFI		AFI_IP
  ------------------
   80|      0|	if (!plist)
  ------------------
  |  Branch (80:6): [True: 0, False: 0]
  ------------------
   81|      0|		return 0;
   82|       |
   83|      0|	return (prefix_list_apply_ext(plist, NULL, &group, true) ==
   84|      0|		PREFIX_PERMIT);
   85|      0|}
pim_ssm_init:
  119|      1|{
  120|      1|	struct pim_ssm *ssm;
  121|       |
  122|      1|	ssm = XCALLOC(MTYPE_PIM_SSM_INFO, sizeof(*ssm));
  ------------------
  |  |  165|      1|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  123|       |
  124|      1|	return ssm;
  125|      1|}
pim_ssm.c:pim_is_grp_standard_ssm:
   60|     28|{
   61|     28|	pim_addr addr = pim_addr_from_prefix(group);
   62|       |
   63|     28|	return pim_addr_ssm(addr);
   64|     28|}

pim_ssmpingd_init:
   34|      1|{
   35|      1|	int result;
   36|       |
   37|      1|	assert(!pim->ssmpingd_list);
  ------------------
  |  |   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|	})
  ------------------
   38|       |
   39|      1|	result = inet_pton(PIM_AF, PIM_SSMPINGD_REPLY_GROUP,
  ------------------
  |  |   19|      1|#define PIM_AF		AF_INET
  ------------------
   40|      1|			   &pim->ssmpingd_group_addr);
   41|       |
   42|       |	assert(result > 0);
  ------------------
  |  |   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|	})
  ------------------
   43|      1|}

pim_time_monotonic_sec:
   38|   209k|{
   39|   209k|	struct timeval now_tv;
   40|       |
   41|   209k|	if (gettime_monotonic(&now_tv)) {
  ------------------
  |  Branch (41:6): [True: 0, False: 209k]
  ------------------
   42|      0|		flog_err_sys(EC_LIB_SYSTEM_CALL,
  ------------------
  |  |  138|      0|#define flog_err_sys(ferr_id, format, ...) 0
  ------------------
   43|      0|			     "%s: gettime_monotonic() failure: errno=%d: %s",
   44|      0|			     __func__, errno, safe_strerror(errno));
   45|      0|		return -1;
   46|      0|	}
   47|       |
   48|   209k|	return now_tv.tv_sec;
   49|   209k|}
pim_time_monotonic_usec:
   74|    686|{
   75|    686|	struct timeval now_tv;
   76|    686|	int64_t now_dsec;
  ------------------
  |  |  394|    686|#define int64_t _int64_t
  ------------------
   77|       |
   78|    686|	if (gettime_monotonic(&now_tv)) {
  ------------------
  |  Branch (78:6): [True: 0, False: 686]
  ------------------
   79|      0|		flog_err_sys(EC_LIB_SYSTEM_CALL,
  ------------------
  |  |  138|      0|#define flog_err_sys(ferr_id, format, ...) 0
  ------------------
   80|      0|			     "%s: gettime_monotonic() failure: errno=%d: %s",
   81|      0|			     __func__, errno, safe_strerror(errno));
   82|      0|		return -1;
   83|      0|	}
   84|       |
   85|    686|	now_dsec =
   86|    686|		((int64_t)now_tv.tv_sec) * 1000000 + ((int64_t)now_tv.tv_usec);
   87|       |
   88|    686|	return now_dsec;
   89|    686|}
pim_time.c:gettime_monotonic:
   20|   210k|{
   21|   210k|	int result;
   22|       |
   23|   210k|	result = gettimeofday(tv, 0);
   24|   210k|	if (result) {
  ------------------
  |  Branch (24:6): [True: 0, False: 210k]
  ------------------
   25|      0|		flog_err_sys(EC_LIB_SYSTEM_CALL,
  ------------------
  |  |  138|      0|#define flog_err_sys(ferr_id, format, ...) 0
  ------------------
   26|      0|			     "%s: gettimeofday() failure: errno=%d: %s",
   27|      0|			     __func__, errno, safe_strerror(errno));
   28|      0|	}
   29|       |
   30|   210k|	return result;
   31|   210k|}

pim_tlv_append_uint16:
   30|    154|{
   31|    154|	uint16_t option_len = 2;
   32|       |
   33|    154|	if ((buf + PIM_TLV_OPTION_SIZE(option_len)) > buf_pastend)
  ------------------
  |  |   64|    154|#define PIM_TLV_OPTION_SIZE(option_len) (PIM_TLV_MIN_SIZE + (option_len))
  |  |  ------------------
  |  |  |  |   63|    154|#define PIM_TLV_MIN_SIZE                (PIM_TLV_TYPE_SIZE + PIM_TLV_LENGTH_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|    154|#define PIM_TLV_TYPE_SIZE               (2)
  |  |  |  |  ------------------
  |  |  |  |               #define PIM_TLV_MIN_SIZE                (PIM_TLV_TYPE_SIZE + PIM_TLV_LENGTH_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|    154|#define PIM_TLV_LENGTH_SIZE             (2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (33:6): [True: 0, False: 154]
  ------------------
   34|      0|		return NULL;
   35|       |
   36|    154|	*(uint16_t *)buf = htons(option_type);
   37|    154|	buf += 2;
   38|    154|	*(uint16_t *)buf = htons(option_len);
   39|    154|	buf += 2;
   40|    154|	*(uint16_t *)buf = htons(option_value);
   41|    154|	buf += option_len;
   42|       |
   43|    154|	return buf;
   44|    154|}
pim_tlv_append_2uint16:
   49|    154|{
   50|    154|	uint16_t option_len = 4;
   51|       |
   52|    154|	if ((buf + PIM_TLV_OPTION_SIZE(option_len)) > buf_pastend)
  ------------------
  |  |   64|    154|#define PIM_TLV_OPTION_SIZE(option_len) (PIM_TLV_MIN_SIZE + (option_len))
  |  |  ------------------
  |  |  |  |   63|    154|#define PIM_TLV_MIN_SIZE                (PIM_TLV_TYPE_SIZE + PIM_TLV_LENGTH_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|    154|#define PIM_TLV_TYPE_SIZE               (2)
  |  |  |  |  ------------------
  |  |  |  |               #define PIM_TLV_MIN_SIZE                (PIM_TLV_TYPE_SIZE + PIM_TLV_LENGTH_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|    154|#define PIM_TLV_LENGTH_SIZE             (2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (52:6): [True: 0, False: 154]
  ------------------
   53|      0|		return NULL;
   54|       |
   55|    154|	*(uint16_t *)buf = htons(option_type);
   56|    154|	buf += 2;
   57|    154|	*(uint16_t *)buf = htons(option_len);
   58|    154|	buf += 2;
   59|    154|	*(uint16_t *)buf = htons(option_value1);
   60|    154|	buf += 2;
   61|    154|	*(uint16_t *)buf = htons(option_value2);
   62|    154|	buf += 2;
   63|       |
   64|    154|	return buf;
   65|    154|}
pim_tlv_append_uint32:
   69|    308|{
   70|    308|	uint16_t option_len = 4;
   71|       |
   72|    308|	if ((buf + PIM_TLV_OPTION_SIZE(option_len)) > buf_pastend)
  ------------------
  |  |   64|    308|#define PIM_TLV_OPTION_SIZE(option_len) (PIM_TLV_MIN_SIZE + (option_len))
  |  |  ------------------
  |  |  |  |   63|    308|#define PIM_TLV_MIN_SIZE                (PIM_TLV_TYPE_SIZE + PIM_TLV_LENGTH_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|    308|#define PIM_TLV_TYPE_SIZE               (2)
  |  |  |  |  ------------------
  |  |  |  |               #define PIM_TLV_MIN_SIZE                (PIM_TLV_TYPE_SIZE + PIM_TLV_LENGTH_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|    308|#define PIM_TLV_LENGTH_SIZE             (2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (72:6): [True: 0, False: 308]
  ------------------
   73|      0|		return NULL;
   74|       |
   75|    308|	*(uint16_t *)buf = htons(option_type);
   76|    308|	buf += 2;
   77|    308|	*(uint16_t *)buf = htons(option_len);
   78|    308|	buf += 2;
   79|    308|	pim_write_uint32(buf, option_value);
   80|    308|	buf += option_len;
   81|       |
   82|    308|	return buf;
   83|    308|}
pim_encode_addr_ucast:
  117|      6|{
  118|      6|	uint8_t *start = buf;
  119|       |
  120|      6|	*buf++ = PIM_MSG_ADDRESS_FAMILY;
  ------------------
  |  |   23|      6|#define PIM_MSG_ADDRESS_FAMILY PIM_MSG_ADDRESS_FAMILY_IPV4
  ------------------
  121|      6|	*buf++ = 0;
  122|      6|	memcpy(buf, &addr, sizeof(addr));
  123|      6|	buf += sizeof(addr);
  124|       |
  125|      6|	return buf - start;
  126|      6|}
pim_encode_addr_group:
  200|      6|{
  201|      6|	uint8_t *start = buf;
  202|      6|	uint8_t flags = 0;
  203|       |
  204|      6|	flags |= bidir << 8;
  205|      6|	flags |= scope;
  206|       |
  207|      6|	*buf++ = PIM_MSG_ADDRESS_FAMILY;
  ------------------
  |  |   23|      6|#define PIM_MSG_ADDRESS_FAMILY PIM_MSG_ADDRESS_FAMILY_IPV4
  ------------------
  208|      6|	*buf++ = 0;
  209|      6|	*buf++ = flags;
  210|      6|	*buf++ = sizeof(group) * 8;
  211|      6|	memcpy(buf, &group, sizeof(group));
  212|      6|	buf += sizeof(group);
  213|       |
  214|      6|	return buf - start;
  215|      6|}
pim_tlv_append_addrlist_ucast:
  219|    308|{
  220|    308|	struct listnode *node;
  221|    308|	uint16_t option_len = 0;
  222|    308|	uint8_t *curr;
  223|    308|	size_t uel;
  224|    308|	struct list *ifconnected = ifp->connected;
  225|    308|	struct pim_interface *pim_ifp = ifp->info;
  226|    308|	pim_addr addr;
  227|       |
  228|    308|	node = listhead(ifconnected);
  ------------------
  |  |   51|    308|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  ------------------
  |  |  |  Branch (51:22): [True: 308, False: 0]
  |  |  ------------------
  ------------------
  229|       |
  230|       |	/* Empty address list ? */
  231|    308|	if (!node) {
  ------------------
  |  Branch (231:6): [True: 0, False: 308]
  ------------------
  232|      0|		return buf;
  233|      0|	}
  234|       |
  235|    308|	if (family == AF_INET)
  ------------------
  |  Branch (235:6): [True: 154, False: 154]
  ------------------
  236|    154|		uel = ucast_ipv4_encoding_len;
  ------------------
  |  |   85|    154|#define ucast_ipv4_encoding_len (2 + sizeof(struct in_addr))
  ------------------
  237|    154|	else
  238|    154|		uel = ucast_ipv6_encoding_len;
  ------------------
  |  |   86|    154|#define ucast_ipv6_encoding_len (2 + sizeof(struct in6_addr))
  ------------------
  239|       |
  240|       |	/* Scan secondary address list */
  241|    308|	curr = buf + 4; /* skip T and L */
  242|    616|	for (; node; node = listnextnode(node)) {
  ------------------
  |  |   49|    308|#define listnextnode(X) ((X) ? ((X)->next) : NULL)
  |  |  ------------------
  |  |  |  Branch (49:26): [True: 308, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (242:9): [True: 308, False: 308]
  ------------------
  243|    616|		struct connected *ifc = listgetdata(node);
  ------------------
  |  |   58|    308|#define listgetdata(X) (assert(X), assert((X)->data != NULL), (X)->data)
  |  |  ------------------
  |  |  |  |   51|    308|	({                                                                     \
  |  |  |  |   52|    308|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|    308|			(used)) = {                                            \
  |  |  |  |   54|    308|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|    308|	{                                                                      \
  |  |  |  |  |  |  284|    308|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|    308|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|    308|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|    308|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|    308|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|    308|			.expr = #expr_,                                        \
  |  |  |  |   56|    308|		};                                                             \
  |  |  |  |   57|    308|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|    308|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|    308|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|    308|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|    308|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 308]
  |  |  |  |  |  Branch (58:24): [True: 308, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|    308|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|    308|	})
  |  |  ------------------
  |  |               #define listgetdata(X) (assert(X), assert((X)->data != NULL), (X)->data)
  |  |  ------------------
  |  |  |  |   51|    308|	({                                                                     \
  |  |  |  |   52|    308|		static const struct xref_assert _xref __attribute__(           \
  |  |  |  |   53|    308|			(used)) = {                                            \
  |  |  |  |   54|    308|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|    308|	{                                                                      \
  |  |  |  |  |  |  284|    308|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  |  |  285|    308|		/* .type = */ (type_),                                         \
  |  |  |  |  |  |  286|    308|		/* .line = */ __LINE__,                                        \
  |  |  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  |  |  288|    308|		/* .func = */ func_,                                           \
  |  |  |  |  |  |  289|    308|	}                                                                      \
  |  |  |  |  ------------------
  |  |  |  |   55|    308|			.expr = #expr_,                                        \
  |  |  |  |   56|    308|		};                                                             \
  |  |  |  |   57|    308|		XREF_LINK(_xref.xref);                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  254|    308|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  |  |  255|    308|			__attribute__((xref_array_attr))                       \
  |  |  |  |  |  |  256|    308|		= &(dst)                                                       \
  |  |  |  |  ------------------
  |  |  |  |   58|    308|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (58:7): [True: 0, False: 308]
  |  |  |  |  |  Branch (58:24): [True: 308, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   59|    308|			do {                                                   \
  |  |  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |  |  |   61|      0|			} while (expr_);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   62|    308|	})
  |  |  ------------------
  ------------------
  244|    616|		struct prefix *p = ifc->address;
  245|    616|		int l_encode;
  246|       |
  247|    616|		addr = pim_addr_from_prefix(p);
  248|    616|		if (!pim_addr_cmp(pim_ifp->primary_address, addr))
  ------------------
  |  Branch (248:7): [True: 308, False: 0]
  ------------------
  249|       |			/* don't add the primary address
  250|       |			 * into the secondary address list */
  251|    308|			continue;
  252|       |
  253|      0|		if ((curr + uel) > buf_pastend)
  ------------------
  |  Branch (253:7): [True: 0, False: 0]
  ------------------
  254|      0|			return 0;
  255|       |
  256|      0|		if (p->family != family)
  ------------------
  |  Branch (256:7): [True: 0, False: 0]
  ------------------
  257|      0|			continue;
  258|       |
  259|      0|		l_encode = pim_encode_addr_ucast_prefix(curr, p);
  260|      0|		curr += l_encode;
  261|      0|		option_len += l_encode;
  262|      0|	}
  263|       |
  264|    308|	if (PIM_DEBUG_PIM_TRACE_DETAIL) {
  ------------------
  |  |  148|    308|	(router->debugs & PIM_MASK_PIM_TRACE_DETAIL)
  |  |  ------------------
  |  |  |  |   78|    308|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (148:2): [True: 0, False: 308]
  |  |  ------------------
  ------------------
  265|      0|		zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  266|      0|			"%s: number of encoded secondary unicast IPv4 addresses: %zu",
  267|      0|			__func__, option_len / uel);
  268|      0|	}
  269|       |
  270|    308|	if (option_len < 1) {
  ------------------
  |  Branch (270:6): [True: 308, False: 0]
  ------------------
  271|       |		/* Empty secondary unicast IPv4 address list */
  272|    308|		return buf;
  273|    308|	}
  274|       |
  275|       |	/*
  276|       |	 * Write T and L
  277|       |	 */
  278|      0|	*(uint16_t *)buf = htons(PIM_MSG_OPTION_TYPE_ADDRESS_LIST);
  279|      0|	*(uint16_t *)(buf + 2) = htons(option_len);
  280|       |
  281|      0|	return curr;
  282|    308|}
pim_tlv_parse_holdtime:
  340|    230|{
  341|    230|	const char *label = "holdtime";
  342|       |
  343|    230|	if (check_tlv_length(__func__, label, ifname, src_addr,
  ------------------
  |  Branch (343:6): [True: 8, False: 222]
  ------------------
  344|    230|			     sizeof(uint16_t), option_len)) {
  345|      8|		return -1;
  346|      8|	}
  347|       |
  348|    222|	check_tlv_redefinition_uint16(__func__, label, ifname, src_addr,
  349|    222|				      *hello_options, PIM_OPTION_MASK_HOLDTIME,
  ------------------
  |  |   24|    222|#define PIM_OPTION_MASK_HOLDTIME                     (1 << 0) /* recv holdtime */
  ------------------
  350|    222|				      PIM_TLV_GET_HOLDTIME(tlv_curr),
  ------------------
  |  |   54|    222|#define PIM_TLV_GET_HOLDTIME(buf) PIM_TLV_GET_UINT16(buf)
  |  |  ------------------
  |  |  |  |   41|    222|	({                                                                     \
  |  |  |  |   42|    222|		uint16_t _tmp;                                                 \
  |  |  |  |   43|    222|		memcpy(&_tmp, (buf), sizeof(uint16_t));                        \
  |  |  |  |   44|    222|		ntohs(_tmp);                                                   \
  |  |  |  |   45|    222|	})
  |  |  ------------------
  ------------------
  351|    222|				      *hello_option_holdtime);
  352|       |
  353|    222|	PIM_OPTION_SET(*hello_options, PIM_OPTION_MASK_HOLDTIME);
  ------------------
  |  |   35|    222|	((options) |= (typeof((options)))(option_mask))
  ------------------
  354|       |
  355|    222|	*hello_option_holdtime = PIM_TLV_GET_HOLDTIME(tlv_curr);
  ------------------
  |  |   54|    222|#define PIM_TLV_GET_HOLDTIME(buf) PIM_TLV_GET_UINT16(buf)
  |  |  ------------------
  |  |  |  |   41|    222|	({                                                                     \
  |  |  |  |   42|    222|		uint16_t _tmp;                                                 \
  |  |  |  |   43|    222|		memcpy(&_tmp, (buf), sizeof(uint16_t));                        \
  |  |  |  |   44|    222|		ntohs(_tmp);                                                   \
  |  |  |  |   45|    222|	})
  |  |  ------------------
  ------------------
  356|       |
  357|    222|	return 0;
  358|    230|}
pim_tlv_parse_lan_prune_delay:
  365|    524|{
  366|    524|	if (check_tlv_length(__func__, "lan_prune_delay", ifname, src_addr,
  ------------------
  |  Branch (366:6): [True: 26, False: 498]
  ------------------
  367|    524|			     sizeof(uint32_t), option_len)) {
  368|     26|		return -1;
  369|     26|	}
  370|       |
  371|    498|	check_tlv_redefinition_uint16(__func__, "propagation_delay", ifname,
  372|    498|				      src_addr, *hello_options,
  373|    498|				      PIM_OPTION_MASK_LAN_PRUNE_DELAY,
  ------------------
  |  |   25|    498|#define PIM_OPTION_MASK_LAN_PRUNE_DELAY              (1 << 1) /* recv lan_prune_delay */
  ------------------
  374|    498|				      PIM_TLV_GET_PROPAGATION_DELAY(tlv_curr),
  ------------------
  |  |   55|    498|#define PIM_TLV_GET_PROPAGATION_DELAY(buf) (PIM_TLV_GET_UINT16(buf) & 0x7FFF)
  |  |  ------------------
  |  |  |  |   41|    498|	({                                                                     \
  |  |  |  |   42|    498|		uint16_t _tmp;                                                 \
  |  |  |  |   43|    498|		memcpy(&_tmp, (buf), sizeof(uint16_t));                        \
  |  |  |  |   44|    498|		ntohs(_tmp);                                                   \
  |  |  |  |   45|    498|	})
  |  |  ------------------
  ------------------
  375|    498|				      *hello_option_propagation_delay);
  376|       |
  377|    498|	PIM_OPTION_SET(*hello_options, PIM_OPTION_MASK_LAN_PRUNE_DELAY);
  ------------------
  |  |   35|    498|	((options) |= (typeof((options)))(option_mask))
  ------------------
  378|       |
  379|    498|	*hello_option_propagation_delay =
  380|    498|		PIM_TLV_GET_PROPAGATION_DELAY(tlv_curr);
  ------------------
  |  |   55|    498|#define PIM_TLV_GET_PROPAGATION_DELAY(buf) (PIM_TLV_GET_UINT16(buf) & 0x7FFF)
  |  |  ------------------
  |  |  |  |   41|    498|	({                                                                     \
  |  |  |  |   42|    498|		uint16_t _tmp;                                                 \
  |  |  |  |   43|    498|		memcpy(&_tmp, (buf), sizeof(uint16_t));                        \
  |  |  |  |   44|    498|		ntohs(_tmp);                                                   \
  |  |  |  |   45|    498|	})
  |  |  ------------------
  ------------------
  381|    498|	if (PIM_TLV_GET_CAN_DISABLE_JOIN_SUPPRESSION(tlv_curr)) {
  ------------------
  |  |   57|    498|#define PIM_TLV_GET_CAN_DISABLE_JOIN_SUPPRESSION(buf) ((*(const uint8_t *)(buf)) & 0x80)
  |  |  ------------------
  |  |  |  Branch (57:55): [True: 271, False: 227]
  |  |  ------------------
  ------------------
  382|    271|		PIM_OPTION_SET(*hello_options,
  ------------------
  |  |   35|    271|	((options) |= (typeof((options)))(option_mask))
  ------------------
  383|    271|			       PIM_OPTION_MASK_CAN_DISABLE_JOIN_SUPPRESSION);
  384|    271|	} else {
  385|    227|		PIM_OPTION_UNSET(*hello_options,
  ------------------
  |  |   37|    227|	((options) &= (typeof((options))) ~(option_mask))
  ------------------
  386|    227|				 PIM_OPTION_MASK_CAN_DISABLE_JOIN_SUPPRESSION);
  387|    227|	}
  388|    498|	++tlv_curr;
  389|    498|	++tlv_curr;
  390|    498|	*hello_option_override_interval =
  391|    498|		PIM_TLV_GET_OVERRIDE_INTERVAL(tlv_curr);
  ------------------
  |  |   56|    498|#define PIM_TLV_GET_OVERRIDE_INTERVAL(buf) PIM_TLV_GET_UINT16(buf)
  |  |  ------------------
  |  |  |  |   41|    498|	({                                                                     \
  |  |  |  |   42|    498|		uint16_t _tmp;                                                 \
  |  |  |  |   43|    498|		memcpy(&_tmp, (buf), sizeof(uint16_t));                        \
  |  |  |  |   44|    498|		ntohs(_tmp);                                                   \
  |  |  |  |   45|    498|	})
  |  |  ------------------
  ------------------
  392|       |
  393|    498|	return 0;
  394|    524|}
pim_tlv_parse_dr_priority:
  400|    335|{
  401|    335|	const char *label = "dr_priority";
  402|       |
  403|    335|	if (check_tlv_length(__func__, label, ifname, src_addr,
  ------------------
  |  Branch (403:6): [True: 24, False: 311]
  ------------------
  404|    335|			     sizeof(uint32_t), option_len)) {
  405|     24|		return -1;
  406|     24|	}
  407|       |
  408|    311|	check_tlv_redefinition_uint32(
  409|    311|		__func__, label, ifname, src_addr, *hello_options,
  410|    311|		PIM_OPTION_MASK_DR_PRIORITY, PIM_TLV_GET_DR_PRIORITY(tlv_curr),
  ------------------
  |  |   26|    311|#define PIM_OPTION_MASK_DR_PRIORITY                  (1 << 2) /* recv dr_priority */
  ------------------
              		PIM_OPTION_MASK_DR_PRIORITY, PIM_TLV_GET_DR_PRIORITY(tlv_curr),
  ------------------
  |  |   58|    311|#define PIM_TLV_GET_DR_PRIORITY(buf) PIM_TLV_GET_UINT32(buf)
  |  |  ------------------
  |  |  |  |   47|    311|	({                                                                     \
  |  |  |  |   48|    311|		uint32_t _tmp;                                                 \
  |  |  |  |   49|    311|		memcpy(&_tmp, (buf), sizeof(uint32_t));                        \
  |  |  |  |   50|    311|		ntohl(_tmp);                                                   \
  |  |  |  |   51|    311|	})
  |  |  ------------------
  ------------------
  411|    311|		*hello_option_dr_priority);
  412|       |
  413|    311|	PIM_OPTION_SET(*hello_options, PIM_OPTION_MASK_DR_PRIORITY);
  ------------------
  |  |   35|    311|	((options) |= (typeof((options)))(option_mask))
  ------------------
  414|       |
  415|    311|	*hello_option_dr_priority = PIM_TLV_GET_DR_PRIORITY(tlv_curr);
  ------------------
  |  |   58|    311|#define PIM_TLV_GET_DR_PRIORITY(buf) PIM_TLV_GET_UINT32(buf)
  |  |  ------------------
  |  |  |  |   47|    311|	({                                                                     \
  |  |  |  |   48|    311|		uint32_t _tmp;                                                 \
  |  |  |  |   49|    311|		memcpy(&_tmp, (buf), sizeof(uint32_t));                        \
  |  |  |  |   50|    311|		ntohl(_tmp);                                                   \
  |  |  |  |   51|    311|	})
  |  |  ------------------
  ------------------
  416|       |
  417|    311|	return 0;
  418|    335|}
pim_tlv_parse_generation_id:
  424|    471|{
  425|    471|	const char *label = "generation_id";
  426|       |
  427|    471|	if (check_tlv_length(__func__, label, ifname, src_addr,
  ------------------
  |  Branch (427:6): [True: 17, False: 454]
  ------------------
  428|    471|			     sizeof(uint32_t), option_len)) {
  429|     17|		return -1;
  430|     17|	}
  431|       |
  432|    454|	check_tlv_redefinition_uint32_hex(__func__, label, ifname, src_addr,
  433|    454|					  *hello_options,
  434|    454|					  PIM_OPTION_MASK_GENERATION_ID,
  ------------------
  |  |   27|    454|#define PIM_OPTION_MASK_GENERATION_ID                (1 << 3) /* recv generation_id */
  ------------------
  435|    454|					  PIM_TLV_GET_GENERATION_ID(tlv_curr),
  ------------------
  |  |   59|    454|#define PIM_TLV_GET_GENERATION_ID(buf) PIM_TLV_GET_UINT32(buf)
  |  |  ------------------
  |  |  |  |   47|    454|	({                                                                     \
  |  |  |  |   48|    454|		uint32_t _tmp;                                                 \
  |  |  |  |   49|    454|		memcpy(&_tmp, (buf), sizeof(uint32_t));                        \
  |  |  |  |   50|    454|		ntohl(_tmp);                                                   \
  |  |  |  |   51|    454|	})
  |  |  ------------------
  ------------------
  436|    454|					  *hello_option_generation_id);
  437|       |
  438|    454|	PIM_OPTION_SET(*hello_options, PIM_OPTION_MASK_GENERATION_ID);
  ------------------
  |  |   35|    454|	((options) |= (typeof((options)))(option_mask))
  ------------------
  439|       |
  440|    454|	*hello_option_generation_id = PIM_TLV_GET_GENERATION_ID(tlv_curr);
  ------------------
  |  |   59|    454|#define PIM_TLV_GET_GENERATION_ID(buf) PIM_TLV_GET_UINT32(buf)
  |  |  ------------------
  |  |  |  |   47|    454|	({                                                                     \
  |  |  |  |   48|    454|		uint32_t _tmp;                                                 \
  |  |  |  |   49|    454|		memcpy(&_tmp, (buf), sizeof(uint32_t));                        \
  |  |  |  |   50|    454|		ntohl(_tmp);                                                   \
  |  |  |  |   51|    454|	})
  |  |  ------------------
  ------------------
  441|       |
  442|    454|	return 0;
  443|    471|}
pim_parse_addr_ucast_prefix:
  447|  4.20k|{
  448|  4.20k|	const int ucast_encoding_min_len = 3; /* 1 family + 1 type + 1 addr */
  449|  4.20k|	const uint8_t *addr;
  450|  4.20k|	const uint8_t *pastend;
  451|  4.20k|	int family;
  452|  4.20k|	int type;
  453|       |
  454|  4.20k|	if (buf_size < ucast_encoding_min_len) {
  ------------------
  |  Branch (454:6): [True: 34, False: 4.17k]
  ------------------
  455|     34|		zlog_warn(
  ------------------
  |  |  131|     34|#define zlog_warn(...) 0
  ------------------
  456|     34|			"%s: unicast address encoding overflow: left=%d needed=%d",
  457|     34|			__func__, buf_size, ucast_encoding_min_len);
  458|     34|		return -1;
  459|     34|	}
  460|       |
  461|  4.17k|	addr = buf;
  462|  4.17k|	pastend = buf + buf_size;
  463|       |
  464|  4.17k|	family = *addr++;
  465|  4.17k|	type = *addr++;
  466|       |
  467|  4.17k|	if (type) {
  ------------------
  |  Branch (467:6): [True: 90, False: 4.08k]
  ------------------
  468|     90|		zlog_warn("%s: unknown unicast address encoding type=%d",
  ------------------
  |  |  131|     90|#define zlog_warn(...) 0
  ------------------
  469|     90|			  __func__, type);
  470|     90|		return -2;
  471|     90|	}
  472|       |
  473|  4.08k|	switch (family) {
  474|  3.62k|	case PIM_MSG_ADDRESS_FAMILY_IPV4:
  ------------------
  |  Branch (474:2): [True: 3.62k, False: 456]
  ------------------
  475|  3.62k|		if ((addr + sizeof(struct in_addr)) > pastend) {
  ------------------
  |  Branch (475:7): [True: 7, False: 3.62k]
  ------------------
  476|      7|			zlog_warn(
  ------------------
  |  |  131|      7|#define zlog_warn(...) 0
  ------------------
  477|      7|				"%s: IPv4 unicast address overflow: left=%td needed=%zu",
  478|      7|				__func__, pastend - addr,
  479|      7|				sizeof(struct in_addr));
  480|      7|			return -3;
  481|      7|		}
  482|       |
  483|  3.62k|		p->family = AF_INET; /* notice: AF_INET !=
  484|       |					PIM_MSG_ADDRESS_FAMILY_IPV4 */
  485|  3.62k|		memcpy(&p->u.prefix4, addr, sizeof(struct in_addr));
  486|  3.62k|		p->prefixlen = IPV4_MAX_BITLEN;
  ------------------
  |  |  334|  3.62k|#define IPV4_MAX_BITLEN    32
  ------------------
  487|  3.62k|		addr += sizeof(struct in_addr);
  488|       |
  489|  3.62k|		break;
  490|    394|	case PIM_MSG_ADDRESS_FAMILY_IPV6:
  ------------------
  |  Branch (490:2): [True: 394, False: 3.69k]
  ------------------
  491|    394|		if ((addr + sizeof(struct in6_addr)) > pastend) {
  ------------------
  |  Branch (491:7): [True: 14, False: 380]
  ------------------
  492|     14|			zlog_warn(
  ------------------
  |  |  131|     14|#define zlog_warn(...) 0
  ------------------
  493|     14|				"%s: IPv6 unicast address overflow: left=%td needed %zu",
  494|     14|				__func__, pastend - addr,
  495|     14|				sizeof(struct in6_addr));
  496|     14|			return -3;
  497|     14|		}
  498|       |
  499|    380|		p->family = AF_INET6;
  500|    380|		p->prefixlen = IPV6_MAX_BITLEN;
  ------------------
  |  |  361|    380|#define IPV6_MAX_BITLEN    128
  ------------------
  501|    380|		memcpy(&p->u.prefix6, addr, sizeof(struct in6_addr));
  502|    380|		addr += sizeof(struct in6_addr);
  503|       |
  504|    380|		break;
  505|     62|	default: {
  ------------------
  |  Branch (505:2): [True: 62, False: 4.02k]
  ------------------
  506|     62|		zlog_warn("%s: unknown unicast address encoding family=%d from",
  ------------------
  |  |  131|     62|#define zlog_warn(...) 0
  ------------------
  507|     62|			  __func__, family);
  508|     62|		return -4;
  509|    394|	}
  510|  4.08k|	}
  511|       |
  512|  4.00k|	return addr - buf;
  513|  4.08k|}
pim_parse_addr_ucast:
  517|  1.13k|{
  518|  1.13k|	struct prefix p;
  519|  1.13k|	int ret;
  520|       |
  521|  1.13k|	ret = pim_parse_addr_ucast_prefix(&p, buf, buf_size);
  522|  1.13k|	if (ret < 0)
  ------------------
  |  Branch (522:6): [True: 148, False: 984]
  ------------------
  523|    148|		return ret;
  524|       |
  525|    984|	if (p.family != PIM_AF) {
  ------------------
  |  |   19|    984|#define PIM_AF		AF_INET
  ------------------
  |  Branch (525:6): [True: 17, False: 967]
  ------------------
  526|     17|		*wrong_af = true;
  527|     17|		return -5;
  528|     17|	}
  529|       |
  530|    967|	memcpy(out, &p.u.val, sizeof(*out));
  531|    967|	return ret;
  532|    984|}
pim_parse_addr_group:
  535|  6.61k|{
  536|  6.61k|	const int grp_encoding_min_len =
  537|  6.61k|		4; /* 1 family + 1 type + 1 reserved + 1 addr */
  538|  6.61k|	const uint8_t *addr;
  539|  6.61k|	const uint8_t *pastend;
  540|  6.61k|	int family;
  541|  6.61k|	int type;
  542|  6.61k|	int mask_len;
  543|       |
  544|  6.61k|	if (buf_size < grp_encoding_min_len) {
  ------------------
  |  Branch (544:6): [True: 101, False: 6.51k]
  ------------------
  545|    101|		zlog_warn(
  ------------------
  |  |  131|    101|#define zlog_warn(...) 0
  ------------------
  546|    101|			"%s: group address encoding overflow: left=%d needed=%d",
  547|    101|			__func__, buf_size, grp_encoding_min_len);
  548|    101|		return -1;
  549|    101|	}
  550|       |
  551|  6.51k|	addr = buf;
  552|  6.51k|	pastend = buf + buf_size;
  553|       |
  554|  6.51k|	family = *addr++;
  555|  6.51k|	type = *addr++;
  556|  6.51k|	++addr; /* skip b_reserved_z fields */
  557|  6.51k|	mask_len = *addr++;
  558|       |
  559|  6.51k|	if (type) {
  ------------------
  |  Branch (559:6): [True: 67, False: 6.44k]
  ------------------
  560|     67|		zlog_warn("%s: unknown group address encoding type=%d from",
  ------------------
  |  |  131|     67|#define zlog_warn(...) 0
  ------------------
  561|     67|			  __func__, type);
  562|     67|		return -2;
  563|     67|	}
  564|       |
  565|  6.44k|	if (family != PIM_MSG_ADDRESS_FAMILY) {
  ------------------
  |  |   23|  6.44k|#define PIM_MSG_ADDRESS_FAMILY PIM_MSG_ADDRESS_FAMILY_IPV4
  ------------------
  |  Branch (565:6): [True: 36, False: 6.40k]
  ------------------
  566|     36|		zlog_warn(
  ------------------
  |  |  131|     36|#define zlog_warn(...) 0
  ------------------
  567|     36|			"%s: unknown group address encoding family=%d mask_len=%d from",
  568|     36|			__func__, family, mask_len);
  569|     36|		return -4;
  570|     36|	}
  571|       |
  572|  6.40k|	if ((addr + sizeof(sg->grp)) > pastend) {
  ------------------
  |  Branch (572:6): [True: 18, False: 6.39k]
  ------------------
  573|     18|		zlog_warn(
  ------------------
  |  |  131|     18|#define zlog_warn(...) 0
  ------------------
  574|     18|			"%s: group address overflow: left=%td needed=%zu from",
  575|     18|			__func__, pastend - addr, sizeof(sg->grp));
  576|     18|		return -3;
  577|     18|	}
  578|       |
  579|  6.39k|	memcpy(&sg->grp, addr, sizeof(sg->grp));
  580|  6.39k|	addr += sizeof(sg->grp);
  581|       |
  582|  6.39k|	return addr - buf;
  583|  6.40k|}
pim_parse_addr_source:
  587|  63.2k|{
  588|  63.2k|	const int src_encoding_min_len =
  589|  63.2k|		4; /* 1 family + 1 type + 1 reserved + 1 addr */
  590|  63.2k|	const uint8_t *addr;
  591|  63.2k|	const uint8_t *pastend;
  592|  63.2k|	int family;
  593|  63.2k|	int type;
  594|  63.2k|	int mask_len;
  595|       |
  596|  63.2k|	if (buf_size < src_encoding_min_len) {
  ------------------
  |  Branch (596:6): [True: 331, False: 62.9k]
  ------------------
  597|    331|		zlog_warn(
  ------------------
  |  |  131|    331|#define zlog_warn(...) 0
  ------------------
  598|    331|			"%s: source address encoding overflow: left=%d needed=%d",
  599|    331|			__func__, buf_size, src_encoding_min_len);
  600|    331|		return -1;
  601|    331|	}
  602|       |
  603|  62.9k|	addr = buf;
  604|  62.9k|	pastend = buf + buf_size;
  605|       |
  606|  62.9k|	family = *addr++;
  607|  62.9k|	type = *addr++;
  608|  62.9k|	*flags = *addr++;
  609|  62.9k|	mask_len = *addr++;
  610|       |
  611|  62.9k|	if (type) {
  ------------------
  |  Branch (611:6): [True: 220, False: 62.7k]
  ------------------
  612|    220|		zlog_warn(
  ------------------
  |  |  131|    220|#define zlog_warn(...) 0
  ------------------
  613|    220|			"%s: unknown source address encoding type=%d: %02x%02x%02x%02x",
  614|    220|			__func__, type, buf[0], buf[1], buf[2], buf[3]);
  615|    220|		return -2;
  616|    220|	}
  617|       |
  618|  62.7k|	switch (family) {
  619|  62.7k|	case PIM_MSG_ADDRESS_FAMILY:
  ------------------
  |  |   23|  62.7k|#define PIM_MSG_ADDRESS_FAMILY PIM_MSG_ADDRESS_FAMILY_IPV4
  ------------------
  |  Branch (619:2): [True: 62.7k, False: 32]
  ------------------
  620|  62.7k|		if ((addr + sizeof(sg->src)) > pastend) {
  ------------------
  |  Branch (620:7): [True: 46, False: 62.6k]
  ------------------
  621|     46|			zlog_warn(
  ------------------
  |  |  131|     46|#define zlog_warn(...) 0
  ------------------
  622|     46|				"%s: IP source address overflow: left=%td needed=%zu",
  623|     46|				__func__, pastend - addr, sizeof(sg->src));
  624|     46|			return -3;
  625|     46|		}
  626|       |
  627|  62.6k|		memcpy(&sg->src, addr, sizeof(sg->src));
  628|       |
  629|       |		/*
  630|       |		   RFC 4601: 4.9.1  Encoded Source and Group Address Formats
  631|       |
  632|       |		   Encoded-Source Address
  633|       |
  634|       |		   The mask length MUST be equal to the mask length in bits for
  635|       |		   the given Address Family and Encoding Type (32 for IPv4
  636|       |		   native and 128 for IPv6 native).  A router SHOULD ignore any
  637|       |		   messages received with any other mask length.
  638|       |		*/
  639|  62.6k|		if (mask_len != PIM_MAX_BITLEN) {
  ------------------
  |  |   24|  62.6k|#define PIM_MAX_BITLEN	IPV4_MAX_BITLEN
  |  |  ------------------
  |  |  |  |  334|  62.6k|#define IPV4_MAX_BITLEN    32
  |  |  ------------------
  ------------------
  |  Branch (639:7): [True: 54, False: 62.6k]
  ------------------
  640|     54|			zlog_warn("%s: IP bad source address mask: %d",
  ------------------
  |  |  131|     54|#define zlog_warn(...) 0
  ------------------
  641|     54|				  __func__, mask_len);
  642|     54|			return -4;
  643|     54|		}
  644|       |
  645|  62.6k|		addr += sizeof(sg->src);
  646|       |
  647|  62.6k|		break;
  648|     32|	default:
  ------------------
  |  Branch (648:2): [True: 32, False: 62.7k]
  ------------------
  649|     32|		zlog_warn(
  ------------------
  |  |  131|     32|#define zlog_warn(...) 0
  ------------------
  650|     32|			"%s: unknown source address encoding family=%d: %02x%02x%02x%02x",
  651|     32|			__func__, family, buf[0], buf[1], buf[2], buf[3]);
  652|     32|		return -5;
  653|  62.7k|	}
  654|       |
  655|  62.6k|	return addr - buf;
  656|  62.7k|}
pim_tlv_parse_addr_list:
  670|  15.4k|{
  671|  15.4k|	const uint8_t *addr;
  672|  15.4k|	const uint8_t *pastend;
  673|       |
  674|  15.4k|	assert(hello_option_addr_list);
  ------------------
  |  |   51|  15.4k|	({                                                                     \
  |  |   52|  15.4k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  15.4k|			(used)) = {                                            \
  |  |   54|  15.4k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  15.4k|	{                                                                      \
  |  |  |  |  284|  15.4k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  15.4k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  15.4k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  15.4k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  15.4k|	}                                                                      \
  |  |  ------------------
  |  |   55|  15.4k|			.expr = #expr_,                                        \
  |  |   56|  15.4k|		};                                                             \
  |  |   57|  15.4k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  15.4k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  15.4k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  15.4k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  15.4k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 15.4k]
  |  |  |  Branch (58:24): [True: 15.4k, False: 0]
  |  |  ------------------
  |  |   59|  15.4k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  15.4k|	})
  ------------------
  675|       |
  676|       |	/*
  677|       |	  Scan addr list
  678|       |	 */
  679|  15.4k|	addr = tlv_curr;
  680|  15.4k|	pastend = tlv_curr + option_len;
  681|  18.4k|	while (addr < pastend) {
  ------------------
  |  Branch (681:9): [True: 3.07k, False: 15.3k]
  ------------------
  682|  3.07k|		struct prefix tmp, src_pfx;
  683|  3.07k|		int addr_offset;
  684|       |
  685|       |		/*
  686|       |		  Parse ucast addr
  687|       |		 */
  688|  3.07k|		addr_offset =
  689|  3.07k|			pim_parse_addr_ucast_prefix(&tmp, addr, pastend - addr);
  690|  3.07k|		if (addr_offset < 1) {
  ------------------
  |  Branch (690:7): [True: 59, False: 3.01k]
  ------------------
  691|     59|			zlog_warn(
  ------------------
  |  |  131|     59|#define zlog_warn(...) 0
  ------------------
  692|     59|				"%s: pim_parse_addr_ucast() failure: from %pPAs on %s",
  693|     59|				__func__, &src_addr, ifname);
  694|     59|			FREE_ADDR_LIST(*hello_option_addr_list);
  ------------------
  |  |  659|     59|	{                                                                      \
  |  |  660|     59|		if (hello_option_addr_list) {                                  \
  |  |  ------------------
  |  |  |  Branch (660:7): [True: 27, False: 32]
  |  |  ------------------
  |  |  661|     27|			list_delete(&hello_option_addr_list);                  \
  |  |  662|     27|			hello_option_addr_list = 0;                            \
  |  |  663|     27|		}                                                              \
  |  |  664|     59|	}
  ------------------
  695|     59|			return -1;
  696|     59|		}
  697|  3.01k|		addr += addr_offset;
  698|       |
  699|       |		/*
  700|       |		  Debug
  701|       |		 */
  702|  3.01k|		if (PIM_DEBUG_PIM_TRACE) {
  ------------------
  |  |  146|  3.01k|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|  3.01k|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|  3.01k|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 3.01k]
  |  |  ------------------
  ------------------
  703|      0|			switch (tmp.family) {
  704|      0|			case AF_INET: {
  ------------------
  |  Branch (704:4): [True: 0, False: 0]
  ------------------
  705|      0|				char addr_str[INET_ADDRSTRLEN];
  706|      0|				pim_inet4_dump("<addr?>", tmp.u.prefix4,
  ------------------
  |  |   36|      0|#define pim_inet4_dump prefix_mcast_inet4_dump
  ------------------
  707|      0|					       addr_str, sizeof(addr_str));
  708|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  709|      0|					"%s: PIM hello TLV option: list_old_size=%d IPv4 address %s from %pPAs on %s",
  710|      0|					__func__,
  711|      0|					*hello_option_addr_list
  712|      0|						? ((int)listcount(
  713|      0|							  *hello_option_addr_list))
  714|      0|						: -1,
  715|      0|					addr_str, &src_addr, ifname);
  716|      0|			} break;
  717|      0|			case AF_INET6:
  ------------------
  |  Branch (717:4): [True: 0, False: 0]
  ------------------
  718|      0|				break;
  719|      0|			default:
  ------------------
  |  Branch (719:4): [True: 0, False: 0]
  ------------------
  720|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  721|      0|					"%s: PIM hello TLV option: list_old_size=%d UNKNOWN address family from %pPAs on %s",
  722|      0|					__func__,
  723|      0|					*hello_option_addr_list
  724|      0|						? ((int)listcount(
  725|      0|							  *hello_option_addr_list))
  726|      0|						: -1,
  727|      0|					&src_addr, ifname);
  728|      0|			}
  729|      0|		}
  730|       |
  731|       |		/*
  732|       |		  Exclude neighbor's primary address if incorrectly included in
  733|       |		  the secondary address list
  734|       |		 */
  735|  3.01k|		pim_addr_to_prefix(&src_pfx, src_addr);
  736|  3.01k|		if (!prefix_cmp(&tmp, &src_pfx)) {
  ------------------
  |  Branch (736:7): [True: 357, False: 2.66k]
  ------------------
  737|    357|			zlog_warn(
  ------------------
  |  |  131|    357|#define zlog_warn(...) 0
  ------------------
  738|    357|				"%s: ignoring primary address in secondary list from %pPAs on %s",
  739|    357|				__func__, &src_addr, ifname);
  740|    357|			continue;
  741|    357|		}
  742|       |
  743|       |		/*
  744|       |		  Allocate list if needed
  745|       |		 */
  746|  2.66k|		if (!*hello_option_addr_list) {
  ------------------
  |  Branch (746:7): [True: 140, False: 2.52k]
  ------------------
  747|    140|			*hello_option_addr_list = list_new();
  748|    140|			(*hello_option_addr_list)->del = prefix_free_lists;
  749|    140|		}
  750|       |
  751|       |		/*
  752|       |		  Attach addr to list
  753|       |		 */
  754|  2.66k|		{
  755|  2.66k|			struct prefix *p;
  756|  2.66k|			p = prefix_new();
  757|  2.66k|			prefix_copy(p, &tmp);
  758|  2.66k|			listnode_add(*hello_option_addr_list, p);
  759|  2.66k|		}
  760|       |
  761|  2.66k|	} /* while (addr < pastend) */
  762|       |
  763|       |	/*
  764|       |	  Mark hello option
  765|       |	 */
  766|  15.3k|	PIM_OPTION_SET(*hello_options, PIM_OPTION_MASK_ADDRESS_LIST);
  ------------------
  |  |   35|  15.3k|	((options) |= (typeof((options)))(option_mask))
  ------------------
  767|       |
  768|  15.3k|	return 0;
  769|  15.4k|}
pim_tlv.c:check_tlv_length:
  287|  1.56k|{
  288|  1.56k|	if (option_len != correct_len) {
  ------------------
  |  Branch (288:6): [True: 75, False: 1.48k]
  ------------------
  289|     75|		zlog_warn(
  ------------------
  |  |  131|     75|#define zlog_warn(...) 0
  ------------------
  290|     75|			"%s: PIM hello %s TLV with incorrect value size=%d correct=%d from %pPAs on interface %s",
  291|     75|			label, tlv_name, option_len, correct_len, &src_addr,
  292|     75|			ifname);
  293|     75|		return -1;
  294|     75|	}
  295|       |
  296|  1.48k|	return 0;
  297|  1.56k|}
pim_tlv.c:check_tlv_redefinition_uint16:
  305|    720|{
  306|    720|	if (PIM_OPTION_IS_SET(options, opt_mask))
  ------------------
  |  |   38|    720|#define PIM_OPTION_IS_SET(options, option_mask) ((options) & (option_mask))
  |  |  ------------------
  |  |  |  Branch (38:49): [True: 666, False: 54]
  |  |  ------------------
  ------------------
  307|    666|		zlog_warn(
  ------------------
  |  |  131|    666|#define zlog_warn(...) 0
  ------------------
  308|    720|			"%s: PIM hello TLV redefined %s=%u old=%u from %pPAs on interface %s",
  309|    720|			label, tlv_name, new, old, &src_addr, ifname);
  310|    720|}
pim_tlv.c:check_tlv_redefinition_uint32:
  318|    311|{
  319|    311|	if (PIM_OPTION_IS_SET(options, opt_mask))
  ------------------
  |  |   38|    311|#define PIM_OPTION_IS_SET(options, option_mask) ((options) & (option_mask))
  |  |  ------------------
  |  |  |  Branch (38:49): [True: 266, False: 45]
  |  |  ------------------
  ------------------
  320|    266|		zlog_warn(
  ------------------
  |  |  131|    266|#define zlog_warn(...) 0
  ------------------
  321|    311|			"%s: PIM hello TLV redefined %s=%u old=%u from %pPAs on interface %s",
  322|    311|			label, tlv_name, new, old, &src_addr, ifname);
  323|    311|}
pim_tlv.c:check_tlv_redefinition_uint32_hex:
  329|    454|{
  330|    454|	if (PIM_OPTION_IS_SET(options, opt_mask))
  ------------------
  |  |   38|    454|#define PIM_OPTION_IS_SET(options, option_mask) ((options) & (option_mask))
  |  |  ------------------
  |  |  |  Branch (38:49): [True: 347, False: 107]
  |  |  ------------------
  ------------------
  331|    347|		zlog_warn(
  ------------------
  |  |  131|    347|#define zlog_warn(...) 0
  ------------------
  332|    454|			"%s: PIM hello TLV redefined %s=%08x old=%08x from %pPAs on interface %s",
  333|    454|			label, tlv_name, new, old, &src_addr, ifname);
  334|    454|}

pim_upstream_del:
  177|  42.5k|{
  178|  42.5k|	struct listnode *node, *nnode;
  179|  42.5k|	struct pim_ifchannel *ch;
  180|  42.5k|	bool notify_msdp = false;
  181|       |
  182|  42.5k|	if (PIM_DEBUG_PIM_TRACE)
  ------------------
  |  |  146|  42.5k|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|  42.5k|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|  42.5k|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 42.5k]
  |  |  ------------------
  ------------------
  183|      0|		zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  184|  42.5k|			"%s(%s): Delete %s[%s] ref count: %d , flags: %d c_oil ref count %d (Pre decrement)",
  185|  42.5k|			__func__, name, up->sg_str, pim->vrf->name,
  186|  42.5k|			up->ref_count, up->flags,
  187|  42.5k|			up->channel_oil->oil_ref_count);
  188|       |
  189|  42.5k|	 assert(up->ref_count > 0);
  ------------------
  |  |   51|  42.5k|	({                                                                     \
  |  |   52|  42.5k|		static const struct xref_assert _xref __attribute__(           \
  |  |   53|  42.5k|			(used)) = {                                            \
  |  |   54|  42.5k|			.xref = XREF_INIT(XREFT_ASSERT, NULL, __func__),       \
  |  |  ------------------
  |  |  |  |  283|  42.5k|	{                                                                      \
  |  |  |  |  284|  42.5k|		/* .xrefdata = */ (xrefdata_),                                 \
  |  |  |  |  285|  42.5k|		/* .type = */ (type_),                                         \
  |  |  |  |  286|  42.5k|		/* .line = */ __LINE__,                                        \
  |  |  |  |  287|       |		/* .file = */ __FILE__,                                        \
  |  |  |  |  288|  42.5k|		/* .func = */ func_,                                           \
  |  |  |  |  289|  42.5k|	}                                                                      \
  |  |  ------------------
  |  |   55|  42.5k|			.expr = #expr_,                                        \
  |  |   56|  42.5k|		};                                                             \
  |  |   57|  42.5k|		XREF_LINK(_xref.xref);                                         \
  |  |  ------------------
  |  |  |  |  254|  42.5k|	static const struct xref * const NAMECTR(xref_p_)                      \
  |  |  |  |  255|  42.5k|			__attribute__((xref_array_attr))                       \
  |  |  |  |  256|  42.5k|		= &(dst)                                                       \
  |  |  ------------------
  |  |   58|  42.5k|		if (__builtin_expect((expr_) ? 0 : 1, 0))                      \
  |  |  ------------------
  |  |  |  Branch (58:7): [True: 0, False: 42.5k]
  |  |  |  Branch (58:24): [True: 42.5k, False: 0]
  |  |  ------------------
  |  |   59|  42.5k|			do {                                                   \
  |  |   60|      0|				_zlog_assert_failed(&_xref, NULL);             \
  |  |   61|      0|			} while (expr_);                                       \
  |  |  ------------------
  |  |  |  Branch (61:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   62|  42.5k|	})
  ------------------
  190|       |
  191|  42.5k|	--up->ref_count;
  192|       |
  193|  42.5k|	if (up->ref_count >= 1)
  ------------------
  |  Branch (193:6): [True: 0, False: 42.5k]
  ------------------
  194|      0|		return up;
  195|       |
  196|  42.5k|	if (PIM_DEBUG_TRACE)
  ------------------
  |  |  181|  42.5k|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_GM_TRACE))
  |  |  ------------------
  |  |  |  |   77|  42.5k|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_GM_TRACE))
  |  |  ------------------
  |  |  |  |   81|  42.5k|#define PIM_MASK_GM_TRACE            (1 << 9)
  |  |  ------------------
  |  |  |  Branch (181:2): [True: 0, False: 42.5k]
  |  |  ------------------
  ------------------
  197|      0|		zlog_debug("pim_upstream free vrf:%s %s flags 0x%x",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  198|  42.5k|			   pim->vrf->name, up->sg_str, up->flags);
  199|       |
  200|  42.5k|	if (pim_up_mlag_is_local(up))
  ------------------
  |  Branch (200:6): [True: 0, False: 42.5k]
  ------------------
  201|      0|		pim_mlag_up_local_del(pim, up);
  202|       |
  203|  42.5k|	pim_upstream_timers_stop(up);
  204|       |
  205|  42.5k|	if (up->join_state == PIM_UPSTREAM_JOINED) {
  ------------------
  |  Branch (205:6): [True: 0, False: 42.5k]
  ------------------
  206|      0|		pim_jp_agg_single_upstream_send(&up->rpf, up, 0);
  207|       |
  208|      0|		if (pim_addr_is_any(up->sg.src)) {
  ------------------
  |  Branch (208:7): [True: 0, False: 0]
  ------------------
  209|       |			/* if a (*, G) entry in the joined state is being
  210|       |			 * deleted we
  211|       |			 * need to notify MSDP */
  212|      0|			notify_msdp = true;
  213|      0|		}
  214|      0|	}
  215|       |
  216|  42.5k|	join_timer_stop(up);
  217|  42.5k|	pim_jp_agg_upstream_verification(up, false);
  218|  42.5k|	up->rpf.source_nexthop.interface = NULL;
  219|       |
  220|  42.5k|	if (!pim_addr_is_any(up->sg.src)) {
  ------------------
  |  Branch (220:6): [True: 42.5k, False: 0]
  ------------------
  221|  42.5k|		if (pim->upstream_sg_wheel)
  ------------------
  |  Branch (221:7): [True: 42.5k, False: 0]
  ------------------
  222|  42.5k|			wheel_remove_item(pim->upstream_sg_wheel, up);
  223|  42.5k|		notify_msdp = true;
  224|  42.5k|	}
  225|       |
  226|  42.5k|	pim_mroute_del(up->channel_oil, __func__);
  227|  42.5k|	upstream_channel_oil_detach(up);
  228|       |
  229|  42.5k|	for (ALL_LIST_ELEMENTS(up->ifchannels, node, nnode, ch))
  ------------------
  |  |  320|  42.5k|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|  42.5k|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 42.5k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  321|  42.5k|	(node) != NULL                                                         \
  |  |  ------------------
  |  |  |  Branch (321:2): [True: 0, False: 42.5k]
  |  |  ------------------
  |  |  322|  42.5k|		&& ((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|  42.5k|	(node) = (nextnode), ((data) = NULL)
  ------------------
  230|      0|		pim_ifchannel_delete(ch);
  231|  42.5k|	list_delete(&up->ifchannels);
  232|       |
  233|  42.5k|	pim_upstream_remove_children(pim, up);
  234|  42.5k|	if (up->sources)
  ------------------
  |  Branch (234:6): [True: 0, False: 42.5k]
  ------------------
  235|      0|		list_delete(&up->sources);
  236|       |
  237|  42.5k|	if (up->parent && up->parent->sources)
  ------------------
  |  Branch (237:6): [True: 42.5k, False: 0]
  |  Branch (237:20): [True: 42.5k, False: 0]
  ------------------
  238|  42.5k|		listnode_delete(up->parent->sources, up);
  239|  42.5k|	up->parent = NULL;
  240|       |
  241|  42.5k|	rb_pim_upstream_del(&pim->upstream_head, up);
  242|       |
  243|  42.5k|	if (notify_msdp) {
  ------------------
  |  Branch (243:6): [True: 42.5k, False: 0]
  ------------------
  244|  42.5k|		pim_msdp_up_del(pim, &up->sg);
  245|  42.5k|	}
  246|       |
  247|       |	/* When RP gets deleted, pim_rp_del() deregister addr with Zebra NHT
  248|       |	 * and assign up->upstream_addr as INADDR_ANY.
  249|       |	 * So before de-registering the upstream address, check if is not equal
  250|       |	 * to INADDR_ANY. This is done in order to avoid de-registering for
  251|       |	 * 255.255.255.255 which is maintained for some reason..
  252|       |	 */
  253|  42.5k|	if (!pim_addr_is_any(up->upstream_addr)) {
  ------------------
  |  Branch (253:6): [True: 25.1k, False: 17.3k]
  ------------------
  254|       |		/* Deregister addr with Zebra NHT */
  255|  25.1k|		if (PIM_DEBUG_PIM_TRACE)
  ------------------
  |  |  146|  25.1k|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|  25.1k|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|  25.1k|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 25.1k]
  |  |  ------------------
  ------------------
  256|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  257|  25.1k|				"%s: Deregister upstream %s addr %pPA with Zebra NHT",
  258|  25.1k|				__func__, up->sg_str, &up->upstream_addr);
  259|  25.1k|		pim_delete_tracked_nexthop(pim, up->upstream_addr, up, NULL);
  260|  25.1k|	}
  261|       |
  262|  42.5k|	XFREE(MTYPE_PIM_UPSTREAM, up);
  ------------------
  |  |  170|  42.5k|	do {                                                                   \
  |  |  171|  42.5k|		qfree(mtype, ptr);                                             \
  |  |  172|  42.5k|		ptr = NULL;                                                    \
  |  |  173|  42.5k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (173:11): [Folded, False: 42.5k]
  |  |  ------------------
  ------------------
  263|       |
  264|       |	return NULL;
  265|  42.5k|}
pim_upstream_update_use_rpt:
  630|  12.9M|{
  631|  12.9M|	bool old_use_rpt;
  632|  12.9M|	bool new_use_rpt;
  633|       |
  634|  12.9M|	if (pim_addr_is_any(up->sg.src))
  ------------------
  |  Branch (634:6): [True: 75, False: 12.9M]
  ------------------
  635|     75|		return;
  636|       |
  637|  12.9M|	old_use_rpt = !!PIM_UPSTREAM_FLAG_TEST_USE_RPT(up->flags);
  ------------------
  |  |  108|  12.9M|#define PIM_UPSTREAM_FLAG_TEST_USE_RPT(flags) ((flags) & PIM_UPSTREAM_FLAG_MASK_USE_RPT)
  |  |  ------------------
  |  |  |  |   77|  12.9M|#define PIM_UPSTREAM_FLAG_MASK_USE_RPT                 (1 << 20)
  |  |  ------------------
  ------------------
  638|       |
  639|       |	/* We will use the SPT (IIF=RPF_interface(S) if -
  640|       |	 * 1. We have decided to join the SPT
  641|       |	 * 2. We are FHR
  642|       |	 * 3. Source is directly connected
  643|       |	 * 4. We are RP (parent's IIF is lo or vrf-device)
  644|       |	 * In all other cases the source will stay along the RPT and
  645|       |	 * IIF=RPF_interface(RP).
  646|       |	 */
  647|  12.9M|	if (up->join_state == PIM_UPSTREAM_JOINED ||
  ------------------
  |  Branch (647:6): [True: 0, False: 12.9M]
  ------------------
  648|  12.9M|			PIM_UPSTREAM_FLAG_TEST_FHR(up->flags) ||
  ------------------
  |  |   89|  25.9M|#define PIM_UPSTREAM_FLAG_TEST_FHR(flags) ((flags) & PIM_UPSTREAM_FLAG_MASK_FHR)
  |  |  ------------------
  |  |  |  |   20|  12.9M|#define PIM_UPSTREAM_FLAG_MASK_FHR                     (1 << 2)
  |  |  ------------------
  |  |  |  Branch (89:43): [True: 0, False: 12.9M]
  |  |  ------------------
  ------------------
  649|  12.9M|			pim_if_connected_to_source(
  ------------------
  |  Branch (649:4): [True: 0, False: 12.9M]
  ------------------
  650|  12.9M|				up->rpf.source_nexthop.interface,
  651|  12.9M|				up->sg.src) ||
  652|       |			/* XXX - need to switch this to a more efficient
  653|       |			 * lookup API
  654|       |			 */
  655|  12.9M|			I_am_RP(up->pim, up->sg.grp))
  ------------------
  |  |   66|  12.9M|#define I_am_RP(P, G)  pim_rp_i_am_rp ((P), (G))
  |  |  ------------------
  |  |  |  Branch (66:24): [True: 13.1k, False: 12.9M]
  |  |  ------------------
  ------------------
  656|       |		/* use SPT */
  657|  13.1k|		PIM_UPSTREAM_FLAG_UNSET_USE_RPT(up->flags);
  ------------------
  |  |  199|  13.1k|	((flags) &= (typeof((flags))) ~PIM_UPSTREAM_FLAG_MASK_USE_RPT)
  |  |  ------------------
  |  |  |  |   77|  13.1k|#define PIM_UPSTREAM_FLAG_MASK_USE_RPT                 (1 << 20)
  |  |  ------------------
  ------------------
  658|  12.9M|	else
  659|       |		/* use RPT */
  660|  12.9M|		PIM_UPSTREAM_FLAG_SET_USE_RPT(up->flags);
  ------------------
  |  |  152|  12.9M|	((flags) |= (typeof((flags)))PIM_UPSTREAM_FLAG_MASK_USE_RPT)
  |  |  ------------------
  |  |  |  |   77|  12.9M|#define PIM_UPSTREAM_FLAG_MASK_USE_RPT                 (1 << 20)
  |  |  ------------------
  ------------------
  661|       |
  662|  12.9M|	new_use_rpt = !!PIM_UPSTREAM_FLAG_TEST_USE_RPT(up->flags);
  ------------------
  |  |  108|  12.9M|#define PIM_UPSTREAM_FLAG_TEST_USE_RPT(flags) ((flags) & PIM_UPSTREAM_FLAG_MASK_USE_RPT)
  |  |  ------------------
  |  |  |  |   77|  12.9M|#define PIM_UPSTREAM_FLAG_MASK_USE_RPT                 (1 << 20)
  |  |  ------------------
  ------------------
  663|  12.9M|	if (old_use_rpt != new_use_rpt) {
  ------------------
  |  Branch (663:6): [True: 33.7k, False: 12.9M]
  ------------------
  664|  33.7k|		if (PIM_DEBUG_PIM_EVENTS)
  ------------------
  |  |  137|  33.7k|#define PIM_DEBUG_PIM_EVENTS (router->debugs & PIM_MASK_PIM_EVENTS)
  |  |  ------------------
  |  |  |  |   72|  33.7k|#define PIM_MASK_PIM_EVENTS          (1 << 0)
  |  |  ------------------
  |  |  |  Branch (137:30): [True: 0, False: 33.7k]
  |  |  ------------------
  ------------------
  665|      0|			zlog_debug("%s switched from %s to %s",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  666|  33.7k|					up->sg_str,
  667|  33.7k|					old_use_rpt?"RPT":"SPT",
  668|  33.7k|					new_use_rpt?"RPT":"SPT");
  669|  33.7k|		if (update_mroute)
  ------------------
  |  Branch (669:7): [True: 8.43k, False: 25.3k]
  ------------------
  670|  8.43k|			pim_upstream_mroute_add(up->channel_oil, __func__);
  671|  33.7k|	}
  672|  12.9M|}
pim_upstream_reeval_use_rpt:
  678|  26.8k|{
  679|  26.8k|	struct pim_upstream *up;
  680|       |
  681|  17.4M|	frr_each (rb_pim_upstream, &pim->upstream_head, up) {
  ------------------
  |  |   21|  17.4M|	for (item = prefix##_first(head); item;                                \
  |  |  ------------------
  |  |  |  Branch (21:36): [True: 17.4M, False: 26.8k]
  |  |  ------------------
  |  |   22|  17.4M|			item = prefix##_next(head, item))
  ------------------
  682|  17.4M|		if (pim_addr_is_any(up->sg.src))
  ------------------
  |  Branch (682:7): [True: 4.47M, False: 12.9M]
  ------------------
  683|  4.47M|			continue;
  684|       |
  685|  12.9M|		pim_upstream_update_use_rpt(up, true /*update_mroute*/);
  686|  12.9M|	}
  687|  26.8k|}
pim_upstream_switch:
  691|  12.6k|{
  692|  12.6k|	enum pim_upstream_state old_state = up->join_state;
  693|       |
  694|  12.6k|	if (pim_addr_is_any(up->upstream_addr)) {
  ------------------
  |  Branch (694:6): [True: 11.8k, False: 823]
  ------------------
  695|  11.8k|		if (PIM_DEBUG_PIM_EVENTS)
  ------------------
  |  |  137|  11.8k|#define PIM_DEBUG_PIM_EVENTS (router->debugs & PIM_MASK_PIM_EVENTS)
  |  |  ------------------
  |  |  |  |   72|  11.8k|#define PIM_MASK_PIM_EVENTS          (1 << 0)
  |  |  ------------------
  |  |  |  Branch (137:30): [True: 0, False: 11.8k]
  |  |  ------------------
  ------------------
  696|      0|			zlog_debug("%s: RPF not configured for %s", __func__,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  697|  11.8k|				   up->sg_str);
  698|  11.8k|		return;
  699|  11.8k|	}
  700|       |
  701|    823|	if (!up->rpf.source_nexthop.interface)  {
  ------------------
  |  Branch (701:6): [True: 823, False: 0]
  ------------------
  702|    823|		if (PIM_DEBUG_PIM_EVENTS)
  ------------------
  |  |  137|    823|#define PIM_DEBUG_PIM_EVENTS (router->debugs & PIM_MASK_PIM_EVENTS)
  |  |  ------------------
  |  |  |  |   72|    823|#define PIM_MASK_PIM_EVENTS          (1 << 0)
  |  |  ------------------
  |  |  |  Branch (137:30): [True: 0, False: 823]
  |  |  ------------------
  ------------------
  703|      0|			zlog_debug("%s: RP not reachable for %s", __func__,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  704|    823|				   up->sg_str);
  705|    823|		return;
  706|    823|	}
  707|       |
  708|      0|	if (PIM_DEBUG_PIM_EVENTS) {
  ------------------
  |  |  137|      0|#define PIM_DEBUG_PIM_EVENTS (router->debugs & PIM_MASK_PIM_EVENTS)
  |  |  ------------------
  |  |  |  |   72|      0|#define PIM_MASK_PIM_EVENTS          (1 << 0)
  |  |  ------------------
  |  |  |  Branch (137:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  709|      0|		zlog_debug("%s: PIM_UPSTREAM_%s: (S,G) old: %s new: %s",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  710|      0|			   __func__, up->sg_str,
  711|      0|			   pim_upstream_state2str(up->join_state),
  712|      0|			   pim_upstream_state2str(new_state));
  713|      0|	}
  714|       |
  715|      0|	up->join_state = new_state;
  716|      0|	if (old_state != new_state)
  ------------------
  |  Branch (716:6): [True: 0, False: 0]
  ------------------
  717|      0|		up->state_transition = pim_time_monotonic_sec();
  718|       |
  719|      0|	pim_upstream_update_assert_tracking_desired(up);
  720|       |
  721|      0|	if (new_state == PIM_UPSTREAM_JOINED) {
  ------------------
  |  Branch (721:6): [True: 0, False: 0]
  ------------------
  722|      0|		pim_upstream_inherited_olist_decide(pim, up);
  723|      0|		if (old_state != PIM_UPSTREAM_JOINED) {
  ------------------
  |  Branch (723:7): [True: 0, False: 0]
  ------------------
  724|      0|			int old_fhr = PIM_UPSTREAM_FLAG_TEST_FHR(up->flags);
  ------------------
  |  |   89|      0|#define PIM_UPSTREAM_FLAG_TEST_FHR(flags) ((flags) & PIM_UPSTREAM_FLAG_MASK_FHR)
  |  |  ------------------
  |  |  |  |   20|      0|#define PIM_UPSTREAM_FLAG_MASK_FHR                     (1 << 2)
  |  |  ------------------
  ------------------
  725|       |
  726|      0|			pim_msdp_up_join_state_changed(pim, up);
  727|      0|			if (pim_upstream_could_register(up)) {
  ------------------
  |  Branch (727:8): [True: 0, False: 0]
  ------------------
  728|      0|				PIM_UPSTREAM_FLAG_SET_FHR(up->flags);
  ------------------
  |  |  118|      0|	((flags) |= (typeof((flags)))PIM_UPSTREAM_FLAG_MASK_FHR)
  |  |  ------------------
  |  |  |  |   20|      0|#define PIM_UPSTREAM_FLAG_MASK_FHR                     (1 << 2)
  |  |  ------------------
  ------------------
  729|      0|				if (!old_fhr
  ------------------
  |  Branch (729:9): [True: 0, False: 0]
  ------------------
  730|      0|				    && PIM_UPSTREAM_FLAG_TEST_SRC_STREAM(
  ------------------
  |  |   92|      0|#define PIM_UPSTREAM_FLAG_TEST_SRC_STREAM(flags) ((flags) & PIM_UPSTREAM_FLAG_MASK_SRC_STREAM)
  |  |  ------------------
  |  |  |  |   23|      0|#define PIM_UPSTREAM_FLAG_MASK_SRC_STREAM              (1 << 5)
  |  |  ------------------
  |  |  |  Branch (92:50): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  731|      0|					       up->flags)) {
  732|      0|					pim_upstream_keep_alive_timer_start(
  733|      0|						up, pim->keep_alive_time);
  734|      0|					pim_register_join(up);
  735|      0|				}
  736|      0|			} else {
  737|      0|				pim_upstream_send_join(up);
  738|      0|				join_timer_start(up);
  739|      0|			}
  740|      0|		}
  741|      0|		if (old_state != new_state)
  ------------------
  |  Branch (741:7): [True: 0, False: 0]
  ------------------
  742|      0|			pim_upstream_update_use_rpt(up, true /*update_mroute*/);
  743|      0|	} else {
  744|      0|		bool old_use_rpt;
  745|      0|		bool new_use_rpt;
  746|      0|		bool send_xg_jp = false;
  747|       |
  748|      0|		forward_off(up);
  749|       |		/*
  750|       |		 * RFC 4601 Sec 4.5.7:
  751|       |		 * JoinDesired(S,G) -> False, set SPTbit to false.
  752|       |		 */
  753|      0|		if (!pim_addr_is_any(up->sg.src))
  ------------------
  |  Branch (753:7): [True: 0, False: 0]
  ------------------
  754|      0|			up->sptbit = PIM_UPSTREAM_SPTBIT_FALSE;
  755|       |
  756|      0|		if (old_state == PIM_UPSTREAM_JOINED)
  ------------------
  |  Branch (756:7): [True: 0, False: 0]
  ------------------
  757|      0|			pim_msdp_up_join_state_changed(pim, up);
  758|       |
  759|      0|		if (old_state != new_state) {
  ------------------
  |  Branch (759:7): [True: 0, False: 0]
  ------------------
  760|      0|			old_use_rpt =
  761|      0|				!!PIM_UPSTREAM_FLAG_TEST_USE_RPT(up->flags);
  ------------------
  |  |  108|      0|#define PIM_UPSTREAM_FLAG_TEST_USE_RPT(flags) ((flags) & PIM_UPSTREAM_FLAG_MASK_USE_RPT)
  |  |  ------------------
  |  |  |  |   77|      0|#define PIM_UPSTREAM_FLAG_MASK_USE_RPT                 (1 << 20)
  |  |  ------------------
  ------------------
  762|      0|			pim_upstream_update_use_rpt(up, true /*update_mroute*/);
  763|      0|			new_use_rpt =
  764|      0|				!!PIM_UPSTREAM_FLAG_TEST_USE_RPT(up->flags);
  ------------------
  |  |  108|      0|#define PIM_UPSTREAM_FLAG_TEST_USE_RPT(flags) ((flags) & PIM_UPSTREAM_FLAG_MASK_USE_RPT)
  |  |  ------------------
  |  |  |  |   77|      0|#define PIM_UPSTREAM_FLAG_MASK_USE_RPT                 (1 << 20)
  |  |  ------------------
  ------------------
  765|      0|			if (new_use_rpt &&
  ------------------
  |  Branch (765:8): [True: 0, False: 0]
  ------------------
  766|      0|					(new_use_rpt != old_use_rpt) &&
  ------------------
  |  Branch (766:6): [True: 0, False: 0]
  ------------------
  767|      0|					up->parent)
  ------------------
  |  Branch (767:6): [True: 0, False: 0]
  ------------------
  768|       |				/* we have decided to switch from the SPT back
  769|       |				 * to the RPT which means we need to cancel
  770|       |				 * any previously sent SGrpt prunes immediately
  771|       |				 */
  772|      0|				send_xg_jp = true;
  773|      0|		}
  774|       |
  775|       |		/* IHR, Trigger SGRpt on *,G IIF to prune S,G from RPT towards
  776|       |		   RP.
  777|       |		   If I am RP for G then send S,G prune to its IIF. */
  778|      0|		if (pim_upstream_is_sg_rpt(up) && up->parent &&
  ------------------
  |  Branch (778:7): [True: 0, False: 0]
  |  Branch (778:37): [True: 0, False: 0]
  ------------------
  779|      0|				!I_am_RP(pim, up->sg.grp))
  ------------------
  |  |   66|      0|#define I_am_RP(P, G)  pim_rp_i_am_rp ((P), (G))
  ------------------
  |  Branch (779:5): [True: 0, False: 0]
  ------------------
  780|      0|			send_xg_jp = true;
  781|       |
  782|      0|		pim_jp_agg_single_upstream_send(&up->rpf, up, 0 /* prune */);
  783|       |
  784|      0|		if (send_xg_jp) {
  ------------------
  |  Branch (784:7): [True: 0, False: 0]
  ------------------
  785|      0|			if (PIM_DEBUG_PIM_TRACE_DETAIL)
  ------------------
  |  |  148|      0|	(router->debugs & PIM_MASK_PIM_TRACE_DETAIL)
  |  |  ------------------
  |  |  |  |   78|      0|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (148:2): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  786|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  787|      0|				  "re-join RPT; *,G IIF %s S,G IIF %s ",
  788|      0|				  up->parent->rpf.source_nexthop.interface ?
  789|      0|				  up->parent->rpf.source_nexthop.interface->name
  790|      0|				  : "Unknown",
  791|      0|				  up->rpf.source_nexthop.interface ?
  792|      0|				  up->rpf.source_nexthop.interface->name :
  793|      0|				  "Unknown");
  794|      0|			pim_jp_agg_single_upstream_send(&up->parent->rpf,
  795|      0|							up->parent,
  796|      0|							1 /* (W,G) Join */);
  797|      0|		}
  798|      0|		join_timer_stop(up);
  799|      0|	}
  800|      0|}
pim_upstream_compare:
  804|  1.61M|{
  805|  1.61M|	return pim_sgaddr_cmp(up1->sg, up2->sg);
  806|  1.61M|}
pim_up_mlag_local_cost:
  955|   136k|{
  956|   136k|	if (!(pim_up_mlag_is_local(up))
  ------------------
  |  Branch (956:6): [True: 136k, False: 0]
  ------------------
  957|   136k|	    && !(up->flags & PIM_UPSTREAM_FLAG_MASK_MLAG_INTERFACE))
  ------------------
  |  |   82|   136k|#define PIM_UPSTREAM_FLAG_MASK_MLAG_INTERFACE          (1 << 21)
  ------------------
  |  Branch (957:9): [True: 136k, False: 0]
  ------------------
  958|   136k|		return router->infinite_assert_metric.route_metric;
  959|       |
  960|      0|	if ((up->rpf.source_nexthop.interface ==
  ------------------
  |  Branch (960:6): [True: 0, False: 0]
  ------------------
  961|      0|				up->pim->vxlan.peerlink_rif) &&
  962|      0|			(up->rpf.source_nexthop.mrib_route_metric <
  ------------------
  |  Branch (962:4): [True: 0, False: 0]
  ------------------
  963|      0|			 (router->infinite_assert_metric.route_metric -
  964|      0|			  PIM_UPSTREAM_MLAG_PEERLINK_PLUS_METRIC)))
  ------------------
  |  |  208|      0|#define PIM_UPSTREAM_MLAG_PEERLINK_PLUS_METRIC 10
  ------------------
  965|      0|		return up->rpf.source_nexthop.mrib_route_metric +
  966|      0|			PIM_UPSTREAM_MLAG_PEERLINK_PLUS_METRIC;
  ------------------
  |  |  208|      0|#define PIM_UPSTREAM_MLAG_PEERLINK_PLUS_METRIC 10
  ------------------
  967|       |
  968|      0|	return up->rpf.source_nexthop.mrib_route_metric;
  969|      0|}
pim_upstream_find:
  980|   130k|{
  981|   130k|	struct pim_upstream lookup;
  982|   130k|	struct pim_upstream *up = NULL;
  983|       |
  984|   130k|	lookup.sg = *sg;
  985|   130k|	up = rb_pim_upstream_find(&pim->upstream_head, &lookup);
  986|   130k|	return up;
  987|   130k|}
pim_upstream_add:
 1039|  43.2k|{
 1040|  43.2k|	struct pim_upstream *up = NULL;
 1041|  43.2k|	int found = 0;
 1042|       |
 1043|  43.2k|	up = pim_upstream_find(pim, sg);
 1044|  43.2k|	if (up) {
  ------------------
  |  Branch (1044:6): [True: 0, False: 43.2k]
  ------------------
 1045|      0|		pim_upstream_ref(up, flags, name);
 1046|      0|		found = 1;
 1047|  43.2k|	} else {
 1048|  43.2k|		up = pim_upstream_new(pim, sg, incoming, flags, ch);
 1049|  43.2k|	}
 1050|       |
 1051|  43.2k|	if (PIM_DEBUG_PIM_TRACE) {
  ------------------
  |  |  146|  43.2k|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|  43.2k|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|  43.2k|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 43.2k]
  |  |  ------------------
  ------------------
 1052|      0|		zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1053|      0|			"%s(%s): %s, iif %pPA (%s) found: %d: ref_count: %d",
 1054|      0|			__func__, name, up->sg_str, &up->rpf.rpf_addr,
 1055|      0|			up->rpf.source_nexthop.interface ? up->rpf.source_nexthop
 1056|      0|								   .interface->name
 1057|      0|							 : "Unknown",
 1058|      0|			found, up->ref_count);
 1059|      0|	}
 1060|       |
 1061|  43.2k|	return up;
 1062|  43.2k|}
pim_upstream_eval_inherit_if:
 1074|  12.6k|{
 1075|       |	/* if there is an explicit prune for this interface we cannot
 1076|       |	 * add it to the OIL
 1077|       |	 */
 1078|  12.6k|	if (ch) {
  ------------------
  |  Branch (1078:6): [True: 12.6k, False: 0]
  ------------------
 1079|  12.6k|		if (PIM_IF_FLAG_TEST_S_G_RPT(ch->flags))
  ------------------
  |  |   54|  12.6k|#define PIM_IF_FLAG_TEST_S_G_RPT(flags)  ((flags) & PIM_IF_FLAG_MASK_S_G_RPT)
  |  |  ------------------
  |  |  |  |   53|  12.6k|#define PIM_IF_FLAG_MASK_S_G_RPT         (1 << 2)
  |  |  ------------------
  |  |  |  Branch (54:42): [True: 4.36k, False: 8.23k]
  |  |  ------------------
  ------------------
 1080|  4.36k|			return 0;
 1081|  12.6k|	}
 1082|       |
 1083|       |	/* Check if the OIF can be inherited fron the (*,G) entry
 1084|       |	 */
 1085|  8.23k|	if (starch) {
  ------------------
  |  Branch (1085:6): [True: 8.23k, False: 0]
  ------------------
 1086|  8.23k|		if (!pim_macro_ch_lost_assert(starch)
  ------------------
  |  Branch (1086:7): [True: 8.23k, False: 0]
  ------------------
 1087|  8.23k|		    && pim_macro_chisin_joins_or_include(starch))
  ------------------
  |  Branch (1087:10): [True: 8.23k, False: 0]
  ------------------
 1088|  8.23k|			return 1;
 1089|  8.23k|	}
 1090|       |
 1091|      0|	return 0;
 1092|  8.23k|}
pim_upstream_evaluate_join_desired_interface:
 1101|   106k|{
 1102|   106k|	if (ch) {
  ------------------
  |  Branch (1102:6): [True: 106k, False: 0]
  ------------------
 1103|   106k|		if (PIM_IF_FLAG_TEST_S_G_RPT(ch->flags))
  ------------------
  |  |   54|   106k|#define PIM_IF_FLAG_TEST_S_G_RPT(flags)  ((flags) & PIM_IF_FLAG_MASK_S_G_RPT)
  |  |  ------------------
  |  |  |  |   53|   106k|#define PIM_IF_FLAG_MASK_S_G_RPT         (1 << 2)
  |  |  ------------------
  |  |  |  Branch (54:42): [True: 48.7k, False: 57.4k]
  |  |  ------------------
  ------------------
 1104|  48.7k|			return 0;
 1105|       |
 1106|  57.4k|		if (!pim_macro_ch_lost_assert(ch)
  ------------------
  |  Branch (1106:7): [True: 57.4k, False: 0]
  ------------------
 1107|  57.4k|		    && pim_macro_chisin_joins_or_include(ch))
  ------------------
  |  Branch (1107:10): [True: 14.6k, False: 42.7k]
  ------------------
 1108|  14.6k|			return 1;
 1109|  57.4k|	}
 1110|       |
 1111|       |	/*
 1112|       |	 * joins (*,G)
 1113|       |	 */
 1114|  42.7k|	if (starch) {
  ------------------
  |  Branch (1114:6): [True: 42.5k, False: 235]
  ------------------
 1115|       |		/* XXX: check on this with donald
 1116|       |		 * we are looking for PIM_IF_FLAG_MASK_S_G_RPT in
 1117|       |		 * upstream flags?
 1118|       |		 */
 1119|       |#if 0
 1120|       |		if (PIM_IF_FLAG_TEST_S_G_RPT(starch->upstream->flags))
 1121|       |			return 0;
 1122|       |#endif
 1123|       |
 1124|  42.5k|		if (!pim_macro_ch_lost_assert(starch)
  ------------------
  |  Branch (1124:7): [True: 42.5k, False: 0]
  ------------------
 1125|  42.5k|		    && pim_macro_chisin_joins_or_include(starch))
  ------------------
  |  Branch (1125:10): [True: 42.5k, False: 0]
  ------------------
 1126|  42.5k|			return 1;
 1127|  42.5k|	}
 1128|       |
 1129|    235|	return 0;
 1130|  42.7k|}
pim_upstream_evaluate_join_desired:
 1183|  60.8k|{
 1184|  60.8k|	bool empty_imm_oil;
 1185|  60.8k|	bool empty_inh_oil;
 1186|       |
 1187|  60.8k|	empty_imm_oil = pim_upstream_empty_immediate_olist(pim, up);
 1188|       |
 1189|       |	/* (*,G) */
 1190|  60.8k|	if (pim_addr_is_any(up->sg.src))
  ------------------
  |  Branch (1190:6): [True: 2.49k, False: 58.3k]
  ------------------
 1191|  2.49k|		return !empty_imm_oil;
 1192|       |
 1193|       |	/* (S,G) */
 1194|  58.3k|	if (!empty_imm_oil)
  ------------------
  |  Branch (1194:6): [True: 9.43k, False: 48.9k]
  ------------------
 1195|  9.43k|		return true;
 1196|  48.9k|	empty_inh_oil = pim_upstream_empty_inherited_olist(up);
 1197|  48.9k|	if (!empty_inh_oil &&
  ------------------
  |  Branch (1197:6): [True: 438, False: 48.4k]
  ------------------
 1198|    438|			(pim_upstream_is_kat_running(up) ||
  ------------------
  |  Branch (1198:5): [True: 0, False: 438]
  ------------------
 1199|    438|			 pim_upstream_is_msdp_peer_sa(up)))
  ------------------
  |  Branch (1199:5): [True: 0, False: 438]
  ------------------
 1200|      0|		return true;
 1201|       |
 1202|  48.9k|	return false;
 1203|  48.9k|}
pim_upstream_update_join_desired:
 1210|  60.8k|{
 1211|  60.8k|	int was_join_desired; /* boolean */
 1212|  60.8k|	int is_join_desired;  /* boolean */
 1213|       |
 1214|  60.8k|	was_join_desired = PIM_UPSTREAM_FLAG_TEST_DR_JOIN_DESIRED(up->flags);
  ------------------
  |  |   87|  60.8k|#define PIM_UPSTREAM_FLAG_TEST_DR_JOIN_DESIRED(flags) ((flags) & PIM_UPSTREAM_FLAG_MASK_DR_JOIN_DESIRED)
  |  |  ------------------
  |  |  |  |   18|  60.8k|#define PIM_UPSTREAM_FLAG_MASK_DR_JOIN_DESIRED         (1 << 0)
  |  |  ------------------
  ------------------
 1215|       |
 1216|  60.8k|	is_join_desired = pim_upstream_evaluate_join_desired(pim, up);
 1217|  60.8k|	if (is_join_desired)
  ------------------
  |  Branch (1217:6): [True: 11.8k, False: 48.9k]
  ------------------
 1218|  11.8k|		PIM_UPSTREAM_FLAG_SET_DR_JOIN_DESIRED(up->flags);
  ------------------
  |  |  113|  11.8k|	((flags) |= (typeof((flags)))PIM_UPSTREAM_FLAG_MASK_DR_JOIN_DESIRED)
  |  |  ------------------
  |  |  |  |   18|  11.8k|#define PIM_UPSTREAM_FLAG_MASK_DR_JOIN_DESIRED         (1 << 0)
  |  |  ------------------
  ------------------
 1219|  48.9k|	else
 1220|  48.9k|		PIM_UPSTREAM_FLAG_UNSET_DR_JOIN_DESIRED(up->flags);
  ------------------
  |  |  157|  48.9k|	((flags) &= (typeof((flags))) ~PIM_UPSTREAM_FLAG_MASK_DR_JOIN_DESIRED)
  |  |  ------------------
  |  |  |  |   18|  48.9k|#define PIM_UPSTREAM_FLAG_MASK_DR_JOIN_DESIRED         (1 << 0)
  |  |  ------------------
  ------------------
 1221|       |
 1222|       |	/* switched from false to true */
 1223|  60.8k|	if (is_join_desired && (up->join_state == PIM_UPSTREAM_NOTJOINED)) {
  ------------------
  |  Branch (1223:6): [True: 11.8k, False: 48.9k]
  |  Branch (1223:25): [True: 11.8k, False: 0]
  ------------------
 1224|  11.8k|		pim_upstream_switch(pim, up, PIM_UPSTREAM_JOINED);
 1225|  11.8k|		return;
 1226|  11.8k|	}
 1227|       |
 1228|       |	/* switched from true to false */
 1229|  48.9k|	if (!is_join_desired && was_join_desired) {
  ------------------
  |  Branch (1229:6): [True: 48.9k, False: 0]
  |  Branch (1229:26): [True: 749, False: 48.1k]
  ------------------
 1230|    749|		pim_upstream_switch(pim, up, PIM_UPSTREAM_NOTJOINED);
 1231|    749|		return;
 1232|    749|	}
 1233|  48.9k|}
pim_upstream_rpf_genid_changed:
 1246|     68|{
 1247|     68|	struct pim_upstream *up;
 1248|       |
 1249|       |	/*
 1250|       |	 * Scan all (S,G) upstreams searching for RPF'(S,G)=neigh_addr
 1251|       |	 */
 1252|  3.24k|	frr_each (rb_pim_upstream, &pim->upstream_head, up) {
  ------------------
  |  |   21|  3.31k|	for (item = prefix##_first(head); item;                                \
  |  |  ------------------
  |  |  |  Branch (21:36): [True: 3.24k, False: 68]
  |  |  ------------------
  |  |   22|  3.24k|			item = prefix##_next(head, item))
  ------------------
 1253|  3.24k|		pim_addr rpf_addr;
 1254|       |
 1255|  3.24k|		rpf_addr = up->rpf.rpf_addr;
 1256|       |
 1257|  3.24k|		if (PIM_DEBUG_PIM_TRACE)
  ------------------
  |  |  146|  3.24k|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|  3.24k|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|  3.24k|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 3.24k]
  |  |  ------------------
  ------------------
 1258|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1259|  3.24k|				"%s: matching neigh=%pPA against upstream (S,G)=%s[%s] joined=%d rpf_addr=%pPA",
 1260|  3.24k|				__func__, &neigh_addr, up->sg_str,
 1261|  3.24k|				pim->vrf->name,
 1262|  3.24k|				up->join_state == PIM_UPSTREAM_JOINED,
 1263|  3.24k|				&rpf_addr);
 1264|       |
 1265|       |		/* consider only (S,G) upstream in Joined state */
 1266|  3.24k|		if (up->join_state != PIM_UPSTREAM_JOINED)
  ------------------
  |  Branch (1266:7): [True: 3.24k, False: 0]
  ------------------
 1267|  3.24k|			continue;
 1268|       |
 1269|       |		/* match RPF'(S,G)=neigh_addr */
 1270|      0|		if (pim_addr_cmp(rpf_addr, neigh_addr))
  ------------------
  |  Branch (1270:7): [True: 0, False: 0]
  ------------------
 1271|      0|			continue;
 1272|       |
 1273|      0|		pim_upstream_join_timer_decrease_to_t_override(
 1274|      0|			"RPF'(S,G) GenID change", up);
 1275|      0|	}
 1276|     68|}
pim_upstream_empty_inherited_olist:
 1869|  55.3k|{
 1870|  55.3k|	return pim_channel_oil_empty(up->channel_oil);
 1871|  55.3k|}
pim_upstream_find_new_rpf:
 1880|    212|{
 1881|    212|	struct pim_upstream *up;
 1882|    212|	struct pim_rpf old;
 1883|    212|	enum pim_rpf_result rpf_result;
 1884|       |
 1885|       |	/*
 1886|       |	 * Scan all (S,G) upstreams searching for RPF'(S,G)=neigh_addr
 1887|       |	 */
 1888|  16.9k|	frr_each (rb_pim_upstream, &pim->upstream_head, up) {
  ------------------
  |  |   21|  17.1k|	for (item = prefix##_first(head); item;                                \
  |  |  ------------------
  |  |  |  Branch (21:36): [True: 16.9k, False: 212]
  |  |  ------------------
  |  |   22|  16.9k|			item = prefix##_next(head, item))
  ------------------
 1889|  16.9k|		if (pim_addr_is_any(up->upstream_addr)) {
  ------------------
  |  Branch (1889:7): [True: 9.49k, False: 7.46k]
  ------------------
 1890|  9.49k|			if (PIM_DEBUG_PIM_TRACE)
  ------------------
  |  |  146|  9.49k|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|  9.49k|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|  9.49k|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 9.49k]
  |  |  ------------------
  ------------------
 1891|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1892|  9.49k|					"%s: RP not configured for Upstream %s",
 1893|  9.49k|					__func__, up->sg_str);
 1894|  9.49k|			continue;
 1895|  9.49k|		}
 1896|       |
 1897|  7.46k|		if (pim_rpf_addr_is_inaddr_any(&up->rpf)) {
  ------------------
  |  Branch (1897:7): [True: 7.46k, False: 0]
  ------------------
 1898|  7.46k|			if (PIM_DEBUG_PIM_TRACE)
  ------------------
  |  |  146|  7.46k|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|  7.46k|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|  7.46k|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 7.46k]
  |  |  ------------------
  ------------------
 1899|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
 1900|  7.46k|					"%s: Upstream %s without a path to send join, checking",
 1901|  7.46k|					__func__, up->sg_str);
 1902|  7.46k|			old.source_nexthop.interface =
 1903|  7.46k|				up->rpf.source_nexthop.interface;
 1904|  7.46k|			rpf_result = pim_rpf_update(pim, up, &old, __func__);
 1905|  7.46k|			if (rpf_result == PIM_RPF_CHANGED ||
  ------------------
  |  Branch (1905:8): [True: 0, False: 7.46k]
  ------------------
 1906|  7.46k|					(rpf_result == PIM_RPF_FAILURE &&
  ------------------
  |  Branch (1906:7): [True: 7.46k, False: 0]
  ------------------
 1907|  7.46k|					 old.source_nexthop.interface))
  ------------------
  |  Branch (1907:7): [True: 0, False: 7.46k]
  ------------------
 1908|      0|				pim_zebra_upstream_rpf_changed(pim, up, &old);
 1909|       |			/* update kernel multicast forwarding cache (MFC) */
 1910|  7.46k|			pim_upstream_mroute_iif_update(up->channel_oil,
 1911|  7.46k|					__func__);
 1912|  7.46k|		}
 1913|  7.46k|	}
 1914|    212|	pim_zebra_update_all_interfaces(pim);
 1915|    212|}
pim_upstream_hash_key:
 1918|   226k|{
 1919|   226k|	const struct pim_upstream *up = arg;
 1920|       |
 1921|   226k|	return pim_sgaddr_hash(up->sg, 0);
 1922|   226k|}
pim_upstream_equal:
 1941|  67.6k|{
 1942|  67.6k|	const struct pim_upstream *up1 = (const struct pim_upstream *)arg1;
 1943|  67.6k|	const struct pim_upstream *up2 = (const struct pim_upstream *)arg2;
 1944|       |
 1945|  67.6k|	return !pim_sgaddr_cmp(up1->sg, up2->sg);
 1946|  67.6k|}
pim_upstream_init:
 2156|      1|{
 2157|      1|	char name[64];
 2158|       |
 2159|      1|	snprintf(name, sizeof(name), "PIM %s Timer Wheel", pim->vrf->name);
 2160|      1|	pim->upstream_sg_wheel =
 2161|      1|		wheel_init(router->master, 31000, 100, pim_upstream_hash_key,
 2162|      1|			   pim_upstream_sg_running, name);
 2163|       |
 2164|      1|	rb_pim_upstream_init(&pim->upstream_head);
 2165|      1|}
pim_upstream.c:pim_upstream_timers_stop:
  168|  42.5k|{
  169|  42.5k|	EVENT_OFF(up->t_ka_timer);
  ------------------
  |  |  164|  42.5k|	do {                                                                   \
  |  |  165|  42.5k|		if ((thread))                                                  \
  |  |  ------------------
  |  |  |  Branch (165:7): [True: 0, False: 42.5k]
  |  |  ------------------
  |  |  166|  42.5k|			event_cancel(&(thread));                               \
  |  |  167|  42.5k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (167:11): [Folded, False: 42.5k]
  |  |  ------------------
  ------------------
  170|  42.5k|	EVENT_OFF(up->t_rs_timer);
  ------------------
  |  |  164|  42.5k|	do {                                                                   \
  |  |  165|  42.5k|		if ((thread))                                                  \
  |  |  ------------------
  |  |  |  Branch (165:7): [True: 0, False: 42.5k]
  |  |  ------------------
  |  |  166|  42.5k|			event_cancel(&(thread));                               \
  |  |  167|  42.5k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (167:11): [Folded, False: 42.5k]
  |  |  ------------------
  ------------------
  171|  42.5k|	EVENT_OFF(up->t_msdp_reg_timer);
  ------------------
  |  |  164|  42.5k|	do {                                                                   \
  |  |  165|  42.5k|		if ((thread))                                                  \
  |  |  ------------------
  |  |  |  Branch (165:7): [True: 0, False: 42.5k]
  |  |  ------------------
  |  |  166|  42.5k|			event_cancel(&(thread));                               \
  |  |  167|  42.5k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (167:11): [Folded, False: 42.5k]
  |  |  ------------------
  ------------------
  172|  42.5k|	EVENT_OFF(up->t_join_timer);
  ------------------
  |  |  164|  42.5k|	do {                                                                   \
  |  |  165|  42.5k|		if ((thread))                                                  \
  |  |  ------------------
  |  |  |  Branch (165:7): [True: 0, False: 42.5k]
  |  |  ------------------
  |  |  166|  42.5k|			event_cancel(&(thread));                               \
  |  |  167|  42.5k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (167:11): [Folded, False: 42.5k]
  |  |  ------------------
  ------------------
  173|  42.5k|}
pim_upstream.c:upstream_channel_oil_detach:
  148|  42.5k|{
  149|  42.5k|	struct channel_oil *channel_oil = up->channel_oil;
  150|       |
  151|  42.5k|	if (channel_oil) {
  ------------------
  |  Branch (151:6): [True: 42.5k, False: 0]
  ------------------
  152|       |		/* Detaching from channel_oil, channel_oil may exist post del,
  153|       |		   but upstream would not keep reference of it
  154|       |		 */
  155|  42.5k|		channel_oil->up = NULL;
  156|  42.5k|		up->channel_oil = NULL;
  157|       |
  158|       |		/* attempt to delete channel_oil; if channel_oil is being held
  159|       |		 * because of other references cleanup info such as "Mute"
  160|       |		 * inferred from the parent upstream
  161|       |		 */
  162|  42.5k|		pim_channel_oil_upstream_deref(channel_oil);
  163|  42.5k|	}
  164|       |
  165|  42.5k|}
pim_upstream.c:pim_upstream_remove_children:
   56|  42.5k|{
   57|  42.5k|	struct pim_upstream *child;
   58|       |
   59|  42.5k|	if (!up->sources)
  ------------------
  |  Branch (59:6): [True: 42.5k, False: 0]
  ------------------
   60|  42.5k|		return;
   61|       |
   62|      0|	while (!list_isempty(up->sources)) {
  ------------------
  |  |   56|      0|#define list_isempty(X) ((X)->head == NULL && (X)->tail == NULL)
  |  |  ------------------
  |  |  |  Branch (56:26): [True: 0, False: 0]
  |  |  |  Branch (56:47): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   63|      0|		child = listnode_head(up->sources);
   64|      0|		listnode_delete(up->sources, child);
   65|      0|		if (PIM_UPSTREAM_FLAG_TEST_SRC_LHR(child->flags)) {
  ------------------
  |  |   95|      0|#define PIM_UPSTREAM_FLAG_TEST_SRC_LHR(flags) ((flags) & PIM_UPSTREAM_FLAG_MASK_SRC_LHR)
  |  |  ------------------
  |  |  |  |   26|      0|#define PIM_UPSTREAM_FLAG_MASK_SRC_LHR                 (1 << 8)
  |  |  ------------------
  |  |  |  Branch (95:47): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   66|      0|			PIM_UPSTREAM_FLAG_UNSET_SRC_LHR(child->flags);
  ------------------
  |  |  174|      0|	((flags) &= (typeof((flags))) ~PIM_UPSTREAM_FLAG_MASK_SRC_LHR)
  |  |  ------------------
  |  |  |  |   26|      0|#define PIM_UPSTREAM_FLAG_MASK_SRC_LHR                 (1 << 8)
  |  |  ------------------
  ------------------
   67|      0|			child = pim_upstream_del(pim, child, __func__);
   68|      0|		}
   69|      0|		if (child) {
  ------------------
  |  Branch (69:7): [True: 0, False: 0]
  ------------------
   70|      0|			child->parent = NULL;
   71|      0|			if (PIM_UPSTREAM_FLAG_TEST_USE_RPT(child->flags))
  ------------------
  |  |  108|      0|#define PIM_UPSTREAM_FLAG_TEST_USE_RPT(flags) ((flags) & PIM_UPSTREAM_FLAG_MASK_USE_RPT)
  |  |  ------------------
  |  |  |  |   77|      0|#define PIM_UPSTREAM_FLAG_MASK_USE_RPT                 (1 << 20)
  |  |  ------------------
  |  |  |  Branch (108:47): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   72|      0|				pim_upstream_mroute_iif_update(
   73|      0|						child->channel_oil,
   74|      0|						__func__);
   75|      0|		}
   76|      0|	}
   77|      0|	list_delete(&up->sources);
   78|      0|}
pim_upstream.c:join_timer_stop:
  323|  42.5k|{
  324|  42.5k|	struct pim_neighbor *nbr = NULL;
  325|       |
  326|  42.5k|	EVENT_OFF(up->t_join_timer);
  ------------------
  |  |  164|  42.5k|	do {                                                                   \
  |  |  165|  42.5k|		if ((thread))                                                  \
  |  |  ------------------
  |  |  |  Branch (165:7): [True: 0, False: 42.5k]
  |  |  ------------------
  |  |  166|  42.5k|			event_cancel(&(thread));                               \
  |  |  167|  42.5k|	} while (0)
  |  |  ------------------
  |  |  |  Branch (167:11): [Folded, False: 42.5k]
  |  |  ------------------
  ------------------
  327|       |
  328|  42.5k|	if (up->rpf.source_nexthop.interface)
  ------------------
  |  Branch (328:6): [True: 0, False: 42.5k]
  ------------------
  329|      0|		nbr = pim_neighbor_find(up->rpf.source_nexthop.interface,
  330|      0|					up->rpf.rpf_addr, true);
  331|       |
  332|  42.5k|	if (nbr)
  ------------------
  |  Branch (332:6): [True: 0, False: 42.5k]
  ------------------
  333|      0|		pim_jp_agg_remove_group(nbr->upstream_jp_agg, up, nbr);
  334|       |
  335|       |	pim_jp_agg_upstream_verification(up, false);
  336|  42.5k|}
pim_upstream.c:pim_upstream_new:
  826|  43.2k|{
  827|  43.2k|	enum pim_rpf_result rpf_result;
  828|  43.2k|	struct pim_interface *pim_ifp;
  829|  43.2k|	struct pim_upstream *up;
  830|       |
  831|  43.2k|	up = XCALLOC(MTYPE_PIM_UPSTREAM, sizeof(*up));
  ------------------
  |  |  165|  43.2k|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
  832|       |
  833|  43.2k|	up->pim = pim;
  834|  43.2k|	up->sg = *sg;
  835|  43.2k|	snprintfrr(up->sg_str, sizeof(up->sg_str), "%pSG", sg);
  836|  43.2k|	if (ch)
  ------------------
  |  Branch (836:6): [True: 43.2k, False: 0]
  ------------------
  837|  43.2k|		ch->upstream = up;
  838|       |
  839|  43.2k|	rb_pim_upstream_add(&pim->upstream_head, up);
  840|       |	/* Set up->upstream_addr as INADDR_ANY, if RP is not
  841|       |	 * configured and retain the upstream data structure
  842|       |	 */
  843|  43.2k|	if (!pim_rp_set_upstream_addr(pim, &up->upstream_addr, sg->src,
  ------------------
  |  Branch (843:6): [True: 17.7k, False: 25.4k]
  ------------------
  844|  43.2k|				      sg->grp)) {
  845|  17.7k|		if (PIM_DEBUG_PIM_TRACE)
  ------------------
  |  |  146|  17.7k|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|  17.7k|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|  17.7k|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 17.7k]
  |  |  ------------------
  ------------------
  846|      0|			zlog_debug("%s: Received a (*,G) with no RP configured",
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  847|  17.7k|				   __func__);
  848|  17.7k|	}
  849|       |
  850|  43.2k|	up->parent = pim_upstream_find_parent(pim, up);
  851|  43.2k|	if (pim_addr_is_any(up->sg.src)) {
  ------------------
  |  Branch (851:6): [True: 172, False: 43.0k]
  ------------------
  852|    172|		up->sources = list_new();
  853|    172|		up->sources->cmp =
  854|    172|			(int (*)(void *, void *))pim_upstream_compare;
  855|    172|	} else
  856|  43.0k|		up->sources = NULL;
  857|       |
  858|  43.2k|	pim_upstream_find_new_children(pim, up);
  859|  43.2k|	up->flags = flags;
  860|  43.2k|	up->ref_count = 1;
  861|  43.2k|	up->t_join_timer = NULL;
  862|  43.2k|	up->t_ka_timer = NULL;
  863|  43.2k|	up->t_rs_timer = NULL;
  864|  43.2k|	up->t_msdp_reg_timer = NULL;
  865|  43.2k|	up->join_state = PIM_UPSTREAM_NOTJOINED;
  866|  43.2k|	up->reg_state = PIM_REG_NOINFO;
  867|  43.2k|	up->state_transition = pim_time_monotonic_sec();
  868|  43.2k|	up->channel_oil = pim_channel_oil_add(pim, &up->sg, __func__);
  869|  43.2k|	up->sptbit = PIM_UPSTREAM_SPTBIT_FALSE;
  870|       |
  871|  43.2k|	up->rpf.source_nexthop.interface = NULL;
  872|  43.2k|	up->rpf.source_nexthop.mrib_nexthop_addr = PIMADDR_ANY;
  ------------------
  |  |   79|  43.2k|#define PIMADDR_ANY (pim_addr){ }
  ------------------
  873|  43.2k|	up->rpf.source_nexthop.mrib_metric_preference =
  874|  43.2k|		router->infinite_assert_metric.metric_preference;
  875|  43.2k|	up->rpf.source_nexthop.mrib_route_metric =
  876|  43.2k|		router->infinite_assert_metric.route_metric;
  877|  43.2k|	up->rpf.rpf_addr = PIMADDR_ANY;
  ------------------
  |  |   79|  43.2k|#define PIMADDR_ANY (pim_addr){ }
  ------------------
  878|  43.2k|	up->ifchannels = list_new();
  879|  43.2k|	up->ifchannels->cmp = (int (*)(void *, void *))pim_ifchannel_compare;
  880|       |
  881|  43.2k|	if (!pim_addr_is_any(up->sg.src)) {
  ------------------
  |  Branch (881:6): [True: 43.0k, False: 172]
  ------------------
  882|  43.0k|		wheel_add_item(pim->upstream_sg_wheel, up);
  883|       |
  884|       |		/* Inherit the DF role from the parent (*, G) entry for
  885|       |		 * VxLAN BUM groups
  886|       |		 */
  887|  43.0k|		if (up->parent
  ------------------
  |  Branch (887:7): [True: 42.6k, False: 447]
  ------------------
  888|  42.6k|		    && PIM_UPSTREAM_FLAG_TEST_MLAG_VXLAN(up->parent->flags)
  ------------------
  |  |  104|  85.6k|#define PIM_UPSTREAM_FLAG_TEST_MLAG_VXLAN(flags) ((flags) & PIM_UPSTREAM_FLAG_MASK_MLAG_VXLAN)
  |  |  ------------------
  |  |  |  |   57|  42.6k|#define PIM_UPSTREAM_FLAG_MASK_MLAG_VXLAN              (1 << 16)
  |  |  ------------------
  |  |  |  Branch (104:50): [True: 0, False: 42.6k]
  |  |  ------------------
  ------------------
  889|      0|		    && PIM_UPSTREAM_FLAG_TEST_MLAG_NON_DF(up->parent->flags)) {
  ------------------
  |  |  105|      0|#define PIM_UPSTREAM_FLAG_TEST_MLAG_NON_DF(flags) ((flags) & PIM_UPSTREAM_FLAG_MASK_MLAG_NON_DF)
  |  |  ------------------
  |  |  |  |   63|      0|#define PIM_UPSTREAM_FLAG_MASK_MLAG_NON_DF             (1 << 17)
  |  |  ------------------
  |  |  |  Branch (105:51): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  890|      0|			PIM_UPSTREAM_FLAG_SET_MLAG_NON_DF(up->flags);
  ------------------
  |  |  148|      0|	((flags) |= (typeof((flags)))PIM_UPSTREAM_FLAG_MASK_MLAG_NON_DF)
  |  |  ------------------
  |  |  |  |   63|      0|#define PIM_UPSTREAM_FLAG_MASK_MLAG_NON_DF             (1 << 17)
  |  |  ------------------
  ------------------
  891|      0|			if (PIM_DEBUG_VXLAN)
  ------------------
  |  |  171|      0|#define PIM_DEBUG_VXLAN (router->debugs & PIM_MASK_VXLAN)
  |  |  ------------------
  |  |  |  |   98|      0|#define PIM_MASK_VXLAN               (1 << 26)
  |  |  ------------------
  |  |  |  Branch (171:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  892|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  893|      0|					"upstream %s inherited mlag non-df flag from parent",
  894|      0|					up->sg_str);
  895|      0|		}
  896|  43.0k|	}
  897|       |
  898|  43.2k|	if (PIM_UPSTREAM_FLAG_TEST_STATIC_IIF(up->flags)
  ------------------
  |  |   97|  86.4k|#define PIM_UPSTREAM_FLAG_TEST_STATIC_IIF(flags) ((flags) & PIM_UPSTREAM_FLAG_MASK_STATIC_IIF)
  |  |  ------------------
  |  |  |  |   37|  43.2k|#define PIM_UPSTREAM_FLAG_MASK_STATIC_IIF              (1 << 10)
  |  |  ------------------
  |  |  |  Branch (97:50): [True: 0, False: 43.2k]
  |  |  ------------------
  ------------------
  899|  43.2k|	    || PIM_UPSTREAM_FLAG_TEST_SRC_NOCACHE(up->flags)) {
  ------------------
  |  |  107|  43.2k|#define PIM_UPSTREAM_FLAG_TEST_SRC_NOCACHE(flags) ((flags) &PIM_UPSTREAM_FLAG_MASK_SRC_NOCACHE)
  |  |  ------------------
  |  |  |  |   71|  43.2k|#define PIM_UPSTREAM_FLAG_MASK_SRC_NOCACHE             (1 << 19)
  |  |  ------------------
  |  |  |  Branch (107:51): [True: 0, False: 43.2k]
  |  |  ------------------
  ------------------
  900|      0|		pim_upstream_fill_static_iif(up, incoming);
  901|      0|		pim_ifp = up->rpf.source_nexthop.interface->info;
  902|      0|		assert(pim_ifp);
  ------------------
  |  |   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|	})
  ------------------
  903|      0|		pim_upstream_update_use_rpt(up,
  904|      0|				false /*update_mroute*/);
  905|      0|		pim_upstream_mroute_iif_update(up->channel_oil, __func__);
  906|       |
  907|      0|		if (PIM_UPSTREAM_FLAG_TEST_SRC_NOCACHE(up->flags))
  ------------------
  |  |  107|      0|#define PIM_UPSTREAM_FLAG_TEST_SRC_NOCACHE(flags) ((flags) &PIM_UPSTREAM_FLAG_MASK_SRC_NOCACHE)
  |  |  ------------------
  |  |  |  |   71|      0|#define PIM_UPSTREAM_FLAG_MASK_SRC_NOCACHE             (1 << 19)
  |  |  ------------------
  |  |  |  Branch (107:51): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  908|      0|			pim_upstream_keep_alive_timer_start(
  909|      0|				up, pim->keep_alive_time);
  910|  43.2k|	} else if (!pim_addr_is_any(up->upstream_addr)) {
  ------------------
  |  Branch (910:13): [True: 25.4k, False: 17.7k]
  ------------------
  911|  25.4k|		pim_upstream_update_use_rpt(up,
  912|  25.4k|				false /*update_mroute*/);
  913|  25.4k|		rpf_result = pim_rpf_update(pim, up, NULL, __func__);
  914|  25.4k|		if (rpf_result == PIM_RPF_FAILURE) {
  ------------------
  |  Branch (914:7): [True: 25.4k, False: 0]
  ------------------
  915|  25.4k|			if (PIM_DEBUG_PIM_TRACE)
  ------------------
  |  |  146|  25.4k|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|  25.4k|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|  25.4k|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 25.4k]
  |  |  ------------------
  ------------------
  916|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  917|  25.4k|					"%s: Attempting to create upstream(%s), Unable to RPF for source",
  918|  25.4k|					__func__, up->sg_str);
  919|  25.4k|		}
  920|       |
  921|       |		/* Consider a case where (S,G,rpt) prune is received and this
  922|       |		 * upstream is getting created due to that, then as per RFC
  923|       |		 * until prune pending time we need to behave same as NOINFO
  924|       |		 * state, therefore do not install if OIF is NULL until then
  925|       |		 * This is for PIM Conformance PIM-SM 16.3 fix
  926|       |		 * When the prune pending timer pop, this mroute will get
  927|       |		 * installed with none as OIF */
  928|  25.4k|		if (up->rpf.source_nexthop.interface &&
  ------------------
  |  Branch (928:7): [True: 0, False: 25.4k]
  ------------------
  929|      0|		    !(pim_upstream_empty_inherited_olist(up) && (ch != NULL) &&
  ------------------
  |  Branch (929:9): [True: 0, False: 0]
  |  Branch (929:51): [True: 0, False: 0]
  ------------------
  930|      0|		      PIM_IF_FLAG_TEST_S_G_RPT(ch->flags))) {
  ------------------
  |  |   54|      0|#define PIM_IF_FLAG_TEST_S_G_RPT(flags)  ((flags) & PIM_IF_FLAG_MASK_S_G_RPT)
  |  |  ------------------
  |  |  |  |   53|      0|#define PIM_IF_FLAG_MASK_S_G_RPT         (1 << 2)
  |  |  ------------------
  |  |  |  Branch (54:42): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  931|      0|			pim_upstream_mroute_iif_update(up->channel_oil,
  932|      0|					__func__);
  933|      0|		}
  934|  25.4k|	}
  935|       |
  936|       |	/* send the entry to the MLAG peer */
  937|       |	/* XXX - duplicate send is possible here if pim_rpf_update
  938|       |	 * successfully resolved the nexthop
  939|       |	 */
  940|  43.2k|	if (pim_up_mlag_is_local(up)
  ------------------
  |  Branch (940:6): [True: 0, False: 43.2k]
  ------------------
  941|  43.2k|	    || PIM_UPSTREAM_FLAG_TEST_MLAG_INTERFACE(up->flags))
  ------------------
  |  |  110|  43.2k|#define PIM_UPSTREAM_FLAG_TEST_MLAG_INTERFACE(flags) ((flags)&PIM_UPSTREAM_FLAG_MASK_MLAG_INTERFACE)
  |  |  ------------------
  |  |  |  |   82|  43.2k|#define PIM_UPSTREAM_FLAG_MASK_MLAG_INTERFACE          (1 << 21)
  |  |  ------------------
  |  |  |  Branch (110:54): [True: 0, False: 43.2k]
  |  |  ------------------
  ------------------
  942|      0|		pim_mlag_up_local_add(pim, up);
  943|       |
  944|  43.2k|	if (PIM_DEBUG_PIM_TRACE) {
  ------------------
  |  |  146|  43.2k|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|  43.2k|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|  43.2k|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 43.2k]
  |  |  ------------------
  ------------------
  945|      0|		zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  946|      0|			"%s: Created Upstream %s upstream_addr %pPAs ref count %d increment",
  947|      0|			__func__, up->sg_str, &up->upstream_addr,
  948|      0|			up->ref_count);
  949|      0|	}
  950|       |
  951|  43.2k|	return up;
  952|  43.2k|}
pim_upstream.c:pim_upstream_find_parent:
  116|  43.2k|{
  117|  43.2k|	pim_sgaddr any = child->sg;
  118|  43.2k|	struct pim_upstream *up = NULL;
  119|       |
  120|       |	// (S,G)
  121|  43.2k|	if (!pim_addr_is_any(child->sg.src) &&
  ------------------
  |  Branch (121:6): [True: 43.0k, False: 172]
  ------------------
  122|  43.0k|	    !pim_addr_is_any(child->sg.grp)) {
  ------------------
  |  Branch (122:6): [True: 43.0k, False: 42]
  ------------------
  123|  43.0k|		any.src = PIMADDR_ANY;
  ------------------
  |  |   79|  43.0k|#define PIMADDR_ANY (pim_addr){ }
  ------------------
  124|  43.0k|		up = pim_upstream_find(pim, &any);
  125|       |
  126|  43.0k|		if (up)
  ------------------
  |  Branch (126:7): [True: 42.6k, False: 405]
  ------------------
  127|  42.6k|			listnode_add(up->sources, child);
  128|       |
  129|       |		/*
  130|       |		 * In case parent is MLAG entry copy the data to child
  131|       |		 */
  132|  43.0k|		if (up && PIM_UPSTREAM_FLAG_TEST_MLAG_INTERFACE(up->flags)) {
  ------------------
  |  |  110|  42.6k|#define PIM_UPSTREAM_FLAG_TEST_MLAG_INTERFACE(flags) ((flags)&PIM_UPSTREAM_FLAG_MASK_MLAG_INTERFACE)
  |  |  ------------------
  |  |  |  |   82|  42.6k|#define PIM_UPSTREAM_FLAG_MASK_MLAG_INTERFACE          (1 << 21)
  |  |  ------------------
  |  |  |  Branch (110:54): [True: 0, False: 42.6k]
  |  |  ------------------
  ------------------
  |  Branch (132:7): [True: 42.6k, False: 405]
  ------------------
  133|      0|			PIM_UPSTREAM_FLAG_SET_MLAG_INTERFACE(child->flags);
  ------------------
  |  |  154|      0|	((flags) |= (typeof((flags)))PIM_UPSTREAM_FLAG_MASK_MLAG_INTERFACE)
  |  |  ------------------
  |  |  |  |   82|      0|#define PIM_UPSTREAM_FLAG_MASK_MLAG_INTERFACE          (1 << 21)
  |  |  ------------------
  ------------------
  134|      0|			if (PIM_UPSTREAM_FLAG_TEST_MLAG_NON_DF(up->flags))
  ------------------
  |  |  105|      0|#define PIM_UPSTREAM_FLAG_TEST_MLAG_NON_DF(flags) ((flags) & PIM_UPSTREAM_FLAG_MASK_MLAG_NON_DF)
  |  |  ------------------
  |  |  |  |   63|      0|#define PIM_UPSTREAM_FLAG_MASK_MLAG_NON_DF             (1 << 17)
  |  |  ------------------
  |  |  |  Branch (105:51): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  135|      0|				PIM_UPSTREAM_FLAG_SET_MLAG_NON_DF(child->flags);
  ------------------
  |  |  148|      0|	((flags) |= (typeof((flags)))PIM_UPSTREAM_FLAG_MASK_MLAG_NON_DF)
  |  |  ------------------
  |  |  |  |   63|      0|#define PIM_UPSTREAM_FLAG_MASK_MLAG_NON_DF             (1 << 17)
  |  |  ------------------
  ------------------
  136|      0|			else
  137|      0|				PIM_UPSTREAM_FLAG_UNSET_MLAG_NON_DF(
  ------------------
  |  |  193|      0|	((flags) &= (typeof((flags))) ~PIM_UPSTREAM_FLAG_MASK_MLAG_NON_DF)
  |  |  ------------------
  |  |  |  |   63|      0|#define PIM_UPSTREAM_FLAG_MASK_MLAG_NON_DF             (1 << 17)
  |  |  ------------------
  ------------------
  138|      0|					child->flags);
  139|      0|		}
  140|       |
  141|  43.0k|		return up;
  142|  43.0k|	}
  143|       |
  144|    214|	return NULL;
  145|  43.2k|}
pim_upstream.c:pim_upstream_find_new_children:
   87|  43.2k|{
   88|  43.2k|	struct pim_upstream *child;
   89|       |
   90|  43.2k|	if (!pim_addr_is_any(up->sg.src) && !pim_addr_is_any(up->sg.grp))
  ------------------
  |  Branch (90:6): [True: 43.0k, False: 172]
  |  Branch (90:38): [True: 43.0k, False: 42]
  ------------------
   91|  43.0k|		return;
   92|       |
   93|    214|	if (pim_addr_is_any(up->sg.src) && pim_addr_is_any(up->sg.grp))
  ------------------
  |  Branch (93:6): [True: 172, False: 42]
  |  Branch (93:37): [True: 1, False: 171]
  ------------------
   94|      1|		return;
   95|       |
   96|  73.0k|	frr_each (rb_pim_upstream, &pim->upstream_head, child) {
  ------------------
  |  |   21|  73.2k|	for (item = prefix##_first(head); item;                                \
  |  |  ------------------
  |  |  |  Branch (21:36): [True: 73.0k, False: 213]
  |  |  ------------------
  |  |   22|  73.0k|			item = prefix##_next(head, item))
  ------------------
   97|  73.0k|		if (!pim_addr_is_any(up->sg.grp) &&
  ------------------
  |  Branch (97:7): [True: 58.5k, False: 14.4k]
  ------------------
   98|  58.5k|		    !pim_addr_cmp(child->sg.grp, up->sg.grp) && (child != up)) {
  ------------------
  |  Branch (98:7): [True: 403, False: 58.1k]
  |  Branch (98:51): [True: 232, False: 171]
  ------------------
   99|    232|			child->parent = up;
  100|    232|			listnode_add_sort(up->sources, child);
  101|    232|			if (PIM_UPSTREAM_FLAG_TEST_USE_RPT(child->flags))
  ------------------
  |  |  108|    232|#define PIM_UPSTREAM_FLAG_TEST_USE_RPT(flags) ((flags) & PIM_UPSTREAM_FLAG_MASK_USE_RPT)
  |  |  ------------------
  |  |  |  |   77|    232|#define PIM_UPSTREAM_FLAG_MASK_USE_RPT                 (1 << 20)
  |  |  ------------------
  |  |  |  Branch (108:47): [True: 162, False: 70]
  |  |  ------------------
  ------------------
  102|    162|				pim_upstream_mroute_iif_update(
  103|    162|						child->channel_oil,
  104|    162|						__func__);
  105|    232|		}
  106|  73.0k|	}
  107|    213|}
pim_upstream.c:pim_upstream_empty_immediate_olist:
 1137|  60.8k|{
 1138|  60.8k|	struct interface *ifp;
 1139|  60.8k|	struct pim_ifchannel *ch;
 1140|       |
 1141|   109k|	FOR_ALL_INTERFACES (pim->vrf, ifp) {
  ------------------
  |  |  372|  60.8k|	if (vrf)                                                               \
  |  |  ------------------
  |  |  |  Branch (372:6): [True: 60.8k, False: 0]
  |  |  ------------------
  |  |  373|  60.8k|		RB_FOREACH (ifp, if_name_head, &vrf->ifaces_by_name)
  |  |  ------------------
  |  |  |  |  529|   158k|	for ((_e) = RB_MIN(_name, (_head)); (_e) != NULL;                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  515|  60.8k|#define RB_MIN(_name, _head)		_name##_RB_MIN(_head)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (529:38): [True: 109k, False: 48.9k]
  |  |  |  |  ------------------
  |  |  |  |  530|  97.8k|	     (_e) = RB_NEXT(_name, (_e)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  517|  97.8k|#define RB_NEXT(_name, _elm)		_name##_RB_NEXT(_elm)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1142|   109k|		if (!ifp->info)
  ------------------
  |  Branch (1142:7): [True: 0, False: 109k]
  ------------------
 1143|      0|			continue;
 1144|       |
 1145|   109k|		ch = pim_ifchannel_find(ifp, &up->sg);
 1146|   109k|		if (!ch)
  ------------------
  |  Branch (1146:7): [True: 48.9k, False: 60.8k]
  ------------------
 1147|  48.9k|			continue;
 1148|       |
 1149|       |		/* If we have even one immediate OIF we can return with
 1150|       |		 * not-empty
 1151|       |		 */
 1152|  60.8k|		if (pim_upstream_evaluate_join_desired_interface(up, ch,
  ------------------
  |  Branch (1152:7): [True: 11.8k, False: 48.9k]
  ------------------
 1153|  60.8k|					    NULL /* starch */))
 1154|  11.8k|			return false;
 1155|  60.8k|	} /* scan iface channel list */
 1156|       |
 1157|       |	/* immediate_oil is empty */
 1158|  48.9k|	return true;
 1159|  60.8k|}
pim_upstream.c:pim_upstream_is_msdp_peer_sa:
 1163|    438|{
 1164|    438|	return PIM_UPSTREAM_FLAG_TEST_SRC_MSDP(up->flags);
  ------------------
  |  |   93|    438|#define PIM_UPSTREAM_FLAG_TEST_SRC_MSDP(flags) ((flags) & PIM_UPSTREAM_FLAG_MASK_SRC_MSDP)
  |  |  ------------------
  |  |  |  |   24|    438|#define PIM_UPSTREAM_FLAG_MASK_SRC_MSDP                (1 << 6)
  |  |  ------------------
  ------------------
 1165|    438|}

pim_upstream.c:pim_up_mlag_is_local:
  319|   221k|{
  320|       |	/* XXX: extend this to also return true if the channel-oil has
  321|       |	 * any AA devices
  322|       |	 */
  323|   221k|	return (up->flags & (PIM_UPSTREAM_FLAG_MASK_MLAG_VXLAN
  ------------------
  |  |   57|   221k|#define PIM_UPSTREAM_FLAG_MASK_MLAG_VXLAN              (1 << 16)
  ------------------
  324|   221k|			     | PIM_UPSTREAM_FLAG_MASK_MLAG_INTERFACE));
  ------------------
  |  |   82|   221k|#define PIM_UPSTREAM_FLAG_MASK_MLAG_INTERFACE          (1 << 21)
  ------------------
  325|   221k|}
pim_upstream.c:pim_upstream_is_kat_running:
  314|    438|{
  315|       |	return (up->t_ka_timer != NULL);
  316|    438|}

pim_is_group_filtered:
  130|  6.19k|{
  131|  6.19k|	struct prefix grp_pfx;
  132|  6.19k|	struct prefix_list *pl;
  133|       |
  134|  6.19k|	if (!pim_ifp->boundary_oil_plist)
  ------------------
  |  Branch (134:6): [True: 6.19k, False: 0]
  ------------------
  135|  6.19k|		return false;
  136|       |
  137|      0|	pim_addr_to_prefix(&grp_pfx, *grp);
  138|       |
  139|      0|	pl = prefix_list_lookup(PIM_AFI, pim_ifp->boundary_oil_plist);
  ------------------
  |  |   20|      0|#define PIM_AFI		AFI_IP
  ------------------
  140|      0|	return pl ? prefix_list_apply_ext(pl, NULL, &grp_pfx, true) ==
  ------------------
  |  Branch (140:9): [True: 0, False: 0]
  ------------------
  141|      0|			       PREFIX_DENY
  142|       |		  : false;
  143|  6.19k|}
pim_get_all_mcast_group:
  148|   148k|{
  149|   148k|#if PIM_IPV == 4
  150|   148k|	if (!str2prefix("224.0.0.0/4", prefix))
  ------------------
  |  Branch (150:6): [True: 0, False: 148k]
  ------------------
  151|      0|		return 0;
  152|       |#else
  153|       |	if (!str2prefix("FF00::0/8", prefix))
  154|       |		return 0;
  155|       |#endif
  156|   148k|	return 1;
  157|   148k|}

pim_vxlan_get_term_ifp:
  537|  43.1k|{
  538|  43.1k|	return pim->vxlan.term_if ?
  ------------------
  |  Branch (538:9): [True: 0, False: 43.1k]
  ------------------
  539|      0|		(struct pim_interface *)pim->vxlan.term_if->info : NULL;
  540|  43.1k|}
pim_vxlan_add_vif:
 1073|      2|{
 1074|      2|	struct pim_interface *pim_ifp = ifp->info;
 1075|      2|	struct pim_instance *pim = pim_ifp->pim;
 1076|       |
 1077|      2|	if (pim->vrf->vrf_id != VRF_DEFAULT)
  ------------------
  |  |  254|      2|#define VRF_DEFAULT 0
  ------------------
  |  Branch (1077:6): [True: 0, False: 2]
  ------------------
 1078|      0|		return;
 1079|       |
 1080|      2|	if (if_is_loopback(ifp))
  ------------------
  |  Branch (1080:6): [True: 0, False: 2]
  ------------------
 1081|      0|		pim_vxlan_set_default_iif(pim, ifp);
 1082|       |
 1083|      2|	if (vxlan_mlag.flags & PIM_VXLAN_MLAGF_ENABLED &&
  ------------------
  |  |   19|      2|#define vxlan_mlag (vxlan_info.mlag)
  ------------------
  |  Branch (1083:6): [True: 0, False: 2]
  ------------------
 1084|      0|			(ifp == vxlan_mlag.peerlink_rif))
  ------------------
  |  |   19|      0|#define vxlan_mlag (vxlan_info.mlag)
  ------------------
  |  Branch (1084:4): [True: 0, False: 0]
  ------------------
 1085|      0|		pim_vxlan_set_peerlink_rif(pim, ifp);
 1086|       |
 1087|      2|	if (pim->vxlan.term_if_cfg == ifp)
  ------------------
  |  Branch (1087:6): [True: 0, False: 2]
  ------------------
 1088|      0|		pim_vxlan_term_oif_update(pim, ifp);
 1089|      2|}
pim_vxlan_init:
 1164|      1|{
 1165|      1|	char hash_name[64];
 1166|       |
 1167|      1|	snprintf(hash_name, sizeof(hash_name),
 1168|      1|		"PIM %s vxlan SG hash", pim->vrf->name);
 1169|      1|	pim->vxlan.sg_hash = hash_create(pim_vxlan_sg_hash_key_make,
 1170|      1|			pim_vxlan_sg_hash_eq, hash_name);
 1171|      1|}

pim_zebra_update_all_interfaces:
  243|  11.9k|{
  244|  11.9k|	struct interface *ifp;
  245|       |
  246|  23.9k|	FOR_ALL_INTERFACES (pim->vrf, ifp) {
  ------------------
  |  |  372|  11.9k|	if (vrf)                                                               \
  |  |  ------------------
  |  |  |  Branch (372:6): [True: 11.9k, False: 0]
  |  |  ------------------
  |  |  373|  11.9k|		RB_FOREACH (ifp, if_name_head, &vrf->ifaces_by_name)
  |  |  ------------------
  |  |  |  |  529|  35.9k|	for ((_e) = RB_MIN(_name, (_head)); (_e) != NULL;                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  515|  11.9k|#define RB_MIN(_name, _head)		_name##_RB_MIN(_head)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (529:38): [True: 23.9k, False: 11.9k]
  |  |  |  |  ------------------
  |  |  |  |  530|  23.9k|	     (_e) = RB_NEXT(_name, (_e)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  517|  23.9k|#define RB_NEXT(_name, _elm)		_name##_RB_NEXT(_elm)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  247|  23.9k|		struct pim_interface *pim_ifp = ifp->info;
  248|  23.9k|		struct pim_iface_upstream_switch *us;
  249|  23.9k|		struct listnode *node;
  250|       |
  251|  23.9k|		if (!pim_ifp)
  ------------------
  |  Branch (251:7): [True: 0, False: 23.9k]
  ------------------
  252|      0|			continue;
  253|       |
  254|  23.9k|		for (ALL_LIST_ELEMENTS_RO(pim_ifp->upstream_switch_list, node,
  ------------------
  |  |  333|  23.9k|	(node) = listhead(list), ((data) = NULL);                              \
  |  |  ------------------
  |  |  |  |   51|  23.9k|#define listhead(X) ((X) ? ((X)->head) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (51:22): [True: 23.9k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|  23.9k|	(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: 23.9k]
  |  |  |  Branch (334:20): [True: 0, False: 0]
  |  |  ------------------
  |  |  335|  23.9k|	(node) = listnextnode(node), ((data) = NULL)
  |  |  ------------------
  |  |  |  |   49|      0|#define listnextnode(X) ((X) ? ((X)->next) : NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|  23.9k|					  us)) {
  256|      0|			struct pim_rpf rpf;
  257|       |
  258|      0|			rpf.source_nexthop.interface = ifp;
  259|      0|			rpf.rpf_addr = us->address;
  260|      0|			pim_joinprune_send(&rpf, us->us);
  261|      0|			pim_jp_agg_clear_group(us->us);
  262|      0|		}
  263|  23.9k|	}
  264|  11.9k|}
sched_rpf_cache_refresh:
  417|    280|{
  418|    280|	++pim->rpf_cache_refresh_requests;
  419|       |
  420|    280|	pim_rpf_set_refresh_time(pim);
  421|       |
  422|    280|	if (pim->rpf_cache_refresher) {
  ------------------
  |  Branch (422:6): [True: 0, False: 280]
  ------------------
  423|       |		/* Refresh timer is already running */
  424|      0|		return;
  425|      0|	}
  426|       |
  427|       |	/* Start refresh timer */
  428|       |
  429|    280|	if (PIM_DEBUG_ZEBRA) {
  ------------------
  |  |  154|    280|#define PIM_DEBUG_ZEBRA (router->debugs & PIM_MASK_ZEBRA)
  |  |  ------------------
  |  |  |  |   83|    280|#define PIM_MASK_ZEBRA               (1 << 11)
  |  |  ------------------
  |  |  |  Branch (154:25): [True: 0, False: 280]
  |  |  ------------------
  ------------------
  430|      0|		zlog_debug("%s: triggering %ld msec timer", __func__,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  431|      0|			   router->rpf_cache_refresh_delay_msec);
  432|      0|	}
  433|       |
  434|    280|	event_add_timer_msec(router->master, on_rpf_cache_refresh, pim,
  ------------------
  |  |  217|    280|#define event_add_timer_msec(m, f, a, v, t) 0
  ------------------
  435|    280|			     router->rpf_cache_refresh_delay_msec,
  436|    280|			     &pim->rpf_cache_refresher);
  437|    280|}
pim_zebra_init:
  479|      1|{
  480|       |	/* Socket for receiving updates from Zebra daemon */
  481|      1|	zclient = zclient_new(router->master, &zclient_options_default,
  482|      1|			      pim_handlers, array_size(pim_handlers));
  ------------------
  |  |  311|      1|#define array_size(ar) (sizeof(ar) / sizeof(ar[0]))
  ------------------
  483|       |
  484|      1|	zclient->zebra_capabilities = pim_zebra_capabilities;
  485|      1|	zclient->zebra_connected = pim_zebra_connected;
  486|       |
  487|      1|	zclient_init(zclient, ZEBRA_ROUTE_PIM, 0, &pimd_privs);
  ------------------
  |  |   18|      1|#define ZEBRA_ROUTE_PIM                  10
  ------------------
  488|      1|	if (PIM_DEBUG_PIM_TRACE) {
  ------------------
  |  |  146|      1|	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   77|      1|#define PIM_MASK_PIM_TRACE           (1 << 5)
  |  |  ------------------
  |  |               	(router->debugs & (PIM_MASK_PIM_TRACE | PIM_MASK_PIM_TRACE_DETAIL))
  |  |  ------------------
  |  |  |  |   78|      1|#define PIM_MASK_PIM_TRACE_DETAIL    (1 << 6)
  |  |  ------------------
  |  |  |  Branch (146:2): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  489|      0|		zlog_notice("%s: zclient socket initialized", __func__);
  ------------------
  |  |  133|      0|#define zlog_notice(...) 0
  ------------------
  490|      0|	}
  491|       |
  492|      1|	zclient_lookup_new();
  493|      1|}
pim_zebra_zclient_get:
  548|   154k|{
  549|   154k|	if (zclient)
  ------------------
  |  Branch (549:6): [True: 154k, False: 0]
  ------------------
  550|   154k|		return zclient;
  551|      0|	else
  552|      0|		return NULL;
  553|   154k|}

zclient_lookup_new:
  124|      1|{
  125|      1|	struct zclient_options options = zclient_options_default;
  126|      1|	options.synchronous = true;
  127|       |
  128|      1|	zlookup = zclient_new(router->master, &options, NULL, 0);
  129|      1|	if (!zlookup) {
  ------------------
  |  Branch (129:6): [True: 0, False: 1]
  ------------------
  130|      0|		flog_err(EC_LIB_ZAPI_SOCKET, "%s: zclient_new() failure",
  ------------------
  |  |  136|      0|#define flog_err(ferr_id, format, ...) 0
  ------------------
  131|      0|			 __func__);
  132|      0|		return;
  133|      0|	}
  134|       |
  135|      1|	zlookup->sock = -1;
  136|      1|	zlookup->t_connect = NULL;
  137|      1|	zlookup->privs = &pimd_privs;
  138|       |
  139|      1|	zclient_lookup_sched_now(zlookup);
  140|       |
  141|      1|	zlog_notice("%s: zclient lookup socket initialized", __func__);
  ------------------
  |  |  133|      1|#define zlog_notice(...) 0
  ------------------
  142|      1|}
zclient_lookup_nexthop:
  389|   118k|{
  390|   118k|	int lookup;
  391|   118k|	uint32_t route_metric = 0xFFFFFFFF;
  392|   118k|	uint8_t protocol_distance = 0xFF;
  393|       |
  394|   118k|	pim->nexthop_lookups++;
  395|       |
  396|   118k|	for (lookup = 0; lookup < max_lookup; ++lookup) {
  ------------------
  |  Branch (396:19): [True: 118k, False: 0]
  ------------------
  397|   118k|		int num_ifindex;
  398|   118k|		int first_ifindex;
  399|   118k|		pim_addr nexthop_addr;
  400|       |
  401|   118k|		num_ifindex = zclient_lookup_nexthop_once(pim, nexthop_tab,
  402|   118k|							  tab_size, addr);
  403|   118k|		if (num_ifindex < 1) {
  ------------------
  |  Branch (403:7): [True: 118k, False: 0]
  ------------------
  404|   118k|			if (PIM_DEBUG_PIM_NHT_DETAIL)
  ------------------
  |  |  168|   118k|#define PIM_DEBUG_PIM_NHT_DETAIL (router->debugs & PIM_MASK_PIM_NHT_DETAIL)
  |  |  ------------------
  |  |  |  |   95|   118k|#define PIM_MASK_PIM_NHT_DETAIL      (1 << 23)
  |  |  ------------------
  |  |  |  Branch (168:34): [True: 0, False: 118k]
  |  |  ------------------
  ------------------
  405|      0|				zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  406|   118k|					"%s: lookup=%d/%d: could not find nexthop ifindex for address %pPA(%s)",
  407|   118k|					__func__, lookup, max_lookup, &addr,
  408|   118k|					pim->vrf->name);
  409|   118k|			return -1;
  410|   118k|		}
  411|       |
  412|      0|		if (lookup < 1) {
  ------------------
  |  Branch (412:7): [True: 0, False: 0]
  ------------------
  413|       |			/* this is the non-recursive lookup - save original
  414|       |			 * metric/distance */
  415|      0|			route_metric = nexthop_tab[0].route_metric;
  416|      0|			protocol_distance = nexthop_tab[0].protocol_distance;
  417|      0|		}
  418|       |
  419|       |		/*
  420|       |		 * FIXME: Non-recursive nexthop ensured only for first ifindex.
  421|       |		 * However, recursive route lookup should really be fixed in
  422|       |		 * zebra daemon.
  423|       |		 * See also TODO T24.
  424|       |		 *
  425|       |		 * So Zebra for NEXTHOP_TYPE_IPV4 returns the ifindex now since
  426|       |		 * it was being stored.  This Doesn't solve all cases of
  427|       |		 * recursive lookup but for the most common types it does.
  428|       |		 */
  429|      0|		first_ifindex = nexthop_tab[0].ifindex;
  430|      0|		nexthop_addr = nexthop_tab[0].nexthop_addr;
  431|      0|		if (first_ifindex > 0) {
  ------------------
  |  Branch (431:7): [True: 0, False: 0]
  ------------------
  432|       |			/* found: first ifindex is non-recursive nexthop */
  433|       |
  434|      0|			if (lookup > 0) {
  ------------------
  |  Branch (434:8): [True: 0, False: 0]
  ------------------
  435|       |				/* Report non-recursive success after first
  436|       |				 * lookup */
  437|      0|				if (PIM_DEBUG_PIM_NHT)
  ------------------
  |  |  167|      0|#define PIM_DEBUG_PIM_NHT (router->debugs & PIM_MASK_PIM_NHT)
  |  |  ------------------
  |  |  |  |   94|      0|#define PIM_MASK_PIM_NHT             (1 << 22)
  |  |  ------------------
  |  |  |  Branch (167:27): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  438|      0|					zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  439|      0|						"%s: lookup=%d/%d: found non-recursive ifindex=%d for address %pPA(%s) dist=%d met=%d",
  440|      0|						__func__, lookup, max_lookup,
  441|      0|						first_ifindex, &addr,
  442|      0|						pim->vrf->name,
  443|      0|						nexthop_tab[0]
  444|      0|							.protocol_distance,
  445|      0|						nexthop_tab[0].route_metric);
  446|       |
  447|       |				/* use last address as nexthop address */
  448|      0|				nexthop_tab[0].nexthop_addr = addr;
  449|       |
  450|       |				/* report original route metric/distance */
  451|      0|				nexthop_tab[0].route_metric = route_metric;
  452|      0|				nexthop_tab[0].protocol_distance =
  453|      0|					protocol_distance;
  454|      0|			}
  455|       |
  456|      0|			return num_ifindex;
  457|      0|		}
  458|       |
  459|      0|		if (PIM_DEBUG_PIM_NHT)
  ------------------
  |  |  167|      0|#define PIM_DEBUG_PIM_NHT (router->debugs & PIM_MASK_PIM_NHT)
  |  |  ------------------
  |  |  |  |   94|      0|#define PIM_MASK_PIM_NHT             (1 << 22)
  |  |  ------------------
  |  |  |  Branch (167:27): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  460|      0|			zlog_debug(
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  461|      0|				"%s: lookup=%d/%d: zebra returned recursive nexthop %pPAs for address %pPA(%s) dist=%d met=%d",
  462|      0|				__func__, lookup, max_lookup, &nexthop_addr,
  463|      0|				&addr, pim->vrf->name,
  464|      0|				nexthop_tab[0].protocol_distance,
  465|      0|				nexthop_tab[0].route_metric);
  466|       |
  467|      0|		addr = nexthop_addr; /* use nexthop
  468|       |					addr for recursive lookup */
  469|       |
  470|      0|	} /* for (max_lookup) */
  471|       |
  472|      0|	if (PIM_DEBUG_PIM_NHT)
  ------------------
  |  |  167|      0|#define PIM_DEBUG_PIM_NHT (router->debugs & PIM_MASK_PIM_NHT)
  |  |  ------------------
  |  |  |  |   94|      0|#define PIM_MASK_PIM_NHT             (1 << 22)
  |  |  ------------------
  |  |  |  Branch (167:27): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  473|      0|		zlog_warn(
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
  474|      0|			"%s: lookup=%d/%d: failure searching recursive nexthop ifindex for address %pPA(%s)",
  475|      0|			__func__, lookup, max_lookup, &addr, pim->vrf->name);
  476|       |
  477|      0|	return -2;
  478|   118k|}
pim_zlookup.c:zclient_lookup_sched_now:
   84|   118k|{
   85|   118k|	event_add_event(router->master, zclient_lookup_connect, zlookup, 0,
  ------------------
  |  |  219|   118k|#define event_add_event(m, f, a, v, t) 0
  ------------------
   86|   118k|			&zlookup->t_connect);
   87|       |
   88|   118k|	zlog_notice("%s: zclient lookup immediate connection scheduled",
  ------------------
  |  |  133|   118k|#define zlog_notice(...) 0
  ------------------
   89|   118k|		    __func__);
   90|   118k|}
pim_zlookup.c:zclient_lookup_nexthop_once:
  313|   118k|{
  314|   118k|	struct stream *s;
  315|   118k|	int ret;
  316|   118k|	struct ipaddr ipaddr;
  317|       |
  318|   118k|	if (PIM_DEBUG_PIM_NHT_DETAIL)
  ------------------
  |  |  168|   118k|#define PIM_DEBUG_PIM_NHT_DETAIL (router->debugs & PIM_MASK_PIM_NHT_DETAIL)
  |  |  ------------------
  |  |  |  |   95|   118k|#define PIM_MASK_PIM_NHT_DETAIL      (1 << 23)
  |  |  ------------------
  |  |  |  Branch (168:34): [True: 0, False: 118k]
  |  |  ------------------
  ------------------
  319|      0|		zlog_debug("%s: addr=%pPAs(%s)", __func__, &addr,
  ------------------
  |  |  134|      0|#define zlog_debug(...) 0
  ------------------
  320|   118k|			   pim->vrf->name);
  321|       |
  322|       |	/* Check socket. */
  323|   118k|	if (zlookup->sock < 0) {
  ------------------
  |  Branch (323:6): [True: 118k, False: 0]
  ------------------
  324|   118k|		flog_err(EC_LIB_ZAPI_SOCKET,
  ------------------
  |  |  136|   118k|#define flog_err(ferr_id, format, ...) 0
  ------------------
  325|   118k|			 "%s: zclient lookup socket is not connected",
  326|   118k|			 __func__);
  327|   118k|		zclient_lookup_failed(zlookup);
  328|   118k|		return -1;
  329|   118k|	}
  330|       |
  331|      0|	if (pim->vrf->vrf_id == VRF_UNKNOWN) {
  ------------------
  |  |   21|      0|#define VRF_UNKNOWN UINT32_MAX
  ------------------
  |  Branch (331:6): [True: 0, False: 0]
  ------------------
  332|      0|		zlog_notice(
  ------------------
  |  |  133|      0|#define zlog_notice(...) 0
  ------------------
  333|      0|			"%s: VRF: %s does not fully exist yet, delaying lookup",
  334|      0|			__func__, pim->vrf->name);
  335|      0|		return -1;
  336|      0|	}
  337|       |
  338|      0|	ipaddr.ipa_type = PIM_IPADDR;
  ------------------
  |  |   22|      0|#define PIM_IPADDR	IPADDR_V4
  ------------------
  339|      0|	ipaddr.ipaddr_pim = addr;
  ------------------
  |  |   23|      0|#define ipaddr_pim	ipaddr_v4
  |  |  ------------------
  |  |  |  |   34|      0|#define ipaddr_v4 ip._v4_addr
  |  |  ------------------
  ------------------
  340|       |
  341|      0|	s = zlookup->obuf;
  342|      0|	stream_reset(s);
  343|      0|	zclient_create_header(s, ZEBRA_NEXTHOP_LOOKUP_MRIB, pim->vrf->vrf_id);
  344|      0|	stream_put_ipaddr(s, &ipaddr);
  345|      0|	stream_putw_at(s, 0, stream_get_endp(s));
  346|       |
  347|      0|	ret = writen(zlookup->sock, s->data, stream_get_endp(s));
  348|      0|	if (ret < 0) {
  ------------------
  |  Branch (348:6): [True: 0, False: 0]
  ------------------
  349|      0|		flog_err(
  ------------------
  |  |  136|      0|#define flog_err(ferr_id, format, ...) 0
  ------------------
  350|      0|			EC_LIB_SOCKET,
  351|      0|			"%s: writen() failure: %d writing to zclient lookup socket",
  352|      0|			__func__, errno);
  353|      0|		zclient_lookup_failed(zlookup);
  354|      0|		return -2;
  355|      0|	}
  356|      0|	if (ret == 0) {
  ------------------
  |  Branch (356:6): [True: 0, False: 0]
  ------------------
  357|      0|		flog_err_sys(EC_LIB_SOCKET,
  ------------------
  |  |  138|      0|#define flog_err_sys(ferr_id, format, ...) 0
  ------------------
  358|      0|			     "%s: connection closed on zclient lookup socket",
  359|      0|			     __func__);
  360|      0|		zclient_lookup_failed(zlookup);
  361|      0|		return -3;
  362|      0|	}
  363|       |
  364|      0|	return zclient_read_nexthop(pim, zlookup, nexthop_tab, tab_size, addr);
  365|      0|}
pim_zlookup.c:zclient_lookup_failed:
  103|   118k|{
  104|   118k|	if (zlookup->sock >= 0) {
  ------------------
  |  Branch (104:6): [True: 0, False: 118k]
  ------------------
  105|      0|		if (close(zlookup->sock)) {
  ------------------
  |  Branch (105:7): [True: 0, False: 0]
  ------------------
  106|      0|			zlog_warn("%s: closing fd=%d: errno=%d %s", __func__,
  ------------------
  |  |  131|      0|#define zlog_warn(...) 0
  ------------------
  107|      0|				  zlookup->sock, errno, safe_strerror(errno));
  108|      0|		}
  109|      0|		zlookup->sock = -1;
  110|      0|	}
  111|       |
  112|   118k|	zclient_lookup_reconnect(zlookup);
  113|   118k|}
pim_zlookup.c:zclient_lookup_reconnect:
   94|   118k|{
   95|   118k|	if (zlookup->t_connect) {
  ------------------
  |  Branch (95:6): [True: 0, False: 118k]
  ------------------
   96|      0|		return;
   97|      0|	}
   98|       |
   99|   118k|	zclient_lookup_sched_now(zlookup);
  100|   118k|}

pim_router_init:
   84|      1|{
   85|      1|	router = XCALLOC(MTYPE_ROUTER, sizeof(*router));
  ------------------
  |  |  165|      1|#define XCALLOC(mtype, size)		qcalloc(mtype, size)
  ------------------
   86|       |
   87|      1|	router->debugs = 0;
   88|      1|	router->master = frr_init_fast();
   89|      1|	router->t_periodic = PIM_DEFAULT_T_PERIODIC;
  ------------------
  |  |   23|      1|#define PIM_DEFAULT_T_PERIODIC                   (60)   /* RFC 4601: 4.11.  Timer Values */
  ------------------
   90|      1|	router->multipath = MULTIPATH_NUM;
  ------------------
  |  |  670|      1|#define MULTIPATH_NUM 16
  ------------------
   91|       |
   92|       |	/*
   93|       |	  RFC 4601: 4.6.3.  Assert Metrics
   94|       |
   95|       |	  assert_metric
   96|       |	  infinite_assert_metric() {
   97|       |	  return {1,infinity,infinity,0}
   98|       |	  }
   99|       |	*/
  100|      1|	router->infinite_assert_metric.rpt_bit_flag = 1;
  101|      1|	router->infinite_assert_metric.metric_preference =
  102|      1|		PIM_ASSERT_METRIC_PREFERENCE_MAX;
  ------------------
  |  |   41|      1|#define PIM_ASSERT_METRIC_PREFERENCE_MAX (0xFFFFFFFF)
  ------------------
  103|      1|	router->infinite_assert_metric.route_metric =
  104|      1|		PIM_ASSERT_ROUTE_METRIC_MAX;
  ------------------
  |  |   42|      1|#define PIM_ASSERT_ROUTE_METRIC_MAX      (0xFFFFFFFF)
  ------------------
  105|      1|	router->infinite_assert_metric.ip_address = PIMADDR_ANY;
  ------------------
  |  |   79|      1|#define PIMADDR_ANY (pim_addr){ }
  ------------------
  106|      1|	router->rpf_cache_refresh_delay_msec = 50;
  107|      1|	router->register_suppress_time = PIM_REGISTER_SUPPRESSION_TIME_DEFAULT;
  ------------------
  |  |  134|      1|#define PIM_REGISTER_SUPPRESSION_TIME_DEFAULT      (60)
  ------------------
  108|      1|	router->packet_process = PIM_DEFAULT_PACKET_PROCESS;
  ------------------
  |  |  126|      1|#define PIM_DEFAULT_PACKET_PROCESS 3
  ------------------
  109|      1|	router->register_probe_time = PIM_REGISTER_PROBE_TIME_DEFAULT;
  ------------------
  |  |  135|      1|#define PIM_REGISTER_PROBE_TIME_DEFAULT            (5)
  ------------------
  110|      1|	router->vrf_id = VRF_DEFAULT;
  ------------------
  |  |  254|      1|#define VRF_DEFAULT 0
  ------------------
  111|      1|	router->pim_mlag_intf_cnt = 0;
  112|       |	router->connected_to_mlag = false;
  113|      1|}
pim_init:
  121|      1|{
  122|      1|	if (!inet_pton(PIM_AF, PIM_ALL_PIM_ROUTERS,
  ------------------
  |  |   19|      1|#define PIM_AF		AF_INET
  ------------------
  |  Branch (122:6): [True: 0, False: 1]
  ------------------
  123|      1|		       &qpim_all_pim_routers_addr)) {
  124|      0|		flog_err(
  ------------------
  |  |  136|      0|#define flog_err(ferr_id, format, ...) 0
  ------------------
  125|      0|			EC_LIB_SOCKET,
  126|      0|			"%s %s: could not solve %s to group address: errno=%d: %s",
  127|      0|			__FILE__, __func__, PIM_ALL_PIM_ROUTERS, errno,
  128|      0|			safe_strerror(errno));
  129|      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|	})
  ------------------
  130|      0|		return;
  131|      0|	}
  132|       |
  133|      1|	pim_cmd_init();
  134|      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-gmp.yang.c:embed_register:
  203|      2|{
  204|      2|	yang_module_embed(&embed);
  205|      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-pim-rp.yang.c:embed_register:
  148|      2|{
  149|      2|	yang_module_embed(&embed);
  150|      2|}

frr-pim.yang.c:embed_register:
  572|      2|{
  573|      2|	yang_module_embed(&embed);
  574|      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|}

