if (msg->connected) memcpy(&nh->true_nexthop, &nh->exit_nexthop, sizeof(nh->true_nexthop)); else memcpy(&nh->true_nexthop, &msg->gateway, sizeof(nh->true_nexthop));
if (msg->connected) { if (!(nh->flags & NEXTHOP_LINKLOCAL))  nh->true_nexthop = nh->exit_nexthop; nh->flags |= NEXTHOP_CONNECTED; } else { nh->true_nexthop = msg->gateway; nh->flags &= ~NEXTHOP_LINKLOCAL; }
nexthop_update(struct kroute_nexthop *msg){	struct nexthop		*nh;	struct rde_aspath	*asp;	nh = nexthop_get(msg->nexthop.v4);	if (nh == NULL) {		log_warnx("nexthop_update: non-existent nexthop");		return;	}	/* should I trust in the parent ??? */	if (nh->exit_nexthop.af != msg->nexthop.af ||	    (nh->exit_nexthop.af == AF_INET &&	    nh->exit_nexthop.v4.s_addr != msg->nexthop.v4.s_addr)) {		log_warnx("nexthop_update: bad nexthop returned");		return;	}	if (msg->valid)		nh->state = NEXTHOP_REACH;	else		nh->state = NEXTHOP_UNREACH;	if (msg->connected)		memcpy(&nh->true_nexthop, &nh->exit_nexthop,		    sizeof(nh->true_nexthop));	else		memcpy(&nh->true_nexthop, &msg->gateway,		    sizeof(nh->true_nexthop));	nh->nexthop_netlen = msg->kr.kr4.prefixlen;	nh->nexthop_net.af = AF_INET;	nh->nexthop_net.v4.s_addr = msg->kr.kr4.prefix.s_addr;	if (msg->connected)		nh->flags |= NEXTHOP_CONNECTED;	if (rde_noevaluate())		/*		 * if the decision process is turned off there is no need		 * for the aspath list walk.		 */		return;	LIST_FOREACH(asp, &nh->path_h, nexthop_l) {		path_updateall(asp, nh->state);	}}