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