1 /*****************************************************************************\
5 **---------------------------------------------------------------------------**
6 ** Copyright: Andreas Eversberg **
8 ** reading options.conf and filling structure **
10 \*****************************************************************************/
13 #include "openbsc/gsm_data.h"
16 char *gsm_conf_error = (char *)"";
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"))) {
52 SPRINT(gsm_conf_error, "Cannot open %s\n",filename);
57 while((fgets(buffer,sizeof(buffer),fp))) {
59 buffer[sizeof(buffer)-1]=0;
60 if (buffer[0]) buffer[strlen(buffer)-1]=0;
63 while(*p <= 32) { /* skip spaces */
68 if (*p==0 || *p=='#') /* ignore comments and empty line */
72 i=0; /* read option */
74 if (i+1 >= sizeof(option)) {
75 SPRINT(gsm_conf_error, "Error in %s (line %d): option too long.\n",filename,line);
82 while(*p <= 32) { /* skip spaces */
90 while(*p!=0 && *p!='#' && pnum < 10) { /* param */
93 if (i+1 >= sizeof(params[pnum])) {
94 SPRINT(gsm_conf_error, "Error in %s (line %d): param too long.\n",filename,line);
97 params[pnum][i+1] = '\0';
98 params[pnum][i++] = *p++;
100 while(*p <= 32) { /* skip spaces */
109 /* at this point we have option and param */
112 if (!strcmp(option,"debug")) {
113 if (params[0][0]==0) {
114 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line,option);
117 SCPY(gsm_conf->debug, params[0]);
120 if (!strcmp(option,"interface-bsc")) {
121 if (params[0][0]==0) {
122 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line, option);
125 SCPY(gsm_conf->interface_bsc, params[0]);
128 if (!strcmp(option,"interface-lcr")) {
129 if (params[0][0]==0) {
130 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line, option);
133 SCPY(gsm_conf->interface_lcr, params[0]);
136 if (!strcmp(option,"short-name")) {
137 if (params[0][0]==0) {
138 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line, option);
141 SCPY(gsm_conf->short_name, params[0]);
144 if (!strcmp(option,"long-name")) {
145 if (params[0][0]==0) {
146 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line, option);
149 SCPY(gsm_conf->long_name, params[0]);
152 if (!strcmp(option,"mcc")) {
153 if (params[0][0]==0) {
154 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line, option);
157 gsm_conf->mcc = atoi(params[0]);
160 if (!strcmp(option,"mnc")) {
161 if (params[0][0]==0) {
162 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line, option);
165 gsm_conf->mnc = atoi(params[0]);
168 if (!strcmp(option,"lac")) {
169 if (params[0][0]==0) {
170 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line, option);
173 gsm_conf->lac = atoi(params[0]);
176 if (!strcmp(option,"hlr")) {
177 if (params[0][0]==0) {
178 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line, option);
181 SCPY(gsm_conf->hlr, params[0]);
184 if (!strcmp(option,"allow-all")) {
185 gsm_conf->allow_all = 1;
187 if (!strcmp(option,"keep-l2")) {
188 gsm_conf->keep_l2 = 1;
191 if (!strcmp(option,"no-mergency-shutdown")) {
192 gsm_conf->noemergshut = 1;
194 if (!strcmp(option,"pcapfile")) {
195 if (params[0][0]==0) {
196 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter for option %s missing.\n",filename,line, option);
199 SCPY(gsm_conf->pcapfile, params[0]);
201 if (!strcmp(option,"bts")) {
202 if (gsm_conf->numbts == 8) {
203 SPRINT(gsm_conf_error, "Error in %s (line %d): too many BTS defined.\n",filename,line);
206 if (params[0][0]==0) {
207 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter <bts-type> for option %s missing.\n",filename,line,option);
210 if (params[1][0]==0) {
211 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter <card number> for option %s missing.\n",filename,line,option);
214 if (params[2][0]==0) {
215 SPRINT(gsm_conf_error, "Error in %s (line %d): parameter <frequency> for option %s missing.\n",filename,line,option);
218 if (!strcmp(params[0], "bs11")) {
219 gsm_conf->bts[gsm_conf->numbts].type = GSM_BTS_TYPE_BS11;
221 SPRINT(gsm_conf_error, "Error in %s (line %d): unknown BTS type '%s'.\n",filename,line,params[0]);
224 gsm_conf->bts[gsm_conf->numbts].card = atoi(params[1]);
225 gsm_conf->bts[gsm_conf->numbts].numtrx = 0;
226 while (params[gsm_conf->bts[gsm_conf->numbts].numtrx+2][0]) {
227 if (gsm_conf->bts[gsm_conf->numbts].numtrx == 8) {
228 SPRINT(gsm_conf_error, "Error in %s (line %d): too many frequencies defined.\n",filename,line);
231 gsm_conf->bts[gsm_conf->numbts].frequency[gsm_conf->bts[gsm_conf->numbts].numtrx++] = atoi(params[gsm_conf->bts[gsm_conf->numbts].numtrx+2]);
235 SPRINT(gsm_conf_error, "Error in %s (line %d): wrong option keyword %s.\n", filename,line,option);