/*++ Copyright (c) 2000 Microsoft Corporation Module Name: config.c Abstract: Reads cluster configuration from file Author: Ahmed Mohamed (ahmedm) 12, 01, 2000 Revision History: --*/ #include #include #include #include #include #include extern void debug_init(); void msg_set_mode(int mode); void msg_set_uport(int uport); void msg_set_mport(int mport); void msg_set_subnet(char *addr); void msg_set_mipaddr(char *addr); void msg_set_bufcount(int count); void msg_set_bufsize(int count); #define stricmp(a,b) strcmp(a,b) static char qfile[256]; static char vname[256]; static char crsname[256]; static int crssz = 128*1024; char * WINAPI config_get_volume() { return vname; } char * WINAPI config_get_crsfile() { return crsname; } int WINAPI config_get_crssz() { return crssz; } char * WINAPI config_get_qfile() { return qfile; } static void parse_node(char *buf) { char *s, *p, *q; int WINAPI msg_addnode(int id, char *n, char *a); int id; p = strchr(buf, ':'); if (p == NULL) return; *p = '\0'; p++; id = atoi(buf); s = p; p = strchr(s, ':'); if (p == NULL) return; p++; q = strchr(p, '\n'); if (q) { *q = '\0'; q += 2; } msg_addnode(id, s, p); } static void parse_vol(char *buf) { char *s, *p, *q; s = (char *)buf; #if 0 p = strchr(s, ':'); if (p == NULL) return; *p = '\0'; p++; #else p = s; #endif q = strchr(p, '\n'); if (q) { *q = '\0'; q += 2; } // add volume strcpy(vname, s); } static void parse(char *buf, ULONG len) { char *s, *p, *q; void WINAPI debug_log_file(char*); void WINAPI debug_level(ULONG); s = (char *)buf; s[len] = '\0'; p = strchr(s, ':'); if (p == NULL) return; *p = '\0'; p++; q = strchr(p, '\n'); if (q) { *q = '\0'; q += 2; } if (!stricmp(s, "quorm")) { strcpy(qfile, p); } else if (!stricmp(s, "log_file")) { debug_log_file(p); } else if (!stricmp(s, "log_level")) { ULONG x = (ULONG) atoi(p); debug_level(x); } else if (!stricmp(s, "crs_file")) { strcpy(crsname, p); } else if (!stricmp(s, "crs_size")) { crssz = atoi(p); if (crssz == 0) { crssz = 128; } } else if (!stricmp(s, "mcast")) { msg_set_mode(atoi(p)); } else if (!stricmp(s, "mcast_ipaddr")) { msg_set_mipaddr(p); } else if (!stricmp(s, "mcast_port")) { int x = atoi(p); msg_set_mport(x); } else if (!stricmp(s, "subnet")) { msg_set_subnet(p); } else if (!stricmp(s, "ucast_port")) { int x = atoi(p); msg_set_uport(x); } else if (!stricmp(s, "buffers")) { int x = atoi(p); msg_set_bufcount(x); } else if (!stricmp(s, "bufsize")) { int x = atoi(p); msg_set_bufsize(x); } else if (!stricmp(s, "node")) { parse_node(p); } else if (!stricmp(s, "volume")) { parse_vol(p); } else { fprintf(stderr,"Unknown tag '%s'\n", s); } } void ConfigInit() { char buf[256]; FILE *fp; char *s = getenv("RfsFile"); if (s == NULL) s = "rfs.conf"; debug_init(); // Open cluster fp = fopen(s, "r"); if (fp == NULL) { fprintf(stderr,"Unable to open configuration file '%s'\n", s); exit(0); } // init stuff strcpy(crsname, "c:\\crs.log"); while (fgets(buf, sizeof(buf), fp)) { if (strlen(buf) > 2) { parse(buf, strlen(buf)); } } fclose(fp); }