1 /*****************************************************************************\
5 **---------------------------------------------------------------------------**
6 ** Copyright: Andreas Eversberg **
8 ** reading options.conf and filling structure **
10 \*****************************************************************************/
15 char *gsm_conf_error = (char *)"";
19 * read options from options.conf
21 int gsm_conf(struct gsm_conf *gsm_conf)
33 SCPY(gsm_conf->debug, "");
34 SCPY(gsm_conf->interface_bsc, "mISDN_l1loop.1");
35 SCPY(gsm_conf->interface_lcr, "mISDN_l1loop.2");
36 SCPY(gsm_conf->short_name, "LCR");
37 SCPY(gsm_conf->long_name, "Linux-Call-Router");
41 SCPY(gsm_conf->hlr, "hlr.sqlite3");
42 gsm_conf->allow_all = 0;
43 gsm_conf->keep_l2 = 0;
46 gsm_conf->noemergshut = 0;
48 SPRINT(filename, "%s/gsm.conf", CONFIG_DATA);
50 if (!(fp=fopen(filename,"r"))) {
51 SPRINT(gsm_conf_error, "Cannot open %s\n",filename);
56 while((fgets(buffer,sizeof(buffer),fp))) {
58 buffer[sizeof(buffer)-1]=0;
59 if (buffer[0]) buffer[strlen(buffer)-1]=0;
62 while(*p <= 32) { /* skip spaces */
67 if (*p==0 || *p=='#') /* ignore comments and empty line */
71 i=0; /* read option */
73 if (i+1 >= sizeof(option)) {
74 SPRINT(gsm_conf_error, "Error in %s (line %d): option too long.\n",filename,line);
81 while(*p <= 32) { /* skip spaces */
89 while(*p!=0 && *p!='#' && pnum < 10) { /* param */
92 if (i+1 >= sizeof(params[pnum])) {
93 SPRINT(gsm_conf_error, "Error in %s (line %d): param too long.\n",filename,line);
96 params[pnum][i+1] = '\0';
97 params[pnum][i++] = *p++;
99 while(*p <= 32) { /* skip spaces */
108 /* at this point we have option and param */
111 if (!strcmp(option,"debug")) {
112 if (params[0][0]==0) {
113 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line,option);
116 SCPY(gsm_conf->debug, params[0]);
119 if (!strcmp(option,"interface-bsc")) {
120 if (params[0][0]==0) {
121 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line, option);
124 SCPY(gsm_conf->interface_bsc, params[0]);
127 if (!strcmp(option,"interface-lcr")) {
128 if (params[0][0]==0) {
129 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line, option);
132 SCPY(gsm_conf->interface_lcr, params[0]);
135 if (!strcmp(option,"short-name")) {
136 if (params[0][0]==0) {
137 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line, option);
140 SCPY(gsm_conf->short_name, params[0]);
143 if (!strcmp(option,"long-name")) {
144 if (params[0][0]==0) {
145 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line, option);
148 SCPY(gsm_conf->long_name, params[0]);
151 if (!strcmp(option,"mcc")) {
152 if (params[0][0]==0) {
153 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line, option);
156 gsm_conf->mcc = atoi(params[0]);
159 if (!strcmp(option,"mnc")) {
160 if (params[0][0]==0) {
161 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line, option);
164 gsm_conf->mnc = atoi(params[0]);
167 if (!strcmp(option,"lac")) {
168 if (params[0][0]==0) {
169 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line, option);
172 gsm_conf->lac = atoi(params[0]);
175 if (!strcmp(option,"hlr")) {
176 if (params[0][0]==0) {
177 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line, option);
180 SCPY(gsm_conf->hlr, params[0]);
183 if (!strcmp(option,"allow-all")) {
184 gsm_conf->allow_all = 1;
186 if (!strcmp(option,"keep-l2")) {
187 gsm_conf->keep_l2 = 1;
190 if (!strcmp(option,"no-mergency-shutdown")) {
191 gsm_conf->noemergshut = 1;
193 if (!strcmp(option,"pcapfile")) {
194 if (params[0][0]==0) {
195 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line, option);
198 SCPY(gsm_conf->pcapfile, params[0]);
200 if (!strcmp(option,"bts")) {
201 if (gsm_conf->numbts == 8) {
202 SPRINT(gsm_conf_error, "Error in %s (line %d): too many BTS defined.\n",filename,line);
205 if (params[0][0]==0) {
206 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter <bts-type> for option %s missing.\n",filename,line,option);
209 if (params[1][0]==0) {
210 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter <card number> for option %s missing.\n",filename,line,option);
213 if (params[2][0]==0) {
214 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter <frequency> for option %s missing.\n",filename,line,option);
217 if (!strcmp(params[0], "bs11")) {
218 gsm_conf->bts[gsm_conf->numbts].type = GSM_BTS_TYPE_BS11;
220 SPRINT(gsm_conf_error, "Error in %s (line %d): unknown BTS type '%s'.\n",filename,line,params[0]);
223 gsm_conf->bts[gsm_conf->numbts].card = atoi(params[1]);
224 gsm_conf->bts[gsm_conf->numbts].numtrx = 0;
225 while (params[gsm_conf->bts[gsm_conf->numbts].numtrx+2][0]) {
226 if (gsm_conf->bts[gsm_conf->numbts].numtrx == 8) {
227 SPRINT(gsm_conf_error, "Error in %s (line %d): too many frequencies defined.\n",filename,line);
230 gsm_conf->bts[gsm_conf->numbts].frequency[gsm_conf->bts[gsm_conf->numbts].numtrx++] = atoi(params[gsm_conf->bts[gsm_conf->numbts].numtrx+2]);
234 SPRINT(gsm_conf_error, "Error in %s (line %d): wrong option keyword %s.\n", filename,line,option);