public boolean execute() {

	final int cycle=CDState.getCycle();
	if( shuffle ) rperm.reset( Network.size() );
	for(int j=0; j<Network.size(); ++j)
	{
		Node node = null;
		if( getpair_rand )
			node = Network.get(CDState.r.nextInt(Network.size()));
		else if( shuffle )
			node = Network.get(rperm.next());
		else
			node = Network.get(j);
		if( !node.isUp() ) continue; 
		CDState.setNode(node);
		CDState.setCycleT(j);
		final int len = node.protocolSize();
		for(int k=0; k<len; ++k)
		{
			// Check if the protocol should be executed, given the
			// associated scheduler.
			if (!protSchedules[k].active(cycle))
				continue;
				
			CDState.setPid(k);
			Protocol protocol = node.getProtocol(k);
			if( protocol instanceof CDProtocol )
			{
				((CDProtocol)protocol).nextCycle(node, k);
				if( !node.isUp() ) break;
			}
		}
	}

	return false;
}