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);
}
示例#2
0
int leerConfiguracion(char *ruta, datosConfiguracion **datos) {
	t_config* archivoConfiguracion = config_create(ruta);//Crea struct de configuracion
	if (archivoConfiguracion == NULL) {
		return 0;
	} else {
		int cantidadKeys = config_keys_amount(archivoConfiguracion);
		if (cantidadKeys < 7) {
			return 0;
		} else {
			(*datos)->puerto = buscarInt(archivoConfiguracion, "PUERTO");
			char* nombreSwap=string_new();
			string_append(&nombreSwap,config_get_string_value(archivoConfiguracion, "NOMBRE_SWAP"));
			(*datos)->nombre_swap =nombreSwap;
			(*datos)->cantidadPaginas = buscarInt(archivoConfiguracion, "CANTIDAD_PAGINAS");
			(*datos)->tamPagina = buscarInt(archivoConfiguracion, "TAMANIO_PAGINA");
			(*datos)->retardoAcceso = buscarInt(archivoConfiguracion, "RETARDO_ACCESO");
			(*datos)->retardoCompactacion = buscarInt(archivoConfiguracion, "RETARDO_COMPACTACION");
			char* ip=string_new();
			string_append(&ip,config_get_string_value(archivoConfiguracion,"IP"));
			(*datos)->ip=ip;
			config_destroy(archivoConfiguracion);
			return 1;
		}
	}
}
示例#3
0
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 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));
}
示例#5
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);
}
示例#6
0
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

}
示例#7
0
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 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 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");
}
示例#10
0
void levantar_configuraciones() {

	t_config * archivo_configuracion = config_create("CPU.confg");
	config_cpu.PUERTO_NUCLEO = config_get_string_value(archivo_configuracion, "PUERTO_NUCLEO");
	config_cpu.IP_NUCLEO = config_get_string_value(archivo_configuracion, "IP_NUCLEO");
	config_cpu.PUERTO_UMC = config_get_string_value(archivo_configuracion, "PUERTO_UMC");
	config_cpu.IP_UMC = config_get_string_value(archivo_configuracion, "IP_UMC");
}
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;

}
char* leerString(t_config *config, char* key) {
	char * datoString = malloc(sizeof(config_get_string_value(config, key)));
	if (config_has_property(config, key)) {
		datoString = config_get_string_value(config, key);
	} else {
		error_show("No se leyó el %s de la config \n", key);
	}
	return datoString;
}
示例#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);
	}
}
示例#14
0
int Cmain(void){

	t_config *  archivo = config_create("/home/utnso//archivos_de_nivel/nivel1");

	char * nombre = config_get_string_value(archivo,"Nombre");
	char * caja1  = config_get_string_value(archivo,"caja1");
	char * caja2  = config_get_string_value(archivo,"caja2");
    char * caja3  = config_get_string_value(archivo,"caja3");

    //////////////
/*    int i=1;
    char* mensaje=malloc(sizeof(10));
    sprintf(mensaje,"caja%d",i);
    t_list* cajas= list_create();


    t_caja unaCaja=(t_caja*)malloc(sizeof(t_caja));
    unaCaja->nombre=vec[0];
    unaCaja->Simbolo=vec[1];

    void _imprimirCajas(t_caja * unaCaja) {
    	printf("Nombre=%s",unaCaja->nombre);
    	printf("Nombre=%s",unaCaja->nombre);
    	printf("Nombre=%s",unaCaja->nombre);
    	printf("Nombre=%s",unaCaja->nombre);
    	printf("Nombre=%s",unaCaja->nombre);
    }
    list_iterate(cajas,(void*)_imprimirCajas);




    list_add(cajas,unaCaja);
    /////////////
*/
   //char** aP = string_get_string_as_array(nombre);

    char ** vec = string_split(caja1,",");

    printf("%s\n",caja2);
    printf("%s\n",caja3);
    printf("%s\n",caja1);

      int i;

	for(i=1;i<strlen(caja1);i++){

	  printf("%s\n",vec[i]);

    }


	return 0;

}
示例#15
0
t_datos_kernel connectToKernel() {
	char* IPKernel = config_get_string_value(configuracion_CPU, "IPKernel");
	char* puertoKernel = config_get_string_value(configuracion_CPU,
			"PuertoKernel");
	pcpSocket = connect_to(IPKernel, puertoKernel);
	if (pcpSocket == -1) {
		log_debug(logger, "Failure connecting to Kernel");
		destroyOnConnectionFailure();
	}
	return doHandshakeKernel();
}
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");
}
示例#17
0
void connectToUMV() {
	char* IP_UMV = config_get_string_value(configuracion_CPU, "IPUMV");
	char* puertoUMV = config_get_string_value(configuracion_CPU, "PuertoUMV");
	umvSocket = connect_to(IP_UMV, puertoUMV);
	if (umvSocket == -1) {
		log_debug(logger, "Connection to UMV failed. Ending");
		destroyOnConnectionFailure();
	}
	log_debug(logger, "Connection to UMV is ready, preparing handshake...");
	doHandshakeUMV();
}
void leerArchivoDeConfiguracion(int argc, char *argv[]) {

	char* logMsg = NULL;

	if (argc < 2) {
		logMsg =
				string_from_format(
						"Debe especificar la ruta al archivo de configuracion, al invocar al programa, por ejemplo: ./Memoria /home/utnso/tp-2015-2c-tpso/Memoria/config_memoria.cfg\n");
		puts(logMsg);
		my_log_error(logMsg);
		exit(-1);
	}

	char* nombreArchivoConfig = nombreArchivoConfig = strdup(argv[1]);
	uint8_t result = checkearRutaArchivoConfig(nombreArchivoConfig);
	if (result == -1) {
		logMsg = string_from_format("Archivo de configuracion no encontrado. Parametro especificado: %s\n", nombreArchivoConfig);
		puts(logMsg);
		my_log_error(logMsg);
		exit(-1);
	} else {
		t_config* archivoConfig;
		archivoConfig = config_create(nombreArchivoConfig);
		//warning asignacion diferentes tipos
		configuracion = iniciarArchivoConfig();
		configuracion->puertoEscucha = config_get_int_value(archivoConfig, "PUERTO_ESCUCHA");
		configuracion->puertoSwap = config_get_int_value(archivoConfig, "PUERTO_SWAP");
		configuracion->ipSwap = strdup(config_get_string_value(archivoConfig, "IP_SWAP"));

		char* nombreMemoria = config_get_string_value(archivoConfig, "NOMBRE_MEMORIA");
		configuracion->nombreMemoria = strdup(nombreMemoria != NULL ? nombreMemoria : "NOMBRE_MEMORIA");

		configuracion->maximosMarcosPorProceso = config_get_int_value(archivoConfig, "MAXIMO_MARCOS_POR_PROCESO");
		configuracion->cantidadMarcos = config_get_int_value(archivoConfig, "CANTIDAD_MARCOS");
		configuracion->tamanioMarcos = config_get_int_value(archivoConfig, "TAMANIO_MARCO");
		configuracion->entradasTlb = config_get_int_value(archivoConfig, "ENTRADAS_TLB");
		if (string_equals(config_get_string_value(archivoConfig, "TLB_HABILITADA"),"SI")){
			configuracion->tlbHabilitada=1;
		}
		else if (string_equals(config_get_string_value(archivoConfig, "TLB_HABILITADA"),"NO")){
			configuracion->tlbHabilitada=0;
		}
		configuracion->retardoMemoria = config_get_int_value(archivoConfig, "RETARDO_MEMORIA");
		configuracion->algoritmo_reemplazo = strdup(config_get_string_value(archivoConfig, "ALGORITMO_REEMPLAZO"));
		my_log_info("[INFO]: Archivo de configuracion leido correctamente\n");

		logMsg = string_from_format("Archivo de configuracion leido correctamente\n");
		puts(logMsg);

		//config_destroy(archivoConfig);

	}

}
示例#19
0
void setearValores(t_config * archivoConfig){
	vg_puerto_escucha = config_get_int_value(archivoConfig, "PUERTO_ESCUCHA");
	vg_ip_swap = strdup(config_get_string_value(archivoConfig, "IP_SWAP"));
	vg_puerto_swap = config_get_int_value(archivoConfig, "PUERTO_SWAP");
	vg_maximo_marcos_por_proceso = config_get_int_value(archivoConfig, "MAXIMO_MARCOS_POR_PROCESO");
	vg_cantidad_marcos = config_get_int_value(archivoConfig, "CANTIDAD_MARCOS");
	vg_tamanio_marco = config_get_int_value(archivoConfig, "TAMANIO_MARCO");
	vg_entradas_tlb = config_get_int_value(archivoConfig, "ENTRADAS_TLB");
	vg_tlb_habilitada = strdup(config_get_string_value(archivoConfig, "TLB_HABILITADA"));
	vg_retardo_memoria = config_get_int_value(archivoConfig, "RETARDO_MEMORIA");
}
int cargarConfiguraciones(void){
	char* pathConfig=getenv("ANSISOP_CONFIG");
	t_config* configuracion = config_create(pathConfig);

	if (config_has_property(configuracion,"Puerto") && config_has_property(configuracion,"IP")){
		puerto=config_get_string_value(configuracion,"Puerto");
		ip=config_get_string_value(configuracion,"IP");
		return 0;
	} else {
		return CONFIG_INVALIDA;
	}

}
/*
 * PLATAFORMA
 */
int main(int argc, char*argv[]) {

	signal(SIGINT, cerrarTodoSignal);

	if (argc <= 1) {
		printf("[ERROR] Se debe pasar como parametro el archivo de configuracion.\n");
		exit(EXIT_FAILURE);
	}

	int thResult;
	pthread_t thOrquestador;

	// Creamos el archivo de configuracion
	configPlataforma = config_try_create(argv[1], "puerto,koopa,script");

	// Obtenemos el puerto
	usPuerto   = config_get_int_value(configPlataforma, "puerto");

	// Obtenemos el path donde va a estar koopa
	pathKoopa  = config_get_string_value(configPlataforma, "koopa");

	// Obtenemos el path donde va a estar el script para el filesystem
	pathScript = config_get_string_value(configPlataforma, "script");

	// Obtenemos el mountpoint
	mountpoint = config_get_string_value(configPlataforma, "mountpoint");

	logger = logInit(argv, "PLATAFORMA");

	// Inicializo el semaforo
	pthread_mutex_init(&semNivel, NULL);
	pthread_mutex_init(&mtxlNiveles, NULL);

	// Inicializa la lista de personajes
	personajes_jugando = list_create();

	thResult = pthread_create(&thOrquestador, NULL, orquestador, (void *) &usPuerto);

	if (thResult != 0) {
		log_error(logger, "No se pudo crear el hilo orquestador.");
		exit(EXIT_FAILURE);
	}

	pthread_join(thOrquestador, NULL);

	log_destroy(logger);

	exit(EXIT_SUCCESS);
}
示例#22
0
/*
 *  FUNCION     : Carga los datos de configuración de la cpu. Valida parametros obtenidos.
 *  Recibe      : estructura de configuracion para la cpu, path del archivo de configuración
 *  Devuelve    : void
 */
void levantarDatosDeConfiguracion(t_configuracion_cpu* configuracion, char* config_path){

	t_config* config = config_create(config_path);

	if(validarParametrosDeConfiguracion(config)){

		log_info(logger, "El archivo de configuración tiene todos los parametros requeridos.");

		configuracion->nucleo_ip = config_get_string_value(config,"NUCLEO_IP");

		/*char* nucleo_ip = config_get_string_value(config,"NUCLEO_IP");
		configuracion->nucleo_ip = malloc(strlen(nucleo_ip));
		memcpy(configuracion->nucleo_ip, nucleo_ip, strlen(nucleo_ip));
		configuracion->nucleo_ip[strlen(nucleo_ip)] = '\0';*/

		configuracion->nucleo_puerto = config_get_string_value(config, "NUCLEO_PUERTO");

		/*char* nucleo_puerto = config_get_string_value(config,"NUCLEO_PUERTO");
		configuracion->nucleo_puerto = malloc(strlen(nucleo_puerto)+1);
		memcpy(configuracion->nucleo_puerto, nucleo_puerto, strlen(nucleo_puerto));
		configuracion->nucleo_puerto[strlen(nucleo_puerto)] = '\0';*/

		configuracion->umc_ip = config_get_string_value(config,"UMC_IP");

//		char* umc_ip = config_get_string_value(config,"UMC_IP");
//		configuracion->umc_ip = malloc(strlen(umc_ip));
//		memcpy(configuracion->umc_ip, umc_ip, strlen(umc_ip));
//		configuracion->umc_ip[strlen(umc_ip)] = '\0';

		configuracion->umc_puerto = config_get_string_value(config,"UMC_PUERTO");

//		char* umc_puerto = config_get_string_value(config,"UMC_PUERTO");
//		configuracion->umc_puerto = malloc(strlen(umc_puerto)+1);
//		memcpy(configuracion->umc_puerto, umc_puerto, strlen(umc_puerto));
//		configuracion->umc_puerto[strlen(umc_puerto)] = '\0';

		configuracion->cpu_id = config_get_int_value(config, "CPU_ID");

//		int cpu_id = config_get_int_value(config,"CPU_ID");
//		configuracion->cpu_id = malloc(sizeof configuracion->cpu_id);
//		memcpy(configuracion->cpu_id, &cpu_id, sizeof(int));

		//config_destroy(config);
	}else{
	    log_error_y_cerrar_logger(logger, "Configuracion invalida.");
	    config_destroy(config);
		exit(EXIT_FAILURE);
	}
}
示例#23
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;
}
示例#24
0
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);
}
//---------------------------------------------- <COMMUNICATION>
void com_initConsolaListener(t_config* config){
	char* puerto_prog = config_get_string_value(config, "PUERTO_PROG");
	consola_listener = crear_puerto_escucha(puerto_prog);
	FD_ZERO(&consola_sockets_set);    // clear the master and temp sets
	FD_SET(consola_listener, &consola_sockets_set);
	fd_consola_max = consola_listener;
}
示例#26
0
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;
}
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){
	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");

	}
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;
}
示例#30
0
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();
}