if (nrt) nrt->rt_refcnt--;
if (nrt) { rt_newaddrmsg(cmd, ifa, e, nrt); if (cmd == RTM_DELETE) { if (nrt->rt_refcnt <= 0) {  nrt->rt_refcnt++; rtfree(nrt); } } else {  nrt->rt_refcnt--; } }
in6_ifloop_request(int cmd, struct ifaddr *ifa){	struct sockaddr_in6 lo_sa;	struct sockaddr_in6 all1_sa;	struct rtentry *nrt = NULL, **nrtp = NULL;		bzero(&lo_sa, sizeof(lo_sa));	bzero(&all1_sa, sizeof(all1_sa));	lo_sa.sin6_family = AF_INET6;	lo_sa.sin6_len = sizeof(struct sockaddr_in6);	all1_sa = lo_sa;	lo_sa.sin6_addr = in6addr_loopback;	all1_sa.sin6_addr = in6mask128;		/*	 * So we add or remove static loopback entry, here.	 * This request for deletion could fail, e.g. when we remove	 * an address right after adding it.	 */	if (cmd == RTM_ADD)		nrtp = &nrt;	rtrequest(cmd, ifa->ifa_addr,		  (struct sockaddr *)&lo_sa,		  (struct sockaddr *)&all1_sa,		  RTF_UP|RTF_HOST, nrtp);	/*	 * Make sure rt_ifa be equal to IFA, the second argument of the	 * function.	 * We need this because when we refer to rt_ifa->ia6_flags in	 * ip6_input, we assume that the rt_ifa points to the address instead	 * of the loopback address.	 */	if (cmd == RTM_ADD && nrt && ifa != nrt->rt_ifa) {		IFAFREE(nrt->rt_ifa);		ifa->ifa_refcnt++;		nrt->rt_ifa = ifa;	}	if (nrt)		nrt->rt_refcnt--;}