extern "C" {
}
#include <mISDN/q931.h>
+#ifdef OLD_MT_ASSIGN
extern unsigned int mt_assign_pid;
+#endif
#include "ie.cpp"
/* creating l3id */
l1l2l3_trace_header(p_m_mISDNport, this, L3_NEW_L3ID_REQ, DIRECTION_OUT);
+#ifdef OLD_MT_ASSIGN
/* see MT_ASSIGN notes at do_layer3() */
mt_assign_pid = 0;
ret = p_m_mISDNport->ml3->to_layer3(p_m_mISDNport->ml3, MT_ASSIGN, 0, NULL);
- if (mt_assign_pid == 0 || ret < 0) {
+ if (mt_assign_pid == 0 || ret < 0)
+ p_m_d_l3id = mt_assign_pid;
+ mt_assign_pid = ~0;
+#else
+ p_m_d_l3id = request_new_pid(p_m_mISDNport->ml3);
+ if (p_m_d_l3id == MISDN_PID_NONE)
+#endif
+ {
struct lcr_msg *message;
add_trace("callref", NULL, "no free id");
trigger_work(&p_m_d_delete);
return;
}
+#ifdef OLD_MT_ASSIGN
p_m_d_l3id = mt_assign_pid;
mt_assign_pid = ~0;
+#endif
add_trace("callref", "new", "0x%x", p_m_d_l3id);
end_trace();
l3m = create_l3msg();
l1l2l3_trace_header(p_m_mISDNport, this, L3_SETUP_REQ, DIRECTION_OUT);
/* channel information */
- if (channel >= 0) /* it should */
+ if (p_m_d_ntmode || channel != CHANNEL_ANY) /* only omit channel id in te-mode/any channel */
enc_ie_channel_id(l3m, exclusive, channel);
/* caller information */
plan = 1;
port = port_first;
while(port) {
/* are we ISDN ? */
- if ((port->p_type & PORT_CLASS_mISDN_MASK) == PORT_CLASS_mISDN_DSS1) {
+ if ((port->p_type & PORT_CLASS_mISDN_MASK) == PORT_CLASS_DSS1) {
pdss1 = (class Pdss1 *)port;
/* check out correct stack and id */
if (pdss1->p_m_mISDNport == mISDNport) {
// facility als broadcast
break;
+ case MT_L2IDLE:
+ // L2 became idle - we could sent a MT_L2RELEASE if we are the L2 master
+ PDEBUG(DEBUG_ISDN, "Got L2 idle\n");
+ break;
+
default:
PERROR("unhandled message: cmd(0x%x) pid(0x%x)\n", cmd, pid);
port = port_first;