1 /*****************************************************************************\
5 **---------------------------------------------------------------------------**
6 ** Copyright: Andreas Eversberg **
8 ** reading options.conf and filling structure **
10 \*****************************************************************************/
13 #include "openbsc/openbsc.h"
16 char *gsm_conf_error = "";
20 * read options from options.conf
22 int gsm_conf(struct gsm_conf *gsm_conf)
34 SCPY(gsm_conf->debug, "");
35 SCPY(gsm_conf->interface_bsc, "mISDN_l1loop.1");
36 SCPY(gsm_conf->interface_lcr, "mISDN_l1loop.2");
37 SCPY(gsm_conf->short_name, "LCR");
38 SCPY(gsm_conf->long_name, "Linux-Call-Router");
42 SCPY(gsm_conf->hlr, "hlr.sqlite3");
43 gsm_conf->allow_all = 0;
44 gsm_conf->keep_l2 = 0;
47 gsm_conf->noemergshut = 0;
49 SPRINT(filename, "%s/gsm.conf", CONFIG_DATA);
51 if (!(fp=fopen(filename,"r")))
53 SPRINT(gsm_conf_error, "Cannot open %s\n",filename);
58 while((fgets(buffer,sizeof(buffer),fp)))
61 buffer[sizeof(buffer)-1]=0;
62 if (buffer[0]) buffer[strlen(buffer)-1]=0;
65 while(*p <= 32) /* skip spaces */
71 if (*p==0 || *p=='#') /* ignore comments and empty line */
75 i=0; /* read option */
78 if (i+1 >= sizeof(option))
80 SPRINT(gsm_conf_error, "Error in %s (line %d): option too long.\n",filename,line);
87 while(*p <= 32) /* skip spaces */
96 while(*p!=0 && *p!='#' && pnum < 10) /* param */
101 if (i+1 >= sizeof(params[pnum]))
103 SPRINT(gsm_conf_error, "Error in %s (line %d): param too long.\n",filename,line);
106 params[pnum][i+1] = '\0';
107 params[pnum][i++] = *p++;
109 while(*p <= 32) /* skip spaces */
119 /* at this point we have option and param */
122 if (!strcmp(option,"debug"))
126 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line,option);
129 SCPY(gsm_conf->debug, params[0]);
132 if (!strcmp(option,"interface-bsc"))
136 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line, option);
139 SCPY(gsm_conf->interface_bsc, params[0]);
142 if (!strcmp(option,"interface-lcr"))
146 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line, option);
149 SCPY(gsm_conf->interface_lcr, params[0]);
152 if (!strcmp(option,"short-name"))
156 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line, option);
159 SCPY(gsm_conf->short_name, params[0]);
162 if (!strcmp(option,"long-name"))
166 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line, option);
169 SCPY(gsm_conf->long_name, params[0]);
172 if (!strcmp(option,"mcc"))
176 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line, option);
179 gsm_conf->mcc = atoi(params[0]);
182 if (!strcmp(option,"mnc"))
186 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line, option);
189 gsm_conf->mnc = atoi(params[0]);
192 if (!strcmp(option,"lac"))
196 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line, option);
199 gsm_conf->lac = atoi(params[0]);
202 if (!strcmp(option,"hlr"))
206 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line, option);
209 SCPY(gsm_conf->hlr, params[0]);
212 if (!strcmp(option,"allow-all"))
214 gsm_conf->allow_all = 1;
216 if (!strcmp(option,"keep-l2"))
218 gsm_conf->keep_l2 = 1;
221 if (!strcmp(option,"no-mergency-shutdown"))
223 gsm_conf->noemergshut = 1;
225 if (!strcmp(option,"bts"))
227 if (gsm_conf->numbts == 8)
229 SPRINT(gsm_conf_error, "Error in %s (line %d): too many BTS defined.\n",filename,line);
234 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter <bts-type> for option %s missing.\n",filename,line,option);
239 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter <card number> for option %s missing.\n",filename,line,option);
244 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter <frequency> for option %s missing.\n",filename,line,option);
247 if (!strcmp(params[0], "bs11"))
249 gsm_conf->bts[gsm_conf->numbts].type = GSM_BTS_TYPE_BS11;
251 SPRINT(gsm_conf_error, "Error in %s (line %d): unknown BTS type '%s'.\n",filename,line,params[0]);
254 gsm_conf->bts[gsm_conf->numbts].card = atoi(params[1]);
255 gsm_conf->bts[gsm_conf->numbts].numtrx = 0;
256 while (params[gsm_conf->bts[gsm_conf->numbts].numtrx+2][0])
258 if (gsm_conf->bts[gsm_conf->numbts].numtrx == 8)
260 SPRINT(gsm_conf_error, "Error in %s (line %d): too many frequencies defined.\n",filename,line);
263 gsm_conf->bts[gsm_conf->numbts].frequency[gsm_conf->bts[gsm_conf->numbts].numtrx++] = atoi(params[gsm_conf->bts[gsm_conf->numbts].numtrx+2]);
268 SPRINT(gsm_conf_error, "Error in %s (line %d): wrong option keyword %s.\n", filename,line,option);