1*76404edcSAsim Jamshed
2*76404edcSAsim Jamshed #include <stdio.h>
3*76404edcSAsim Jamshed #include <stdlib.h>
4*76404edcSAsim Jamshed #include <unistd.h>
5*76404edcSAsim Jamshed #include <stdint.h>
6*76404edcSAsim Jamshed #include <string.h>
7*76404edcSAsim Jamshed #include <sys/types.h>
8*76404edcSAsim Jamshed
9*76404edcSAsim Jamshed #include <mos_api.h>
10*76404edcSAsim Jamshed #include <mtcp_api.h>
11*76404edcSAsim Jamshed #include <mtcp_epoll.h>
12*76404edcSAsim Jamshed #include <assert.h>
13*76404edcSAsim Jamshed #include <ctype.h>
14*76404edcSAsim Jamshed
15*76404edcSAsim Jamshed #include "applib.h"
16*76404edcSAsim Jamshed /*----------------------------------------------------------------------------*/
17*76404edcSAsim Jamshed char *
strevent(uint64_t ev)18*76404edcSAsim Jamshed strevent(uint64_t ev)
19*76404edcSAsim Jamshed {
20*76404edcSAsim Jamshed switch (ev) {
21*76404edcSAsim Jamshed #define EV_CASE(e) case e: return #e
22*76404edcSAsim Jamshed /* mtcp-defined epoll events */
23*76404edcSAsim Jamshed EV_CASE(MOS_EPOLLNONE);
24*76404edcSAsim Jamshed EV_CASE(MOS_EPOLLIN);
25*76404edcSAsim Jamshed EV_CASE(MOS_EPOLLPRI);
26*76404edcSAsim Jamshed EV_CASE(MOS_EPOLLOUT);
27*76404edcSAsim Jamshed EV_CASE(MOS_EPOLLRDNORM);
28*76404edcSAsim Jamshed EV_CASE(MOS_EPOLLRDBAND);
29*76404edcSAsim Jamshed EV_CASE(MOS_EPOLLWRNORM);
30*76404edcSAsim Jamshed EV_CASE(MOS_EPOLLWRBAND);
31*76404edcSAsim Jamshed EV_CASE(MOS_EPOLLMSG);
32*76404edcSAsim Jamshed EV_CASE(MOS_EPOLLERR);
33*76404edcSAsim Jamshed EV_CASE(MOS_EPOLLHUP);
34*76404edcSAsim Jamshed EV_CASE(MOS_EPOLLRDHUP);
35*76404edcSAsim Jamshed
36*76404edcSAsim Jamshed /* mtcp-defined epoll events */
37*76404edcSAsim Jamshed EV_CASE(MOS_EPOLLONESHOT);
38*76404edcSAsim Jamshed EV_CASE(MOS_EPOLLET);
39*76404edcSAsim Jamshed
40*76404edcSAsim Jamshed default:
41*76404edcSAsim Jamshed return "Unknown";
42*76404edcSAsim Jamshed
43*76404edcSAsim Jamshed #undef EV_CASE
44*76404edcSAsim Jamshed }
45*76404edcSAsim Jamshed }
46*76404edcSAsim Jamshed /*----------------------------------------------------------------------------*/
47*76404edcSAsim Jamshed char *
strcbevent(uint64_t ev)48*76404edcSAsim Jamshed strcbevent(uint64_t ev)
49*76404edcSAsim Jamshed {
50*76404edcSAsim Jamshed switch (ev) {
51*76404edcSAsim Jamshed #define EV_CASE(e) case e: return #e
52*76404edcSAsim Jamshed
53*76404edcSAsim Jamshed /* mos-defined tcp build-in events */
54*76404edcSAsim Jamshed EV_CASE(MOS_ON_PKT_IN);
55*76404edcSAsim Jamshed EV_CASE(MOS_ON_PKT_OUT);
56*76404edcSAsim Jamshed EV_CASE(MOS_ON_CONN_SETUP);
57*76404edcSAsim Jamshed EV_CASE(MOS_ON_CONN_NEW_DATA);
58*76404edcSAsim Jamshed EV_CASE(MOS_ON_TCP_STATE_CHANGE);
59*76404edcSAsim Jamshed EV_CASE(MOS_ON_CONN_END);
60*76404edcSAsim Jamshed EV_CASE(MOS_ON_TIMEOUT);
61*76404edcSAsim Jamshed EV_CASE(MOS_ON_ERROR);
62*76404edcSAsim Jamshed EV_CASE(MOS_ON_ORPHAN);
63*76404edcSAsim Jamshed
64*76404edcSAsim Jamshed default:
65*76404edcSAsim Jamshed return "Unknown";
66*76404edcSAsim Jamshed
67*76404edcSAsim Jamshed #undef EV_CASE
68*76404edcSAsim Jamshed }
69*76404edcSAsim Jamshed }
70*76404edcSAsim Jamshed
71*76404edcSAsim Jamshed /*----------------------------------------------------------------------------*/
72*76404edcSAsim Jamshed #define SKIP_SPACES(x) while (*x && isspace((int)*x)) x++;
73*76404edcSAsim Jamshed /*----------------------------------------------------------------------------*/
74*76404edcSAsim Jamshed int
LoadConfig(char * file_name,struct conf_var * vlist,int size)75*76404edcSAsim Jamshed LoadConfig(char *file_name, struct conf_var *vlist, int size)
76*76404edcSAsim Jamshed {
77*76404edcSAsim Jamshed assert(file_name != NULL);
78*76404edcSAsim Jamshed
79*76404edcSAsim Jamshed FILE *fp = fopen(file_name, "r");
80*76404edcSAsim Jamshed char line_buf[MAX_LINE_LEN] = {0};
81*76404edcSAsim Jamshed int i;
82*76404edcSAsim Jamshed char *p;
83*76404edcSAsim Jamshed
84*76404edcSAsim Jamshed if (fp == NULL) {
85*76404edcSAsim Jamshed fprintf(stderr, "%s not found\n", file_name);
86*76404edcSAsim Jamshed return -1;
87*76404edcSAsim Jamshed }
88*76404edcSAsim Jamshed
89*76404edcSAsim Jamshed while ((p = fgets(line_buf, MAX_LINE_LEN, fp)) != NULL) {
90*76404edcSAsim Jamshed char *temp;
91*76404edcSAsim Jamshed
92*76404edcSAsim Jamshed if (p[MAX_LINE_LEN - 1]) {
93*76404edcSAsim Jamshed fprintf(stderr, "%s has a line longer than %d\n",
94*76404edcSAsim Jamshed file_name, MAX_LINE_LEN);
95*76404edcSAsim Jamshed return -1;
96*76404edcSAsim Jamshed }
97*76404edcSAsim Jamshed
98*76404edcSAsim Jamshed SKIP_SPACES(p);
99*76404edcSAsim Jamshed if (*p == '\0' || *p == '#')
100*76404edcSAsim Jamshed continue;
101*76404edcSAsim Jamshed
102*76404edcSAsim Jamshed /* comments */
103*76404edcSAsim Jamshed if ((temp = strchr(p, '#')))
104*76404edcSAsim Jamshed *temp = '\0';
105*76404edcSAsim Jamshed
106*76404edcSAsim Jamshed /* remove spaces at the end of the line */
107*76404edcSAsim Jamshed while (isspace(p[strlen(p) - 1]))
108*76404edcSAsim Jamshed p[strlen(p) - 1] = '\0';
109*76404edcSAsim Jamshed
110*76404edcSAsim Jamshed for (i = 0; i < size; i++) {
111*76404edcSAsim Jamshed int len = strlen(vlist[i].name);
112*76404edcSAsim Jamshed if (strncmp(vlist[i].name, p, len))
113*76404edcSAsim Jamshed continue;
114*76404edcSAsim Jamshed
115*76404edcSAsim Jamshed if (!isspace(p[len]))
116*76404edcSAsim Jamshed continue;
117*76404edcSAsim Jamshed
118*76404edcSAsim Jamshed if (!(p = strchr(p, '=')))
119*76404edcSAsim Jamshed break;
120*76404edcSAsim Jamshed
121*76404edcSAsim Jamshed p++;
122*76404edcSAsim Jamshed SKIP_SPACES(p);
123*76404edcSAsim Jamshed
124*76404edcSAsim Jamshed if ((len = strlen(p)) > CONF_VALUE_LEN)
125*76404edcSAsim Jamshed break;
126*76404edcSAsim Jamshed
127*76404edcSAsim Jamshed strncpy(vlist[i].value, p, len);
128*76404edcSAsim Jamshed vlist[i].value[len] = '\0';
129*76404edcSAsim Jamshed }
130*76404edcSAsim Jamshed }
131*76404edcSAsim Jamshed
132*76404edcSAsim Jamshed fclose(fp);
133*76404edcSAsim Jamshed return 0;
134*76404edcSAsim Jamshed }
135*76404edcSAsim Jamshed /*----------------------------------------------------------------------------*/
136