Annotation of embedtools/src/dwds.c, revision 1.1.2.4
1.1.2.1 misho 1: #include "global.h"
2: #include "dwds.h"
3:
4:
1.1.2.4 ! misho 5: sl_config cfg;
! 6: int Verbose, Kill, nif;
! 7: char **ifs, szConfig[MAXPATHLEN] = DWDS_CONFIG;
! 8: struct dwds_if *wds;
1.1.2.2 misho 9: extern char compiled[], compiledby[], compilehost[];
10:
11:
12: static void
13: Usage()
14: {
1.1.2.3 misho 15: printf( "-= dWDS =- WiFi dynamic WDS service managment for VAP\n"
1.1.2.2 misho 16: "=== %s === %s@%s ===\n\n"
1.1.2.3 misho 17: " Syntax: dwds [options] <interface|any> [interface [...]]\n"
1.1.2.2 misho 18: "\n"
19: "\t-v\t\tVerbose ...\n"
20: "\t-f\t\tForeground, not demonize process ...\n"
21: "\t-c <config>\tConfig file [default=/etc/dwds.conf]\n"
22: "\n", compiled, compiledby, compilehost);
23: }
24:
1.1.2.4 ! misho 25: static void
! 26: sigHandler(int sig)
! 27: {
! 28: int stat;
! 29: const u_char *v;
! 30: char szStr[STRSIZ];
! 31:
! 32: switch (sig) {
! 33: case SIGHUP:
! 34: UnloadConfig(&cfg);
! 35: if (LoadConfig(szConfig, &cfg)) {
! 36: printf("Error:: can`t load config %s ...\n", szConfig);
! 37: Kill++;
! 38: } else {
! 39: closelog();
! 40:
! 41: cfg_LoadAttribute(&cfg, CFG("dwds"), CFG("name"), CFG(szStr), STRSIZ, DWDS_NAME);
! 42: openlog(szStr, LOG_PID | LOG_CONS, LOG_DAEMON);
! 43: v = cfg_GetAttribute(&cfg, CFG("dwds"), CFG("syslog_upto"));
! 44: setlogmask(v ? strtol((char*) v, NULL, 0) : 0);
! 45: }
! 46: break;
! 47: case SIGTERM:
! 48: Kill++;
! 49: break;
! 50: case SIGCHLD:
! 51: while (waitpid(-1, &stat, WNOHANG) > 0);
! 52: break;
! 53: }
! 54: }
! 55:
! 56: static int
! 57: RtMsg(struct rt_msghdr *msg, size_t len)
! 58: {
! 59: return 0;
! 60: }
! 61:
1.1.2.2 misho 62: // ---------------------------------------------------------------
63:
1.1.2.1 misho 64: int
65: main(int argc, char **argv)
66: {
1.1.2.4 ! misho 67: char ch, szStr[STRSIZ], fg = 0;
! 68: const u_char *v, msg[2048];
! 69: int s;
! 70: struct sigaction sa;
! 71: size_t len;
1.1.2.2 misho 72:
1.1.2.3 misho 73: while ((ch = getopt(argc, argv, "hvfc:")) != -1)
74: switch (ch) {
75: case 'v':
76: Verbose++;
77: break;
78: case 'f':
79: fg = 1;
80: break;
81: case 'c':
82: strlcpy(szConfig, optarg, MAXPATHLEN);
83: break;
84: case 'h':
85: default:
86: Usage();
87: return 1;
88: }
89: argc -= optind;
90: argv += optind;
91: if (!argc) {
92: printf("Error:: not specified interface for use ...\n");
93: Usage();
94: return 1;
1.1.2.4 ! misho 95: } else {
! 96: nif = argc;
! 97: ifs = argv;
! 98: }
! 99: if (LoadConfig(szConfig, &cfg)) {
! 100: printf("Error:: can`t load config %s ...\n", szConfig);
! 101: return 1;
! 102: }
! 103:
! 104: if (fg)
! 105: switch (fork()) {
! 106: case -1:
! 107: printf("Error:: when fork() #%d - %s\n", errno, strerror(errno));
! 108: UnloadConfig(&cfg);
! 109: return 2;
! 110: case 0 :
! 111: VERB(1) printf("Going to shadow land ...\n");
! 112:
! 113: setsid();
! 114:
! 115: memset(&sa, 0, sizeof sa);
! 116: sa.sa_handler = sigHandler;
! 117: sigemptyset(&sa.sa_mask);
! 118: sigaction(SIGHUP, &sa, NULL);
! 119: sigaction(SIGTERM, &sa, NULL);
! 120: sigaction(SIGCHLD, &sa, NULL);
! 121: break;
! 122: default:
! 123: goto end;
! 124: }
! 125:
! 126: cfg_LoadAttribute(&cfg, CFG("dwds"), CFG("name"), CFG(szStr), STRSIZ, DWDS_NAME);
! 127: openlog(szStr, LOG_PID | LOG_CONS, LOG_DAEMON);
! 128: v = cfg_GetAttribute(&cfg, CFG("dwds"), CFG("syslog_upto"));
! 129: setlogmask(v ? strtol((char*) v, NULL, 0) : 0);
! 130:
! 131: s = socket(PF_ROUTE, SOCK_RAW, 0);
! 132: if (s == -1) {
! 133: syslog(LOG_ERR, "Error:: socket() #%d - %s\n", errno, strerror(errno));
! 134: goto end;
! 135: }
! 136:
! 137: while (!Kill) {
! 138: len = read(s, (void*) msg, sizeof msg);
! 139: if (len == -1) {
! 140: syslog(LOG_ERR, "Error:: read() #%d - %s\n", errno, strerror(errno));
! 141: Kill++;
! 142: } else
! 143: RtMsg((struct rt_msghdr*) msg, len);
1.1.2.3 misho 144: }
145:
1.1.2.4 ! misho 146: close(s);
! 147: end:
! 148: closelog();
! 149: UnloadConfig(&cfg);
1.1.2.1 misho 150: return 0;
151: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>