t_param_plat leer_archivo_plataforma_config() {
	t_config* config;
	t_param_plat param;

	log_in_disk_plat(LOG_LEVEL_TRACE,
			"comienzo lectura archivo de configuracion plataforma en el %s ",
			PATH_CONFIG_PLATAFORMA);

	config = config_create(PATH_CONFIG_PLATAFORMA);

	param.PUERTO = config_get_int_value(config, "PUERTO");

	param.SEGUNDOS_ESPERA = config_get_double_value(config, "SEGUNDOS_ESPERA");

	param.CUANTUM = config_get_int_value(config, "CUANTUM");

	log_in_disk_plat(LOG_LEVEL_TRACE,
			"Parametros planificador puerto %d segundos de planificacions %.2f cuantum %d ",
			param.PUERTO, param.SEGUNDOS_ESPERA, param.CUANTUM);

	//param.planificador_nivel = config_get_array_value(config, "planDeNiveles");

	//solo entro en el loop si el mivel de log es LOG_LEVEL_TRACE
//	if (LOG_LEVEL_TRACE == 0) {
//		int i = 0;
//		while (param.planificador_nivel[i] != '\0') {
//			log_in_disk_plat(LOG_LEVEL_TRACE, "Niveles de planificador %s ",
//					param.planificador_nivel[i]);
//			i++;
//		}
//	}

	return param;

}
tipoConfigCPU* cargarArchivoDeConfiguracionDeCPU(char* rutaDelArchivoDeConfiguracionDelCPU){

	t_config* archivoCfg = config_create(rutaDelArchivoDeConfiguracionDelCPU);
	tipoConfigCPU* cfg = crearConfigCPU();

	validarErrorYAbortar(config_has_property(archivoCfg,IP_PLANIFICADOR)
			&& config_has_property(archivoCfg,PUERTO_PLANIFICADOR)
			&& config_has_property(archivoCfg,IP_MEMORIA)
			&& config_has_property(archivoCfg,PUERTO_MEMORIA)
			&& config_has_property(archivoCfg,CANTIDAD_HILOS)
			&& config_has_property(archivoCfg,RETARDO),
			"Las claves del archivo de configuracion no coinciden con las que requiere el CPU");


	cfg->ipPlanificador = string_duplicate(config_get_string_value(archivoCfg,IP_PLANIFICADOR));
	cfg->puertoPlanificador = config_get_int_value(archivoCfg,PUERTO_PLANIFICADOR);
	cfg->ipMemoria = string_duplicate(config_get_string_value(archivoCfg,IP_MEMORIA));
	cfg->puertoMemoria = config_get_int_value(archivoCfg,PUERTO_MEMORIA);
	cfg->cantidadDeHilos = config_get_int_value(archivoCfg,CANTIDAD_HILOS);
	cfg->retardo = config_get_int_value(archivoCfg,RETARDO);

	config_destroy(archivoCfg);

	return cfg;
}
void inicializar_CPU(char *path, uint32_t *retardo) {
t_config* config = config_create(path);
*retardo = config_get_int_value(config,"RETARDO");
uint16_t puertoMSP = config_get_int_value(config,"PUERTO_MSP");
char *direccionIpMSP = config_get_string_value(config,"IP_MSP");
uint16_t puertoKernel = config_get_int_value(config,"PUERTO_KERNEL");
char *direccionIpKernel = config_get_string_value(config,"IP_KERNEL");
if((Kernel = client_socket(direccionIpKernel, puertoKernel)) < 0) {
puts("ERROR: No se pudo conectar al Kernel.");
exit(EXIT_FAILURE);
}
t_msg *handshake = id_message(CPU_CONNECT);
enviar_mensaje(Kernel, handshake);
destroy_message(handshake);
if((MSP = client_socket(direccionIpMSP, puertoMSP)) < 0) {
puts("ERROR: No se pudo conectar a la MSP.");
exit(EXIT_FAILURE);
}
config_destroy(config);
MapRegistros['A'-'A'] = &Registros.registros_programacion[0];
MapRegistros['B'-'A'] = &Registros.registros_programacion[1];
MapRegistros['C'-'A'] = &Registros.registros_programacion[2];
MapRegistros['D'-'A'] = &Registros.registros_programacion[3];
MapRegistros['E'-'A'] = &Registros.registros_programacion[4];
MapRegistros['K'-'A'] = &Registros.K;
MapRegistros['I'-'A'] = &Registros.I;
MapRegistros['M'-'A'] = &Registros.M;
MapRegistros['P'-'A'] = &Registros.P;
MapRegistros['S'-'A'] = &Registros.S;
MapRegistros['X'-'A'] = &Registros.X;
inicializar_tabla_instrucciones();
}
void
readConfig(char *path)
{

  t_config *configKernel;
  configKernel = config_create(path);
  configuration.ipUMV = config_get_string_value(configKernel, "IPUMV");
  configuration.ipKernel = config_get_string_value(configKernel, "IPKERNEL");
  configuration.puertoUMV = config_get_string_value(configKernel, "PUERTO_UMV");
  /*configuration.puertoKERNEL = config_get_string_value(configKernel,
   "PUERTO_KERNEL");*/
  configuration.puertoProg = config_get_string_value(configKernel,
      "PUERTO_PROG");
  configuration.puertoCPU = config_get_string_value(configKernel, "PUERTO_CPU");
  configuration.quantum = config_get_int_value(configKernel, "QUANTUM");
  configuration.grado_multiprog = config_get_int_value(configKernel,
      "MULTIPROGRAMACION");
  configuration.retardo = config_get_int_value(configKernel, "RETARDO");
  configuration.tamanio_pila = config_get_int_value(configKernel,
      "TAMANIO_STACK");
  configuration.semaforos = config_get_array_value(configKernel, "SEMAFOROS");
  configuration.valor_semaforos = config_get_array_value(configKernel,
      "VALOR_SEMAFORO");
  configuration.valorHIO = config_get_array_value(configKernel, "HIO");
  configuration.var_compartidas = config_get_array_value(configKernel,
      "VARIABLES_GLOBALES");
  configuration.idHIO = config_get_array_value(configKernel, "ID_HIO");
  //config_destroy(configKernel); TODO esto tiene un leak mas grande que uan casa

}
void levantarArchivoConfiguracionPlataforma() {
	t_config *config;
	config = config_create(PATH_CONFIG_PLATAFORMA);

	if (config->properties->elements_amount == 0) {
		printf("\nERROR AL LEVANTAR ARCHIVO DE CONFIGURACION %s \n", PATH_CONFIG_PLATAFORMA);
		perror("\nERROR AL LEVANTAR ARCHIVO DE CONFIGURACION\n( Don't PANIC! Si estas por consola ejecuta: ln -s ../plataforma.conf plataforma.conf )\n\n");
		config_destroy(config);
		exit(-1);
	}

	//Levanto los parametros necesarios para el planificador
	configPlat.PUERTO = config_get_int_value(config, "PUERTO");

	strcpy(configPlat.KOOPA, config_get_string_value(config, "KOOPA"));
	strcpy(configPlat.SCRIPT, config_get_string_value(config, "SCRIPT"));
	strcpy(configPlat.FILESYSTEM, config_get_string_value(config, "FILESYSTEM"));
	configPlat.SLEEP_KOOPA = config_get_int_value(config, "SLEEP_KOOPA");
	configPlat.RD = config_get_int_value(config, "RD");

	strcpy(configPlat.LOG_PATH, config_get_string_value(config, "LOG_PATH"));
	configPlat.LOG_NIVEL = obtenerLogLevel( config_get_string_value(config, "LOG_NIVEL"));
	configPlat.LOG_CONSOLA = config_get_int_value(config, "LOG_CONSOLA");

	// Una vez que se levantaron los datos del archivo de configuracion
	// puedo/debo destruir la estructura config.
	config_destroy(config);
}
void init(){

	LOGGER = log_create(LOG_PATH, "MaRTA", true, LOG_LEVEL_DEBUG);
	CONF = config_create(CONF_PATH); //HACK estaba mal el nombre de la funcion o no la encontraba o no se

	if(LOGGER == NULL){
		perror("ERROR! no pudo levantar ni el log!");
		exit(EXIT_FAILURE);
	}

	if(CONF == NULL){
		log_error(LOGGER, "\nERROR AL LEVANTAR ARCHIVO DE CONFIGURACION\n( Don't PANIC! Si estas por consola ejecuta: ln -s ../%s %s )\n\n"
				, CONF_PATH
				, CONF_PATH);

		exit(EXIT_FAILURE);
	}

//	if(!validarConfig()){ //HACK no lo necesitaba, no entendi el codigo del map y no me servia, anda :P
//		log_error(LOGGER, "No pudo obtenerse alguno de los parametros de configuracion");
//		exit(EXIT_FAILURE);
//	}

	mapa_nodos = dictionary_create();
	lista_jobs = list_create();
	pthread_mutex_init(&mutex_mapa_nodos, NULL);
	pthread_mutex_init(&mutex_lista_jobs, NULL);


	log_info(LOGGER, "intenta conectarse a la ip %s con puerto %d", config_get_string_value(CONF, "IP_FS"), config_get_int_value(CONF, "PUERTO_FS"));
	socketFS = conectarAServidor(config_get_string_value(CONF, "IP_FS"), config_get_int_value(CONF, "PUERTO_FS"));
	while (socketFS == -1) {
		 log_info(LOGGER, "Filesystem no levantado. Se reintenta conexion en unos segundos");
		 sleep(5);
		 socketFS = conectarAServidor(config_get_string_value(CONF, "IP_FS"), config_get_int_value(CONF, "PUERTO_FS"));
	}

	header_t header;
	initHeader(&header);
	header.tipo = MARTA_TO_FS_HANDSHAKE;
	header.largo_mensaje = 0;
	header.cantidad_paquetes = 1;

	log_info(LOGGER, "Conectado a FS! envio header %s", getDescription(header.tipo));
	enviar_header(socketFS, &header);
	t_mensaje mensaje;
	memset(&mensaje, 0, sizeof(t_mensaje));
	recibir_t_mensaje(socketFS, &mensaje);
	log_info(LOGGER, "recibo respuesta %s de FS", getDescription(mensaje.tipo));

	while(mensaje.tipo != ACK){
		log_info(LOGGER, "Todavia el FS no esta disponible. Header recibido: %s. Reintento en 5 segundos", getDescription(header.tipo));
		sleep(5);
		enviar_header(socketFS, &header);
		recibir_t_mensaje(socketFS, &mensaje);
	}

	recibirNodosFS();
	log_info(LOGGER, "%s: FS está operativo. Continúo", getDescription(header.tipo));
}
tipoConfigSWAP* cargarArchivoDeConfiguracionDeSWAP(char* rutaDelArchivoDeConfiguracion){

	t_config* archivoCfg = config_create(rutaDelArchivoDeConfiguracion);

	tipoConfigSWAP* cfg = crearConfigSWAP();

	validarErrorYAbortar(config_has_property(archivoCfg,PUERTO_ESCUCHA)
			&& config_has_property(archivoCfg,NOMBRE_SWAP)
			&& config_has_property(archivoCfg,CANTIDAD_PAGINAS)
			&& config_has_property(archivoCfg,TAMANIO_PAGINA)
			&& config_has_property(archivoCfg,RETARDO_COMPACTACION),
			"Las claves del archivo de configuracion no coinciden con las que requiere el SWAP");


	cfg->puertoDeEscucha = config_get_int_value(archivoCfg,PUERTO_ESCUCHA);
	cfg->nombreDeSWAP = string_duplicate(config_get_string_value(archivoCfg,NOMBRE_SWAP));
	cfg->cantidadDePaginas = config_get_int_value(archivoCfg,CANTIDAD_PAGINAS);
	cfg->retardoDeCompactacion = config_get_int_value(archivoCfg,RETARDO_COMPACTACION);
	cfg->tamanioDePagina = config_get_int_value(archivoCfg,TAMANIO_PAGINA);


	config_destroy(archivoCfg);

	return cfg;
}
Exemple #8
0
void obtenerDatosAlgorimo(informacion_planificacion_t* datosAlgoritmo) {
	t_config* conF = config_create(CONFIG_PATH);

	if (config_has_property(conF, "Nombre")) {
		datosAlgoritmo->nombreNivel = malloc(
				strlen(config_get_string_value(conF, "Nombre")) + 1);
		strcpy(datosAlgoritmo->nombreNivel,
				config_get_string_value(conF, "Nombre"));
	}

	if (config_has_property(conF, "algoritmo")) {
		char* algoritmo = config_get_string_value(conF, "algoritmo");
		datosAlgoritmo->algoritmo =
				strcmp("RR", algoritmo) == 0 ? ROUND_ROBIN : SRDF;
	}

	if (config_has_property(conF, "quantum")) {
		datosAlgoritmo->quantum = config_get_int_value(conF, "quantum");
	}

	if (config_has_property(conF, "retardo")) {
		datosAlgoritmo->retardo = config_get_int_value(conF, "retardo");
	}

	config_destroy(conF);
}
void initFileSystem()
{
	logFile = log_create("./FileSystem.log","FileSystem", true, LOG_LEVEL_TRACE);
	pthread_mutex_init(&mLogFile, NULL);

	t_config* archivoConfig = config_create("./FileSystem.config");

	PUERTO_LISTEN = config_get_int_value(archivoConfig, "PUERTO_LISTEN");
	char* tmp = config_get_string_value(archivoConfig, "IP_LISTEN");
	strcpy(IP_LISTEN,tmp);
	free(tmp);

	LISTA_NODOS = config_get_int_value(archivoConfig, "LISTA_NODOS");

	//config_destroy(archivoConfig);

	listaArchivos = list_create();
	pthread_mutex_init(&mListaArchivos, NULL);

	listaDirs = list_create();
	pthread_mutex_init(&mListaDirs, NULL);
	t_reg_directorio* raiz = malloc(sizeof(t_reg_directorio));
	strcpy(raiz->directorio, "\0");
	raiz->padre = -1;
	list_add(listaDirs, raiz);

	initConsola();
	initComandos();
	initConexiones();
	leerPersistencia();
}
void initNucleo(t_config* config){
	quantum = config_get_int_value(config, "QUANTUM");
	quantum_sleep = config_get_int_value(config, "QUANTUM_SLEEP");
	io_ids = config_get_array_value(config, "IO_ID");
	io_sleep_times = config_get_array_value(config, "IO_SLEEP");
	semaforos_ids = config_get_array_value(config, "SEM_IDS");
	semaforos_init_values = config_get_array_value(config, "SEM_INIT");
	shared_values = config_get_array_value(config, "SHARED_VARS");
	stack_size = config_get_int_value(config, "STACK_SIZE");
	umc_ip = config_get_string_value(config, "UMC_IP");
	test_mode = config_get_int_value(config, "TEST_MODE");
	io_thread_sleep = config_get_int_value(config, "IO_THREAD_SLEEP");


	//Estruturas para control de estados
	READY_Process_Queue = queue_create();
	BLOCKED_Process_Queue = queue_create();
	RUNNING_Process_List = list_create();
	General_Process_List = list_create();

	//Creación de lista de dispositivos
	IO_Device_List = list_create();
	set_IO_devices_list();

	//Lista de control de CPUs conectadas
	CPU_control_list = list_create();

	//Creación de lista de semáforos
	semaforo_control_list = list_create();
	set_semaforo_list();

	//Creación del diccionario de variables
	vars_control_dictionary = dictionary_create();
	set_vars_dictionary();
}
void leerConfiguracion(void){
	config=config_create(PATH);

	configuracion_cpu.ip_kernel=config_get_string_value(config,"Direccion IP para conectarse al Kernel");
	configuracion_cpu.puerto_kernel=config_get_int_value(config,"Puerto TCP para conectarse al Kernel");
	configuracion_cpu.ip_umv=config_get_string_value(config,"Direccion IP para conectarse a la UMV");
	configuracion_cpu.puerto_umv=config_get_int_value(config,"Puerto TCP para conectarse a la UMV");
}
// Funciones
void setearValores_config(t_config * archivoConfig) {
	config = reservarMemoria(sizeof(t_configuracion));
	config->puerto = config_get_int_value(archivoConfig, "PUERTO_ESCUCHA");
	config->nombreSwap = strdup(config_get_string_value (archivoConfig, "NOMBRE_SWAP"));
	config->cantidadPaginas = config_get_int_value(archivoConfig, "CANTIDAD_PAGINAS");
	config->tamanioPagina = config_get_int_value(archivoConfig, "TAMANIO_PAGINA");
	config->retardoCompactacion = config_get_int_value(archivoConfig, "RETARDO_COMPACTACION");
	config->retardoAcceso = config_get_int_value(archivoConfig , "RETARDO_ACCESO");
}
Exemple #13
0
void levantarCfg(char **ip, int32_t *port,t_log_level *log_level, uint8_t *maxThreads, char **nombreArchivo, char** ipCache, int32_t *portCache) {

	char *log_level_str;
	t_config *s_cfg = config_create("cfgRfs.txt");

	if(config_has_property(s_cfg,"port")) {
		*port = config_get_int_value(s_cfg,"port");
	}else{
		puts("Faltan campos en el cfg");
		exit(0);
	}
	if(config_has_property(s_cfg,"ip")) {
		*ip = config_get_string_value(s_cfg,"ip");
	}else{
		puts("Faltan campos en el cfg");
		exit(0);
	}
	if(config_has_property(s_cfg,"log")) {
		log_level_str = config_get_string_value(s_cfg,"log");
		*log_level = log_level_from_string(log_level_str);
	}else{
		puts("Faltan campos en el cfg");
		exit(0);
	}
	if(config_has_property(s_cfg,"hilos")) {
		 *maxThreads = config_get_int_value(s_cfg,"hilos");
	}else{
		puts("Faltan campos en el cfg");
		exit(0);
	}
	if(config_has_property(s_cfg,"archivo")) {
		*nombreArchivo = config_get_string_value(s_cfg,"archivo");
	}else{
		puts("Faltan campos en el cfg");
		exit(0);
	}
	if(config_has_property(s_cfg,"delay")) { //delay var global
		delay = (config_get_int_value(s_cfg,"delay"))*1000;
	}else{
		puts("Faltan campos en el cfg");
		exit(0);
	}
	if(config_has_property(s_cfg,"ipCache")) { //delay var global
		*ipCache  = config_get_string_value(s_cfg,"ipCache");
	}else{
		puts("Faltan campos en el cfg");
		exit(0);
	}
	if(config_has_property(s_cfg,"portCache")) { //delay var global
		*portCache = config_get_int_value(s_cfg,"portCache");
	}else{
		puts("Faltan campos en el cfg");
		exit(0);
	}
}
void setearValores(t_config * archivoConfig) {
	puertoEscucha = config_get_string_value(archivoConfig, "PUERTO");
	ip_Swap = config_get_string_value(archivoConfig, "IP_SWAP");
	puerto_Swap = config_get_string_value(archivoConfig, "PUERTO_SWAP");
	marcos = config_get_int_value(archivoConfig, "MARCOS");
	marco_Size = config_get_int_value(archivoConfig, "MARCO_SIZE");
	marco_x_proc = config_get_int_value(archivoConfig, "MARCO_X_PROC");
	algoritmoDeReemplazo = config_get_string_value(archivoConfig, "ALGORITMO");
	entradas_TLB = config_get_int_value(archivoConfig, "ENTRADAS_TLB");
	espera = config_get_int_value(archivoConfig, "RETARDO");
}
Exemple #15
0
void crear_estructura_config(char* path)
{
    t_config* archConfig = config_create(path);
    arch = malloc(sizeof(ProcesoSwap));
    arch->puerto_escucha = config_get_int_value(archConfig, "PUERTO_ESCUCHA");
    arch->nombre_swap = config_get_string_value(archConfig, "NOMBRE_SWAP");
    arch->cantidad_paginas = config_get_int_value(archConfig, "CANTIDAD_PAGINAS");
    arch->tamanio_pagina= config_get_int_value(archConfig, "TAMANIO_PAGINA");
    arch->retardo= config_get_int_value(archConfig, "RETARDO_SWAP");
    arch->retardo_comp= config_get_int_value(archConfig, "RETARDO_COMPACTACION");
}
Exemple #16
0
void *comienzaPCP() {
	listaVarCompartidas = list_create(); // Lista de las variables compartidas
	listaSemaforos = list_create(); // Lista de Semaforos
	listaIO = list_create(); // Lista de los Dispositivos IO
	listaBloqueados = list_create(); //Lista de procesos bloqueados por semaforo
	config = config_create(getenv("CONFIG_KERNEL"));
	log_pcp = creacionLog(config_get_string_value(config, "LOG_KERNEL"), "PCP");
	log_debug(log_pcp, "Inicia el proceso PCP..");
	log_trace(log_pcp, "Creado log del PCP");
	log_trace(log_pcp, "Cargado el archivo de configuracion");

	// ######################## Cargo Archivo de config ######################## //
	// Cargo QUANTUM y retardo Quantum en estructuraInicial
	estructuraInicial = malloc(sizeof(t_EstructuraInicial));
	estructuraInicial->Quantum = config_get_int_value(config, "QUANTUM");
	estructuraInicial->RetardoQuantum = config_get_int_value(config, "RETARDO");
	log_trace(log_pcp, "Cargado el Quantum: %d , retardoQuantum:%d",
			estructuraInicial->Quantum, estructuraInicial->RetardoQuantum);
	cpuAcerrar=0;
	// Cargo las varCompartidas en listaVarCompartidas asi es mas comodo manejarlas
	cargoVarCompartidasEnLista();
	// Cargo los semaforos en listaSemaforos
	cargoSemaforosEnLista();
	// Cargo los IO en listaIO
	cargoIOenLista();
	pthread_t hiloIO, hiloPCB;					//hilo por IO y PCB
	sem_init(&semClienteOcioso, 1, 0);		// Semaforo para clientes ociosos

	//Creo hilo por cada dispositivo
	void _creoHilos(void* entradaSalida) {
		if (pthread_create(&hiloIO, NULL, hiloPorIO, (void*) entradaSalida)
				!= 0) {
			perror("could not create thread");
		}
	}

	list_iterate(listaIO, (void*) _creoHilos);

	// creo hilo para manejar programas que se cierren inesperadamente
	if (pthread_create(&hiloPCB, NULL, (void*) hiloPCBaFinalizar, NULL ) != 0) {
		perror("could not create thread");
	}
	// ######################## 	Fin loading		 ######################## //

	server_cpu();

	config_destroy(config);
	log_destroy(log_pcp);
	list_destroy_and_destroy_elements(listaVarCompartidas, free);
	list_destroy_and_destroy_elements(listaIO, free);
	list_destroy_and_destroy_elements(listaSemaforos, free);
	return 0;
}
//TODO: dos main en el proyecto me rompen todo ;)
void* checkEvent() {
	char buffer[BUF_LEN];

	// Al inicializar inotify este nos devuelve un descriptor de archivo
	int file_descriptor = inotify_init();
	if (file_descriptor < 0) {
		perror("inotify_init");
	}

	// Creamos un monitor sobre un path indicando que eventos queremos escuchar
	int watch_descriptor = inotify_add_watch(file_descriptor, "/config", IN_CLOSE_WRITE );

	// El file descriptor creado por inotify, es el que recibe la información sobre los eventos ocurridos
	// para leer esta información el descriptor se lee como si fuera un archivo comun y corriente pero
	// la diferencia esta en que lo que leemos no es el contenido de un archivo sino la información
	// referente a los eventos ocurridos
	int length = read(file_descriptor, buffer, BUF_LEN);
	if (length < 0) {
		perror("read");
	}

	int offset = 0;

	// Luego del read buffer es un array de n posiciones donde cada posición contiene
	// un eventos ( inotify_event ) junto con el nombre de este.
	while (offset < length) {

		// El buffer es de tipo array de char, o array de bytes. Esto es porque como los
		// nombres pueden tener nombres mas cortos que 24 caracteres el tamaño va a ser menor
		// a sizeof( struct inotify_event ) + 24.
		struct inotify_event *event = (struct inotify_event *) &buffer[offset];

		// El campo "len" nos indica la longitud del tamaño del nombre
		if (event->len) {
			// Dentro de "mask" tenemos el evento que ocurrio y sobre donde ocurrio
			// sea un archivo o un directorio
			if (event->mask & IN_CLOSE) {

				//create config otra vez
				//chequear que el campo haya cambiado (quantum o lo que sea)
				t_config* config = getConfig("nucleo.config");
				quantum = config_get_int_value(config, "QUANTUM");
				quantum_sleep = config_get_int_value(config, "QUANTUM_SLEEP");
			}
		}
		offset += sizeof (struct inotify_event) + event->len;
	}

	inotify_rm_watch(file_descriptor, watch_descriptor);
	close(file_descriptor);

	return EXIT_SUCCESS;
}
Exemple #18
0
void GetInfoConfFile(void)
{
	t_config* config;
	config = config_create(PATH_CONFIG);
	if (config_has_property(config, "IP"))
	{
		myip = (char*) malloc(strlen(config_get_string_value(config, "IP")) + 1);
		strcpy(myip, config_get_string_value(config, "IP"));
	}
	strcpy(algoritmo,config_get_string_value(config, "ALGORITMO"));
	port = config_get_int_value(config, "PORT");
	space = config_get_int_value(config, "DISK_SPACE");
	retardo = config_get_int_value(config, "RETARDO");
	return;
}
bool conectarUMV()
{
	socketUMV = conectar(config_get_string_value(config, "IP_UMV"), config_get_int_value(config, "PUERTO_UMV"), logplp);

	if (socketUMV == -1) {
		log_error(logplp, "No se pudo establecer la conexion con la UMV");
		return false;
	}

	log_info(logplp, "Conectado con la UMV");

	socket_header handshake;

	handshake.size = sizeof(socket_header);
	handshake.code = 'k'; //Kernel

	if( send(socketUMV, &handshake, sizeof(socket_header), 0) <= 0 )
	{
		log_error(logplp, "No se puedo enviar Handshake a la UMV");
		sem_post(&semKernel);
		return false;
	}

	return true;
}
void leerConfiguracion(void){
	t_config* config=config_create(PATH_config);

	configuracion_programa.ip_kernel = config_get_string_value(config,"Direccion IP para conectarse al Kernel");
	configuracion_programa.puerto_kernel = config_get_int_value(config,"Puerto TCP para recibir conexiones del Kernel");

	}
Exemple #21
0
Nivel* levantarConfiguracion(char *rutaArchivo) {
	Nivel *nivel;
	nivel = malloc(sizeof(Nivel));
	nivel->items = list_create();
	ITEM_NIVEL *itemNivel;
	t_config *config = config_create(rutaArchivo);
	nivel->nombre = config_get_string_value(config, "Nombre");
	nivel->recovery = config_get_int_value(config, "Recovery");
	nivel->tiempoChequeoDeadLock = config_get_int_value(config,
			"TiempoChequeoDeadlock");

	int masCajas = 1;
	int i = 1;
	while (masCajas) {

		itemNivel = malloc(sizeof(ITEM_NIVEL));
		//Armamos el string de la caja
		//que vamos a buscar
		char c[2];
		//Convertimos el int a un char
		sprintf(c, "%d", i);
		char caja[10] = "Caja";
		strcat(caja, c);
		char *datosCaja = config_get_string_value(config, caja);
		if (datosCaja) {
			strsep(&datosCaja, ",");
			itemNivel->id =* strsep(&datosCaja, ",");
			itemNivel->quantity = atoi(strsep(&datosCaja, ","));
			itemNivel->posx = atoi(strsep(&datosCaja, ","));
			itemNivel->posy = atoi(strsep(&datosCaja, ","));
			itemNivel->item_type = 'C';
			list_add(nivel->items,itemNivel);
			free(datosCaja);
			i++;
		} else {
			masCajas = 0;
		}
	}

	//La funcion strsep sirve para separar strings, aca la usamos para
	//separar la IP y el PUERTO
	char *ipCompleta = config_get_string_value(config, "orquestador");
	nivel->ip = strsep(&ipCompleta, ":");
	nivel->puerto = atoi(ipCompleta);
	return nivel;
}
Exemple #22
0
void readFSCConfig(char* configPath, char** IP, uint32_t* port, char** IPcache,
		uint32_t* portCache,char** logFilePath,t_log_level* logLevelDetail,uint32_t* cantidadDeConexiones) { //se tiene que ampliar para leer la ip el puerto y otras cosas mas
	fsc_config = config_create(configPath);
	*IP = calloc(1,strlen(config_get_string_value(fsc_config, "IP"))+1);

	strncpy(*IP, config_get_string_value(fsc_config, "IP"),
			strlen(config_get_string_value(fsc_config, "IP"))+1);
	*port = config_get_int_value(fsc_config, "Port");
	*IPcache = malloc(strlen(config_get_string_value(fsc_config, "IPcache"))+1);

	strncpy(*IPcache, config_get_string_value(fsc_config, "IPcache"),
			strlen(config_get_string_value(fsc_config, "IPcache"))+1);
	*portCache = config_get_int_value(fsc_config, "PortCache");
	*logFilePath= config_get_string_value(fsc_config,"ArchivoLog");
	*logLevelDetail=config_get_int_value(fsc_config,"DetalleLog");
	*cantidadDeConexiones=config_get_int_value(fsc_config,"CantidadDeConexiones");
}
void obtenerConfiguracion(char* nombre_archivo) {
	t_config* config;

	configuracion = (t_Datos_configuracion*) malloc(sizeof(t_Datos_configuracion));
	char* path = file_combine(PATH_CONFIG, nombre_archivo);
	config = config_create(path);

	if (config_has_property(config, "IP_MARTA")) {
		configuracion->ip_marta = strdup(config_get_string_value(config, "IP_MARTA"));
	} else {
		log_error_consola("El archivo de configuracion %s debe tener un IP_MARTA", path);
		exit(1);
	}
	if (config_has_property(config, "REDUCE")) {
		configuracion->reduce = read_whole_file(config_get_string_value(config, "REDUCE"));
		configuracion->tamanio_reduce = file_get_size(config_get_string_value(config, "REDUCE"));
	} else {
		log_error_consola("El archivo de configuracion %s debe tener un REDUCE", path);
		exit(1);
	}

	if (config_has_property(config, "MAPPER")) {
		configuracion->mapper = read_whole_file(config_get_string_value(config, "MAPPER"));
		configuracion->tamanio_mapper = file_get_size(config_get_string_value(config, "MAPPER"));

	} else {
		log_error_consola("El archivo de configuracion %s debe tener un MAPPER", path);
		exit(1);
	}
	if (config_has_property(config, "PUERTO_MARTA")) {
		configuracion->puerto_marta = config_get_int_value(config, "PUERTO_MARTA");
	} else {
		log_error_consola("El archivo de configuracion %s debe tener un PUERTO_MARTA", path);
		exit(1);
	}
	if (config_has_property(config, "COMBINER")) {
		configuracion->combiner = !strcmp(config_get_string_value(config, "COMBINER"), "SI") ? 1 : 0;
	} else {
		log_error_consola("El archivo de configuracion %s debe tener un COMBINER", path);
		exit(1);
	}
	if (config_has_property(config, "RESULTADO")) {
		configuracion->resultado = strdup(config_get_string_value(config, "RESULTADO"));
	} else {
		log_error_consola("El archivo de configuracion %s debe tener un RESULTADO", path);
		exit(1);
	}
	if (config_has_property(config, "ARCHIVOS")) {
		configuracion->archivos = strdup(config_get_string_value(config, "ARCHIVOS"));
	} else {
		log_error_consola("El archivo de configuracion %s debe tener un ARCHIVOS", path);
		exit(1);
	}

	log_info_consola("El archivo de configuracion %s fue cargado con exito", path);

	config_destroy(config);
}
int leerArchivoConfiguracion(char *ruta_archivo) {
	int devolver = 0;

	config = config_create(ruta_archivo);
	printf("Leyendo archivo de configuraciones: %s\n", ruta_archivo);

	PUERTO_ESCUCHA = config_get_int_value(config, "PUERTO_ESCUCHA");
	IP_SWAP = config_get_string_value(config, "IP_SWAP");
	PUERTO_SWAP = config_get_int_value(config, "PUERTO_SWAP");
	MAXIMO_MARCOS_POR_PROCESO=config_get_int_value(config,"MAXIMO_MARCOS_POR_PROCESO");
	CANTIDAD_MARCOS=config_get_int_value(config,"CANTIDAD_MARCOS");
	TAMANIO_MARCO=config_get_int_value(config,"TAMANIO_MARCOS");
	ENTRADAS_TLB=config_get_int_value(config,"ENTRADAS_TLB");
	TLB_HABILITADA=config_get_string_value(config,"TLB_HABILITADA");
	RETARDO=config_get_int_value(config,"RETARDO");

	printf("Puerto de la Memoria que escucha: %d\n", PUERTO_ESCUCHA);
	printf("IP del Swap: %s\n", IP_SWAP);
	printf("Puerto del Swap: %d\n", PUERTO_SWAP);
	printf("Cantidad maxima de marcos por proceso: %d\n", MAXIMO_MARCOS_POR_PROCESO);
	printf("Cantidad de Marcos: %d\n", CANTIDAD_MARCOS);
	printf("Tamanio de cada marco: %d\n", TAMANIO_MARCO);
	printf("Cantidad de entradas TLB: %d\n", ENTRADAS_TLB);
	printf("TLB habilitada: %s\n", TLB_HABILITADA);
	printf("Tiempo de retardo: %d\n", RETARDO);
	puts("Listo.\n");

	return devolver;
}
void setearValorEntero(int* valorASetear,char* parametroABuscar){
	if (config_has_property(CPU_config,parametroABuscar)){
		*valorASetear = config_get_int_value(CPU_config,parametroABuscar);
		printf("%s = %d \n",parametroABuscar, *valorASetear);
	}
	else{
		printf("No se encontro %s\n",parametroABuscar);
	}
}
unsigned leerUnsigned(t_config *config, char* key) {
	unsigned datoInt = 0;
	if (config_has_property(config, key)) {
		datoInt = config_get_int_value(config, key);
	} else {
		error_show("No se leyó el %s de la config \n", key);
	}
	return datoInt;
}
t_param_persoje leer_personaje_config() {
	t_config* config;
	t_param_persoje param;
	t_recusos *list_recursos; //declaro el tipo nodo
	char *aux_char;
	char *aux_str;
	char **aux;
	int i;

	log_in_disk_per(LOG_LEVEL_TRACE,
			"comienzo lectura archivo de configuracion del personaje en el %s ",
			PATH_CONFIG_PERSONAJE);

	param.RECURSOS = list_create(); //creo lista de recursos
	config = config_create(PATH_CONFIG_PERSONAJE);

	//param.nom_nivel = nivel; //copio el nombre del nivel que pase por parametro en el main
	param.NOMBRE = config_get_string_value(config, "NOMBRE");

	aux_char = config_get_string_value(config, "SIMBOLO");

	param.SMBOLO = aux_char[0];

	param.PLAN_NIVELES = config_get_array_value(config, "PLANDENIVELES");

	param.VIDAS = config_get_int_value(config, "VIDAS");

	aux_char = config_get_string_value(config, "PLATAFORMA");

	aux = string_split(aux_char, ":");
	param.IP = aux[0];
	param.PUERTO_PLATAFORMA = atoi(aux[1]);

	i = 0;
	while (param.PLAN_NIVELES[i] != '\0') {

		list_recursos = malloc(sizeof(t_recusos));
		//sprintf(aux_str, "OBJ[%s]", param.PLAN_NIVELES[i]);
		aux_str = string_from_format("OBJ[%s]", param.PLAN_NIVELES[i]);

		log_in_disk_per(LOG_LEVEL_TRACE, "Niveles de planificador %s ",
				param.PLAN_NIVELES[i]);

		list_recursos->RECURSOS = config_get_array_value(config, aux_str);
		strcpy(list_recursos->NOMBRE, param.PLAN_NIVELES[i]);
		list_add(param.RECURSOS, list_recursos); //agrego el nuevo nodo

		log_in_disk_per(LOG_LEVEL_TRACE,
				"Niveles de planificador %s con los recursos %s",
				param.PLAN_NIVELES[i],
				config_get_string_value(config, aux_str));
		i++;
	}

	return param;

}
Exemple #28
0
void actualizarDelay(int fd) {

	char buffer[1024];
	read( fd, buffer, 1024 ); //leo para q el select no entre otra vez

	t_config *s_cfg = config_create("cfgRfs.txt");
	if(config_has_property(s_cfg,"delay")) {
		delay = (config_get_int_value(s_cfg,"delay"))*1000;
	}
}
//Cargar archivo de configuracion
tipoConfig* cargarArchivoDeConfiguracion(char* rutaDelArchivoDeConfiguracion){

	t_config* archivoCfg = config_create(rutaDelArchivoDeConfiguracion);
	validarExistenciaDeArchivoDeConfiguracion(rutaDelArchivoDeConfiguracion);

	tipoConfig* cfg = crearConfig();

	validarErrorYAbortar(config_has_property(archivoCfg,PUERTO_ESCUCHA)
			&& config_has_property(archivoCfg,QUANTUM),
			"Las claves del archivo de configuracion no coinciden con las que requiere el Panificador");


	cfg->puertoPlanificador = config_get_int_value(archivoCfg,PUERTO_ESCUCHA);
	cfg->quantum = config_get_int_value(archivoCfg,QUANTUM);

	config_destroy(archivoCfg);

	return cfg;
}
Exemple #30
0
NIVEL_CONF* inicializarCongiuracionNivel() {
	t_config* conF = config_create(CONFIG_PATH);
	NIVEL_CONF *configObj = malloc(sizeof(NIVEL_CONF));

	if (config_has_property(conF, "Nombre")) {
		configObj->nombre = malloc(
				strlen(config_get_string_value(conF, "Nombre")) + 1);
		strcpy(configObj->nombre, config_get_string_value(conF, "Nombre"));
	}
	if (config_has_property(conF, "TiempoChequeoDeadlock")) {
		configObj->deadlockTime = config_get_int_value(conF,
				"TiempoChequeoDeadlock");
	}
	if (config_has_property(conF, "Recovery")) {
		configObj->recovery = config_get_int_value(conF, "Recovery");
	}
	char *tok = ":";
	if (config_has_property(conF, "orquestador")) {
		char *orqaddr = strdup(config_get_string_value(conF, "orquestador"));
		configObj->orquestadoraddr = strtok(orqaddr, tok);
		configObj->orquestadorport = strtok(NULL, tok);
	}
	if (config_has_property(conF, "localhost")) {
		char *locaddr = strdup(config_get_string_value(conF, "localhost"));
		configObj->localhostaddr = strtok(locaddr, tok);
		configObj->localhostport = strtok(NULL, tok);
	}
	if (config_has_property(conF, "Log")) {
		configObj->logLevel = malloc(
				strlen(config_get_string_value(conF, "Log")));
		strcpy(configObj->logLevel, config_get_string_value(conF, "Log"));
	}
	if (config_has_property(conF, "Enemigos")) {
		configObj->enemigos = config_get_int_value(conF, "Enemigos");
	}
	if (config_has_property(conF, "Sleep_Enemigos")) {
		configObj->sleepEnemigos = config_get_int_value(conF, "Sleep_Enemigos");
	}
	config_destroy(conF);
	return configObj;
}