diff options
author | hm <hm@FreeBSD.org> | 2001-05-25 08:43:30 +0000 |
---|---|---|
committer | hm <hm@FreeBSD.org> | 2001-05-25 08:43:30 +0000 |
commit | 7e6e58c4c7f91947ec1f9a10a284f8d9c2fdf1f2 (patch) | |
tree | 6b2ce85b45dc25104f9a4e60d014db8fc3de9b95 /usr.sbin/i4b/isdnd/rc_config.c | |
parent | 8094d979ca0adb982d9e0c5482a2825da1b38e11 (diff) | |
download | FreeBSD-src-7e6e58c4c7f91947ec1f9a10a284f8d9c2fdf1f2.zip FreeBSD-src-7e6e58c4c7f91947ec1f9a10a284f8d9c2fdf1f2.tar.gz |
Submitted by: Juha-Matti Liukkonen (Cubical Solutions Ltd) (jml@cubical.fi)
Add a CAPI (hardware independent) driver i4bcapi(4) and hardware driver
iavc (4) to support active CAPI-based BRI and PRI cards (currently AVM
B1 and T1 cards) to isdn4bsd.
Diffstat (limited to 'usr.sbin/i4b/isdnd/rc_config.c')
-rw-r--r-- | usr.sbin/i4b/isdnd/rc_config.c | 72 |
1 files changed, 53 insertions, 19 deletions
diff --git a/usr.sbin/i4b/isdnd/rc_config.c b/usr.sbin/i4b/isdnd/rc_config.c index 2611743..0b63a09 100644 --- a/usr.sbin/i4b/isdnd/rc_config.c +++ b/usr.sbin/i4b/isdnd/rc_config.c @@ -170,6 +170,7 @@ set_config_defaults(void) for(i=0; i < ncontroller; i++) { isdn_ctrl_tab[i].protocol = PROTOCOL_DSS1; + isdn_ctrl_tab[i].firmware = NULL; } /* entry section cleanup */ @@ -568,6 +569,42 @@ cfg_setval(int keyword) cfg_entry_tab[entrycount].calledbackwait = yylval.num; break; + case CLONE: + /* + * clone = <entryname> + * Loads the entry from the named, existing one. + * Fields such as name and usrdeviceunit should + * always be specified after clone as they must be + * unique. + * + * NOTE: all malloc()'d fields must be dup()'d here, + * we can't have multiple references to same storage. + */ + for (i = 0; i < entrycount; i++) + if (!strcmp(cfg_entry_tab[i].name, yylval.str)) + break; + if (i == entrycount) { + log(LL_ERR, "entry %d: clone, unknown entry %s!", entrycount, yylval.str); + do_exit(1); + } + + DBGL(DL_RCCF, (log(LL_DBG, "entry %d: clone = %s", entrycount, yylval.str))); + + memcpy(&cfg_entry_tab[entrycount], &cfg_entry_tab[i], + sizeof(cfg_entry_tab[0])); + + if (cfg_entry_tab[entrycount].answerprog) + cfg_entry_tab[entrycount].answerprog = strdup(cfg_entry_tab[entrycount].answerprog); + if (cfg_entry_tab[entrycount].budget_callbacks_file) + cfg_entry_tab[entrycount].budget_callbacks_file = strdup(cfg_entry_tab[entrycount].budget_callbacks_file); + if (cfg_entry_tab[entrycount].budget_callouts_file) + cfg_entry_tab[entrycount].budget_callouts_file = strdup(cfg_entry_tab[entrycount].budget_callouts_file); + if (cfg_entry_tab[entrycount].connectprog) + cfg_entry_tab[entrycount].connectprog = strdup(cfg_entry_tab[entrycount].connectprog); + if (cfg_entry_tab[entrycount].disconnectprog) + cfg_entry_tab[entrycount].disconnectprog = strdup(cfg_entry_tab[entrycount].disconnectprog); + break; + case CONNECTPROG: if((cfg_entry_tab[entrycount].connectprog = malloc(strlen(yylval.str)+1)) == NULL) { @@ -657,6 +694,11 @@ cfg_setval(int keyword) extcallattr = yylval.booln; break; + case FIRMWARE: + DBGL(DL_RCCF, (log(LL_DBG, "controller %d: firmware = %s", controllercount, yylval.str))); + isdn_ctrl_tab[controllercount].firmware = strdup(yylval.str); + break; + case HOLIDAYFILE: strcpy(holidayfile, yylval.str); DBGL(DL_RCCF, (log(LL_DBG, "system: holidayfile = %s", yylval.str))); @@ -696,25 +738,20 @@ cfg_setval(int keyword) break; case ISDNCHANNEL: - switch(yylval.num) + if (yylval.num == 0 || yylval.num == -1) { - case 0: - case -1: cfg_entry_tab[entrycount].isdnchannel = CHAN_ANY; DBGL(DL_RCCF, (log(LL_DBG, "entry %d: isdnchannel = any", entrycount))); - break; - case 1: - cfg_entry_tab[entrycount].isdnchannel = CHAN_B1; - DBGL(DL_RCCF, (log(LL_DBG, "entry %d: isdnchannel = one", entrycount))); - break; - case 2: - cfg_entry_tab[entrycount].isdnchannel = CHAN_B2; - DBGL(DL_RCCF, (log(LL_DBG, "entry %d: isdnchannel = two", entrycount))); - break; - default: + } + else if (yylval.num > MAX_BCHAN) + { log(LL_DBG, "entry %d: isdnchannel value out of range", entrycount); config_error_flag++; - break; + } + else + { + cfg_entry_tab[entrycount].isdnchannel = yylval.num-1; + DBGL(DL_RCCF, (log(LL_DBG, "entry %d: isdnchannel = B%d", entrycount, yylval.num))); } break; @@ -1523,11 +1560,8 @@ print_config(void) case CHAN_ANY: fprintf(PFILE, "-1\t\t# any ISDN B-channel may be used\n"); break; - case CHAN_B1: - fprintf(PFILE, "1\t\t# only ISDN B-channel 1 may be used\n"); - break; - case CHAN_B2: - fprintf(PFILE, "2\t\t# only ISDN B-channel 2 ay be used\n"); + default: + fprintf(PFILE, "%d\t\t# only ISDN B-channel %d may be used\n", cep->isdnchannel+1, cep->isdnchannel+1); break; } |