windows-nt/Source/XPSP1/NT/base/cluster/service/gs/config.c
2020-09-26 16:20:57 +08:00

232 lines
3.5 KiB
C

/*++
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 <windows.h>
#include <winioctl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
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);
}