X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=mISDN.cpp;h=f22890614f75ccd21604620aad72dd3899fe18ac;hp=0b4c8b05a287bef15192ee3cb1d3ac3247b77d24;hb=efc550418c0b107c07818809a3d8e779e476dcd4;hpb=6f1ac87333108b84a083eedb89ee3eb3d9f4497b diff --git a/mISDN.cpp b/mISDN.cpp index 0b4c8b0..f228906 100644 --- a/mISDN.cpp +++ b/mISDN.cpp @@ -64,13 +64,13 @@ int mISDN_initialize(void) /* open debug, if enabled and not only stack debugging */ if (options.deb) { - SPRINT(filename, "%s/debug.log", INSTALL_DATA); + SPRINT(filename, "%s/debug.log", LOG_DIR); debug_fp = fopen(filename, "a"); } if (options.deb & DEBUG_STACK) { - SPRINT(filename, "%s/debug_mISDN.log", INSTALL_DATA); + SPRINT(filename, "%s/debug_mISDN.log", LOG_DIR); mISDN_debug_init(0xffffffff, filename, filename, filename); } else mISDN_debug_init(0, NULL, NULL, NULL); @@ -406,7 +406,7 @@ static int _bchannel_create(struct mISDNport *mISDNport, int i) ret = bind(mISDNport->b_socket[i], (struct sockaddr *)&addr, sizeof(addr)); if (ret < 0) { - PERROR("Error: Failed to bind bchannel-socket for index %d with mISDN-DSP layer. Did you load mISDN_dsp.ko?\n", i); + PERROR("Error: Failed to bind bchannel-socket for index %d with mISDN-DSP layer (errno=%d). Did you load mISDN_dsp.ko?\n", i, errno); close(mISDNport->b_socket[i]); mISDNport->b_socket[i] = -1; return(0); @@ -1534,7 +1534,7 @@ void PmISDN::set_echotest(int echo) */ void PmISDN::set_tone(const char *dir, const char *tone) { - int id; + int id = TONE_OFF; if (!tone) tone = ""; @@ -2006,6 +2006,7 @@ int mISDN_handler(void) l1l2l3_trace_header(mISDNport, NULL, L2_ESTABLISH_IND, DIRECTION_IN); add_trace("tei", NULL, "%d", l3m->pid); end_trace(); + mISDNport->l2link = 1; if ((!mISDNport->ntmode || mISDNport->ptp) && l3m->pid < 127) { if (mISDNport->l2establish) @@ -2013,7 +2014,6 @@ int mISDN_handler(void) mISDNport->l2establish = 0; PDEBUG(DEBUG_ISDN, "the link became active before l2establish timer expiry.\n"); } - mISDNport->l2link = 1; } break; @@ -2023,10 +2023,12 @@ int mISDN_handler(void) l1l2l3_trace_header(mISDNport, NULL, L2_RELEASE_IND, DIRECTION_IN); add_trace("tei", NULL, "%d", l3m->pid); end_trace(); + /* down if not nt-ptmp */ + if (!mISDNport->ntmode || mISDNport->ptp) + mISDNport->l2link = 0; } if ((!mISDNport->ntmode || mISDNport->ptp) && l3m->pid < 127) { - mISDNport->l2link = 0; if (!mISDNport->l2establish && mISDNport->l2hold) { PDEBUG(DEBUG_ISDN, "set timer and establish.\n"); @@ -2123,7 +2125,7 @@ int do_layer3(struct mlayer3 *ml3, unsigned int cmd, unsigned int pid, struct l3 /* * global function to add a new card (port) */ -struct mISDNport *mISDNport_open(int port, char *portname, int ptp, int force_nt, int l2hold, struct interface *interface) +struct mISDNport *mISDNport_open(int port, char *portname, int ptp, int force_nt, int te_special, int l2hold, struct interface *interface) { int ret; struct mISDNport *mISDNport, **mISDNportp; @@ -2276,6 +2278,7 @@ struct mISDNport *mISDNport_open(int port, char *portname, int ptp, int force_nt mISDNportp = &((*mISDNportp)->next); mISDNport = (struct mISDNport *)MALLOC(sizeof(struct mISDNport)); mISDNport->l1link = -1; + mISDNport->l2link = -1; pmemuse++; *mISDNportp = mISDNport; @@ -2350,6 +2353,7 @@ struct mISDNport *mISDNport_open(int port, char *portname, int ptp, int force_nt mISDNport->b_num = devinfo.nrbchan; mISDNport->portnum = port; mISDNport->ntmode = nt; + mISDNport->tespecial = te_special; mISDNport->pri = pri; mISDNport->ptp = ptp; mISDNport->l2hold = l2hold; @@ -2372,8 +2376,9 @@ struct mISDNport *mISDNport_open(int port, char *portname, int ptp, int force_nt time(&mISDNport->l2establish); } - /* initially, we assume that the link is down, exept for nt-ptmp */ - mISDNport->l2link = (mISDNport->ntmode && !mISDNport->ptp)?1:0; + /* for nt-mode ptmp the link is always up */ + if (mISDNport->ntmode && !mISDNport->ptp) + mISDNport->l2link = 1; PDEBUG(DEBUG_BCHANNEL, "using 'mISDN_dsp.o' module\n");