Fix bug #0000007 Capidivert doesnt work with mISDN an Fritz! PCI
- DUMMY CR messages from up was not handled in l3_udss1 - some better debug and cleanup - FACILITY RESPONSE is a currently a no op, handle it early without queueing to abvoid possible races with ReleaseApplication
This commit is contained in:
parent
822b8d28ee
commit
2fb2b854ef
|
@ -249,8 +249,9 @@ SendMessage(struct capi_ctr *ctrl, struct sk_buff *skb)
|
|||
hh->prim = CAPI_MESSAGE_REQUEST;
|
||||
hh->dinfo = ApplId;
|
||||
cmd = CAPICMD(CAPIMSG_COMMAND(skb->data), CAPIMSG_SUBCOMMAND(skb->data));
|
||||
contrDebug(contr, CAPI_DBG_CONTR_MSG, "SendMessage: %s",
|
||||
capi_cmd2str(CAPIMSG_COMMAND(skb->data), CAPIMSG_SUBCOMMAND(skb->data)));
|
||||
contrDebug(contr, CAPI_DBG_CONTR_MSG, "SendMessage: %s caddr(%x)",
|
||||
capi_cmd2str(CAPIMSG_COMMAND(skb->data), CAPIMSG_SUBCOMMAND(skb->data)),
|
||||
CAPIMSG_CONTROL(skb->data));
|
||||
switch (cmd) {
|
||||
// for NCCI state machine
|
||||
case CAPI_DATA_B3_REQ:
|
||||
|
@ -295,7 +296,6 @@ SendMessage(struct capi_ctr *ctrl, struct sk_buff *skb)
|
|||
case CAPI_LISTEN_REQ:
|
||||
// other
|
||||
case CAPI_FACILITY_REQ:
|
||||
case CAPI_FACILITY_RESP:
|
||||
case CAPI_MANUFACTURER_REQ:
|
||||
case CAPI_INFO_RESP:
|
||||
err = mISDN_queue_message(&contr->inst, 0, skb);
|
||||
|
@ -304,6 +304,12 @@ SendMessage(struct capi_ctr *ctrl, struct sk_buff *skb)
|
|||
err = CAPI_MSGBUSY;
|
||||
}
|
||||
break;
|
||||
/* need not further action currently, so it can be released here too avoid
|
||||
* overlap with a release application
|
||||
*/
|
||||
case CAPI_FACILITY_RESP:
|
||||
dev_kfree_skb(skb);
|
||||
break;
|
||||
default:
|
||||
contrDebug(contr, CAPI_DBG_WARN, "SendMessage: %#x %#x not handled!",
|
||||
CAPIMSG_COMMAND(skb->data), CAPIMSG_SUBCOMMAND(skb->data));
|
||||
|
|
|
@ -783,6 +783,14 @@ l3dss1_progress_req(l3_process_t *pc, u_char pr, void *arg)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
l3dss1_facility_req(l3_process_t *pc, u_char pr, void *arg)
|
||||
{
|
||||
if (arg) {
|
||||
SendMsg(pc, arg, -1);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
l3dss1_release_cmpl(l3_process_t *pc, u_char pr, void *arg)
|
||||
{
|
||||
|
@ -2136,9 +2144,16 @@ dss1_fromup(layer3_t *l3, struct sk_buff *skb, mISDN_head_t *hh)
|
|||
}
|
||||
return(ret);
|
||||
}
|
||||
if (!proc && hh->dinfo == MISDN_ID_DUMMY) {
|
||||
if (hh->prim == (CC_FACILITY | REQUEST)) {
|
||||
l3dss1_facility_req(l3->dummy, hh->prim, skb->len ? skb : NULL);
|
||||
ret = 0;
|
||||
}
|
||||
return(ret);
|
||||
}
|
||||
if (!proc) {
|
||||
printk(KERN_ERR "mISDN dss1 fromup without proc pr=%04x\n",
|
||||
hh->prim);
|
||||
printk(KERN_ERR "mISDN dss1 fromup without proc pr=%04x dinfo(%x)\n",
|
||||
hh->prim, hh->dinfo);
|
||||
return(-EINVAL);
|
||||
}
|
||||
for (i = 0; i < DOWNSLLEN; i++)
|
||||
|
|
|
@ -36,7 +36,6 @@ static int
|
|||
SSProcess_L4L3(SSProcess_t *spc, __u32 prim, struct sk_buff *skb) {
|
||||
int err;
|
||||
|
||||
// FIXME err = ControllerL4L3(contr, prim, contr->addr | DUMMY_CR_FLAG, skb);
|
||||
err = ControllerL4L3(spc->contr, prim, MISDN_ID_DUMMY, skb);
|
||||
if (err)
|
||||
dev_kfree_skb(skb);
|
||||
|
|
Loading…
Reference in New Issue