18 #include <linux/slab.h>
26 _queue_message(
struct mISDNstack *
st,
struct sk_buff *
skb)
30 if (*
debug & DEBUG_QUEUE_FUNC)
32 __func__, hh->
prim, hh->
id, skb);
41 mISDN_queue_message(
struct mISDNchannel *ch,
struct sk_buff *skb)
43 _queue_message(ch->st, skb);
47 static struct mISDNchannel *
48 get_channel4id(
struct mISDNstack *st,
u_int id)
50 struct mISDNchannel *ch;
64 send_socklist(
struct mISDN_sock_list *
sl,
struct sk_buff *skb)
72 if (sk->sk_state != MISDN_BOUND)
89 send_layer2(
struct mISDNstack *st,
struct sk_buff *skb)
93 struct mISDNchannel *ch;
101 if (list_is_last(&ch->list, &st->layer2)) {
108 ret = ch->send(ch, cskb);
110 if (*
debug & DEBUG_SEND_ERR)
112 "%s ch%d prim(%x) addr(%x)"
115 hh->
prim, ch->addr, ret);
120 __func__, ch->nr, ch->addr);
127 ret = ch->send(ch, skb);
133 ret = st->dev->teimgr->ctrl(st->dev->teimgr,
CHECK_DATA, skb);
136 else if (*
debug & DEBUG_SEND_ERR)
138 "%s mgr prim(%x) err %d\n",
139 __func__, hh->
prim, ret);
148 send_msg_to_layer(
struct mISDNstack *st,
struct sk_buff *skb)
150 struct mISDNhead *hh = mISDN_HEAD_P(skb);
151 struct mISDNchannel *ch;
155 if (*
debug & DEBUG_QUEUE_FUNC)
157 __func__, hh->
prim, hh->
id, skb);
159 if (!hlist_empty(&st->l1sock.head)) {
160 __net_timestamp(skb);
161 send_socklist(&st->l1sock, skb);
163 return st->layer1->send(st->layer1, skb);
164 }
else if (lm == 0x2) {
165 if (!hlist_empty(&st->l1sock.head))
166 send_socklist(&st->l1sock, skb);
167 send_layer2(st, skb);
169 }
else if (lm == 0x4) {
170 ch = get_channel4id(st, hh->
id);
172 return ch->send(ch, skb);
175 "%s: dev(%s) prim(%x) id(%x) no channel\n",
176 __func__, dev_name(&st->dev->dev), hh->
prim,
178 }
else if (lm == 0x8) {
180 ch = get_channel4id(st, hh->
id);
182 return ch->send(ch, skb);
185 "%s: dev(%s) prim(%x) id(%x) no channel\n",
186 __func__, dev_name(&st->dev->dev), hh->
prim,
191 __func__, dev_name(&st->dev->dev), hh->
prim);
197 do_clear_stack(
struct mISDNstack *st)
202 mISDNStackd(
void *
data)
204 struct mISDNstack *st =
data;
208 if (*
debug & DEBUG_MSG_THREAD)
210 dev_name(&st->dev->dev));
212 if (st->notify !=
NULL) {
237 #ifdef MISDN_MSG_STATS
240 err = send_msg_to_layer(st, skb);
242 if (*
debug & DEBUG_SEND_ERR)
244 "%s: %s prim(%x) id(%x) "
246 __func__, dev_name(&st->dev->dev),
247 mISDN_HEAD_PRIM(skb),
248 mISDN_HEAD_ID(skb), err);
271 if (!skb_queue_empty(&st->msgq))
277 if (st->notify !=
NULL) {
281 #ifdef MISDN_MSG_STATS
287 if (*
debug & DEBUG_MSG_THREAD)
289 __func__, dev_name(&st->dev->dev), st->status);
296 #ifdef MISDN_MSG_STATS
301 #ifdef MISDN_MSG_STATS
303 "msg %d sleep %d stopped\n",
304 dev_name(&st->dev->dev), st->msg_cnt, st->sleep_cnt,
307 "mISDNStackd daemon for %s utime(%ld) stime(%ld)\n",
308 dev_name(&st->dev->dev), st->thread->utime, st->thread->stime);
310 "mISDNStackd daemon for %s nvcsw(%ld) nivcsw(%ld)\n",
311 dev_name(&st->dev->dev), st->thread->nvcsw, st->thread->nivcsw);
313 dev_name(&st->dev->dev));
321 if (st->notify !=
NULL) {
329 l1_receive(
struct mISDNchannel *ch,
struct sk_buff *skb)
333 __net_timestamp(skb);
334 _queue_message(ch->st, skb);
341 ch->addr = sapi | (tei << 8);
359 st_own_ctrl(
struct mISDNchannel *ch,
u_int cmd,
void *
arg)
361 if (!ch->st || !ch->st->layer1)
363 return ch->st->layer1->ctrl(ch->st->layer1, cmd, arg);
369 struct mISDNstack *newst;
373 newst = kzalloc(
sizeof(
struct mISDNstack),
GFP_KERNEL);
379 INIT_LIST_HEAD(&newst->layer2);
383 skb_queue_head_init(&newst->msgq);
392 dev->teimgr->peer = &newst->own;
393 dev->teimgr->recv = mISDN_queue_message;
394 dev->teimgr->st = newst;
395 newst->layer1 = &dev->D;
396 dev->D.recv = l1_receive;
397 dev->D.peer = &newst->own;
398 newst->own.st = newst;
399 newst->own.ctrl = st_own_ctrl;
400 newst->own.send = mISDN_queue_message;
401 newst->own.recv = mISDN_queue_message;
402 if (*
debug & DEBUG_CORE_FUNC)
404 dev_name(&newst->dev->dev));
405 newst->notify = &
done;
406 newst->thread =
kthread_run(mISDNStackd, (
void *)newst,
"mISDN_%s",
407 dev_name(&newst->dev->dev));
408 if (IS_ERR(newst->thread)) {
409 err = PTR_ERR(newst->thread);
411 "mISDN:cannot create kernel thread for %s (%d)\n",
412 dev_name(&newst->dev->dev), err);
425 struct channel_req rq;
429 if (*
debug & DEBUG_CORE_FUNC)
431 __func__, dev_name(&dev->dev), protocol, adr->
dev,
438 ch->recv = mISDN_queue_message;
439 ch->peer = &dev->D.st->own;
449 sk_add_node(&msk->sk, &dev->D.st->l1sock.head);
462 struct channel_req rq, rq2;
464 struct Bprotocol *bp;
466 if (*
debug & DEBUG_CORE_FUNC)
468 __func__, dev_name(&dev->dev), protocol,
473 if (pmask & dev->Bprotocols) {
479 ch->recv = rq.ch->send;
481 rq.ch->recv = ch->send;
483 rq.ch->st = dev->D.st;
491 err = bp->create(&rq2);
494 ch->recv = rq2.ch->send;
496 rq2.ch->st = dev->D.st;
497 rq.protocol = rq2.protocol;
504 rq2.ch->recv = rq.ch->send;
505 rq2.ch->peer = rq.ch;
506 rq.ch->recv = rq2.ch->send;
507 rq.ch->peer = rq2.ch;
508 rq.ch->st = dev->D.st;
519 struct channel_req rq;
522 if (*
debug & DEBUG_CORE_FUNC)
524 __func__, dev_name(&dev->dev), protocol,
536 ch->recv = mISDN_queue_message;
537 ch->peer = &dev->D.st->own;
547 err = dev->teimgr->ctrl(dev->teimgr,
OPEN_CHANNEL, &rq);
553 rq.ch->recv = mISDN_queue_message;
554 rq.ch->peer = &dev->D.st->own;
568 struct mISDNchannel *pch;
574 if (*
debug & DEBUG_CORE_FUNC)
576 dev_name(&ch->st->dev->dev), ch->protocol);
584 switch (ch->protocol) {
590 sk_del_node_init(&msk->sk);
595 pch = get_channel4id(ch->st, ch->nr);
601 pch = ch->st->dev->teimgr;
608 pch = ch->st->dev->teimgr;
624 struct mISDNstack *st = dev->D.st;
627 if (*
debug & DEBUG_CORE_FUNC)
629 dev_name(&st->dev->dev));
644 if (!list_empty(&st->layer2))
647 if (!hlist_empty(&st->l1sock.head))