232 lines
3.5 KiB
C
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);
|
|
|
|
|
|
}
|
|
|