]> bbs.cooldavid.org Git - net-next-2.6.git/blob - net/ax25/af_ax25.c
[PATCH] capable/capability.h (net/)
[net-next-2.6.git] / net / ax25 / af_ax25.c
1 /*
2  * This program is free software; you can redistribute it and/or modify
3  * it under the terms of the GNU General Public License as published by
4  * the Free Software Foundation; either version 2 of the License, or
5  * (at your option) any later version.
6  *
7  * Copyright (C) Alan Cox GW4PTS (alan@lxorguk.ukuu.org.uk)
8  * Copyright (C) Jonathan Naylor G4KLX (g4klx@g4klx.demon.co.uk)
9  * Copyright (C) Darryl Miles G7LED (dlm@g7led.demon.co.uk)
10  * Copyright (C) Steven Whitehouse GW7RRM (stevew@acm.org)
11  * Copyright (C) Joerg Reuter DL1BKE (jreuter@yaina.de)
12  * Copyright (C) Hans-Joachim Hetscher DD8NE (dd8ne@bnv-bamberg.de)
13  * Copyright (C) Hans Alblas PE1AYX (hans@esrac.ele.tue.nl)
14  * Copyright (C) Frederic Rible F1OAT (frible@teaser.fr)
15  */
16 #include <linux/config.h>
17 #include <linux/capability.h>
18 #include <linux/module.h>
19 #include <linux/errno.h>
20 #include <linux/types.h>
21 #include <linux/socket.h>
22 #include <linux/in.h>
23 #include <linux/kernel.h>
24 #include <linux/sched.h>
25 #include <linux/timer.h>
26 #include <linux/string.h>
27 #include <linux/smp_lock.h>
28 #include <linux/sockios.h>
29 #include <linux/net.h>
30 #include <net/ax25.h>
31 #include <linux/inet.h>
32 #include <linux/netdevice.h>
33 #include <linux/if_arp.h>
34 #include <linux/skbuff.h>
35 #include <net/sock.h>
36 #include <asm/uaccess.h>
37 #include <asm/system.h>
38 #include <linux/fcntl.h>
39 #include <linux/termios.h>      /* For TIOCINQ/OUTQ */
40 #include <linux/mm.h>
41 #include <linux/interrupt.h>
42 #include <linux/notifier.h>
43 #include <linux/proc_fs.h>
44 #include <linux/stat.h>
45 #include <linux/netfilter.h>
46 #include <linux/sysctl.h>
47 #include <linux/init.h>
48 #include <linux/spinlock.h>
49 #include <net/tcp_states.h>
50 #include <net/ip.h>
51 #include <net/arp.h>
52
53
54
55 HLIST_HEAD(ax25_list);
56 DEFINE_SPINLOCK(ax25_list_lock);
57
58 static const struct proto_ops ax25_proto_ops;
59
60 static void ax25_free_sock(struct sock *sk)
61 {
62         ax25_cb_put(ax25_sk(sk));
63 }
64
65 /*
66  *      Socket removal during an interrupt is now safe.
67  */
68 static void ax25_cb_del(ax25_cb *ax25)
69 {
70         if (!hlist_unhashed(&ax25->ax25_node)) {
71                 spin_lock_bh(&ax25_list_lock);
72                 hlist_del_init(&ax25->ax25_node);
73                 spin_unlock_bh(&ax25_list_lock);
74                 ax25_cb_put(ax25);
75         }
76 }
77
78 /*
79  *      Kill all bound sockets on a dropped device.
80  */
81 static void ax25_kill_by_device(struct net_device *dev)
82 {
83         ax25_dev *ax25_dev;
84         ax25_cb *s;
85         struct hlist_node *node;
86
87         if ((ax25_dev = ax25_dev_ax25dev(dev)) == NULL)
88                 return;
89
90         spin_lock_bh(&ax25_list_lock);
91         ax25_for_each(s, node, &ax25_list) {
92                 if (s->ax25_dev == ax25_dev) {
93                         s->ax25_dev = NULL;
94                         ax25_disconnect(s, ENETUNREACH);
95                 }
96         }
97         spin_unlock_bh(&ax25_list_lock);
98 }
99
100 /*
101  *      Handle device status changes.
102  */
103 static int ax25_device_event(struct notifier_block *this, unsigned long event,
104         void *ptr)
105 {
106         struct net_device *dev = (struct net_device *)ptr;
107
108         /* Reject non AX.25 devices */
109         if (dev->type != ARPHRD_AX25)
110                 return NOTIFY_DONE;
111
112         switch (event) {
113         case NETDEV_UP:
114                 ax25_dev_device_up(dev);
115                 break;
116         case NETDEV_DOWN:
117                 ax25_kill_by_device(dev);
118                 ax25_rt_device_down(dev);
119                 ax25_dev_device_down(dev);
120                 break;
121         default:
122                 break;
123         }
124
125         return NOTIFY_DONE;
126 }
127
128 /*
129  *      Add a socket to the bound sockets list.
130  */
131 void ax25_cb_add(ax25_cb *ax25)
132 {
133         spin_lock_bh(&ax25_list_lock);
134         ax25_cb_hold(ax25);
135         hlist_add_head(&ax25->ax25_node, &ax25_list);
136         spin_unlock_bh(&ax25_list_lock);
137 }
138
139 /*
140  *      Find a socket that wants to accept the SABM we have just
141  *      received.
142  */
143 struct sock *ax25_find_listener(ax25_address *addr, int digi,
144         struct net_device *dev, int type)
145 {
146         ax25_cb *s;
147         struct hlist_node *node;
148
149         spin_lock_bh(&ax25_list_lock);
150         ax25_for_each(s, node, &ax25_list) {
151                 if ((s->iamdigi && !digi) || (!s->iamdigi && digi))
152                         continue;
153                 if (s->sk && !ax25cmp(&s->source_addr, addr) &&
154                     s->sk->sk_type == type && s->sk->sk_state == TCP_LISTEN) {
155                         /* If device is null we match any device */
156                         if (s->ax25_dev == NULL || s->ax25_dev->dev == dev) {
157                                 sock_hold(s->sk);
158                                 spin_unlock_bh(&ax25_list_lock);
159                                 return s->sk;
160                         }
161                 }
162         }
163         spin_unlock_bh(&ax25_list_lock);
164
165         return NULL;
166 }
167
168 /*
169  *      Find an AX.25 socket given both ends.
170  */
171 struct sock *ax25_get_socket(ax25_address *my_addr, ax25_address *dest_addr,
172         int type)
173 {
174         struct sock *sk = NULL;
175         ax25_cb *s;
176         struct hlist_node *node;
177
178         spin_lock_bh(&ax25_list_lock);
179         ax25_for_each(s, node, &ax25_list) {
180                 if (s->sk && !ax25cmp(&s->source_addr, my_addr) &&
181                     !ax25cmp(&s->dest_addr, dest_addr) &&
182                     s->sk->sk_type == type) {
183                         sk = s->sk;
184                         sock_hold(sk);
185                         break;
186                 }
187         }
188
189         spin_unlock_bh(&ax25_list_lock);
190
191         return sk;
192 }
193
194 /*
195  *      Find an AX.25 control block given both ends. It will only pick up
196  *      floating AX.25 control blocks or non Raw socket bound control blocks.
197  */
198 ax25_cb *ax25_find_cb(ax25_address *src_addr, ax25_address *dest_addr,
199         ax25_digi *digi, struct net_device *dev)
200 {
201         ax25_cb *s;
202         struct hlist_node *node;
203
204         spin_lock_bh(&ax25_list_lock);
205         ax25_for_each(s, node, &ax25_list) {
206                 if (s->sk && s->sk->sk_type != SOCK_SEQPACKET)
207                         continue;
208                 if (s->ax25_dev == NULL)
209                         continue;
210                 if (ax25cmp(&s->source_addr, src_addr) == 0 && ax25cmp(&s->dest_addr, dest_addr) == 0 && s->ax25_dev->dev == dev) {
211                         if (digi != NULL && digi->ndigi != 0) {
212                                 if (s->digipeat == NULL)
213                                         continue;
214                                 if (ax25digicmp(s->digipeat, digi) != 0)
215                                         continue;
216                         } else {
217                                 if (s->digipeat != NULL && s->digipeat->ndigi != 0)
218                                         continue;
219                         }
220                         ax25_cb_hold(s);
221                         spin_unlock_bh(&ax25_list_lock);
222
223                         return s;
224                 }
225         }
226         spin_unlock_bh(&ax25_list_lock);
227
228         return NULL;
229 }
230
231 void ax25_send_to_raw(ax25_address *addr, struct sk_buff *skb, int proto)
232 {
233         ax25_cb *s;
234         struct sk_buff *copy;
235         struct hlist_node *node;
236
237         spin_lock_bh(&ax25_list_lock);
238         ax25_for_each(s, node, &ax25_list) {
239                 if (s->sk != NULL && ax25cmp(&s->source_addr, addr) == 0 &&
240                     s->sk->sk_type == SOCK_RAW &&
241                     s->sk->sk_protocol == proto &&
242                     s->ax25_dev->dev == skb->dev &&
243                     atomic_read(&s->sk->sk_rmem_alloc) <= s->sk->sk_rcvbuf) {
244                         if ((copy = skb_clone(skb, GFP_ATOMIC)) == NULL)
245                                 continue;
246                         if (sock_queue_rcv_skb(s->sk, copy) != 0)
247                                 kfree_skb(copy);
248                 }
249         }
250         spin_unlock_bh(&ax25_list_lock);
251 }
252
253 /*
254  *      Deferred destroy.
255  */
256 void ax25_destroy_socket(ax25_cb *);
257
258 /*
259  *      Handler for deferred kills.
260  */
261 static void ax25_destroy_timer(unsigned long data)
262 {
263         ax25_cb *ax25=(ax25_cb *)data;
264         struct sock *sk;
265         
266         sk=ax25->sk;
267         
268         bh_lock_sock(sk);
269         sock_hold(sk);
270         ax25_destroy_socket(ax25);
271         bh_unlock_sock(sk);
272         sock_put(sk);
273 }
274
275 /*
276  *      This is called from user mode and the timers. Thus it protects itself
277  *      against interrupt users but doesn't worry about being called during
278  *      work. Once it is removed from the queue no interrupt or bottom half
279  *      will touch it and we are (fairly 8-) ) safe.
280  */
281 void ax25_destroy_socket(ax25_cb *ax25)
282 {
283         struct sk_buff *skb;
284
285         ax25_cb_del(ax25);
286
287         ax25_stop_heartbeat(ax25);
288         ax25_stop_t1timer(ax25);
289         ax25_stop_t2timer(ax25);
290         ax25_stop_t3timer(ax25);
291         ax25_stop_idletimer(ax25);
292
293         ax25_clear_queues(ax25);        /* Flush the queues */
294
295         if (ax25->sk != NULL) {
296                 while ((skb = skb_dequeue(&ax25->sk->sk_receive_queue)) != NULL) {
297                         if (skb->sk != ax25->sk) {
298                                 /* A pending connection */
299                                 ax25_cb *sax25 = ax25_sk(skb->sk);
300
301                                 /* Queue the unaccepted socket for death */
302                                 sock_orphan(skb->sk);
303
304                                 ax25_start_heartbeat(sax25);
305                                 sax25->state = AX25_STATE_0;
306                         }
307
308                         kfree_skb(skb);
309                 }
310                 skb_queue_purge(&ax25->sk->sk_write_queue);
311         }
312
313         if (ax25->sk != NULL) {
314                 if (atomic_read(&ax25->sk->sk_wmem_alloc) ||
315                     atomic_read(&ax25->sk->sk_rmem_alloc)) {
316                         /* Defer: outstanding buffers */
317                         init_timer(&ax25->dtimer);
318                         ax25->dtimer.expires  = jiffies + 2 * HZ;
319                         ax25->dtimer.function = ax25_destroy_timer;
320                         ax25->dtimer.data     = (unsigned long)ax25;
321                         add_timer(&ax25->dtimer);
322                 } else {
323                         struct sock *sk=ax25->sk;
324                         ax25->sk=NULL;
325                         sock_put(sk);
326                 }
327         } else {
328                 ax25_cb_put(ax25);
329         }
330 }
331
332 /*
333  * dl1bke 960311: set parameters for existing AX.25 connections,
334  *                includes a KILL command to abort any connection.
335  *                VERY useful for debugging ;-)
336  */
337 static int ax25_ctl_ioctl(const unsigned int cmd, void __user *arg)
338 {
339         struct ax25_ctl_struct ax25_ctl;
340         ax25_digi digi;
341         ax25_dev *ax25_dev;
342         ax25_cb *ax25;
343         unsigned int k;
344
345         if (copy_from_user(&ax25_ctl, arg, sizeof(ax25_ctl)))
346                 return -EFAULT;
347
348         if ((ax25_dev = ax25_addr_ax25dev(&ax25_ctl.port_addr)) == NULL)
349                 return -ENODEV;
350
351         if (ax25_ctl.digi_count > AX25_MAX_DIGIS)
352                 return -EINVAL;
353
354         digi.ndigi = ax25_ctl.digi_count;
355         for (k = 0; k < digi.ndigi; k++)
356                 digi.calls[k] = ax25_ctl.digi_addr[k];
357
358         if ((ax25 = ax25_find_cb(&ax25_ctl.source_addr, &ax25_ctl.dest_addr, &digi, ax25_dev->dev)) == NULL)
359                 return -ENOTCONN;
360
361         switch (ax25_ctl.cmd) {
362         case AX25_KILL:
363                 ax25_send_control(ax25, AX25_DISC, AX25_POLLON, AX25_COMMAND);
364 #ifdef CONFIG_AX25_DAMA_SLAVE
365                 if (ax25_dev->dama.slave && ax25->ax25_dev->values[AX25_VALUES_PROTOCOL] == AX25_PROTO_DAMA_SLAVE)
366                         ax25_dama_off(ax25);
367 #endif
368                 ax25_disconnect(ax25, ENETRESET);
369                 break;
370
371         case AX25_WINDOW:
372                 if (ax25->modulus == AX25_MODULUS) {
373                         if (ax25_ctl.arg < 1 || ax25_ctl.arg > 7)
374                                 return -EINVAL;
375                 } else {
376                         if (ax25_ctl.arg < 1 || ax25_ctl.arg > 63)
377                                 return -EINVAL;
378                 }
379                 ax25->window = ax25_ctl.arg;
380                 break;
381
382         case AX25_T1:
383                 if (ax25_ctl.arg < 1)
384                         return -EINVAL;
385                 ax25->rtt = (ax25_ctl.arg * HZ) / 2;
386                 ax25->t1  = ax25_ctl.arg * HZ;
387                 break;
388
389         case AX25_T2:
390                 if (ax25_ctl.arg < 1)
391                         return -EINVAL;
392                 ax25->t2 = ax25_ctl.arg * HZ;
393                 break;
394
395         case AX25_N2:
396                 if (ax25_ctl.arg < 1 || ax25_ctl.arg > 31)
397                         return -EINVAL;
398                 ax25->n2count = 0;
399                 ax25->n2 = ax25_ctl.arg;
400                 break;
401
402         case AX25_T3:
403                 if (ax25_ctl.arg < 0)
404                         return -EINVAL;
405                 ax25->t3 = ax25_ctl.arg * HZ;
406                 break;
407
408         case AX25_IDLE:
409                 if (ax25_ctl.arg < 0)
410                         return -EINVAL;
411                 ax25->idle = ax25_ctl.arg * 60 * HZ;
412                 break;
413
414         case AX25_PACLEN:
415                 if (ax25_ctl.arg < 16 || ax25_ctl.arg > 65535)
416                         return -EINVAL;
417                 ax25->paclen = ax25_ctl.arg;
418                 break;
419
420         default:
421                 return -EINVAL;
422           }
423
424         return 0;
425 }
426
427 /*
428  *      Fill in a created AX.25 created control block with the default
429  *      values for a particular device.
430  */
431 void ax25_fillin_cb(ax25_cb *ax25, ax25_dev *ax25_dev)
432 {
433         ax25->ax25_dev = ax25_dev;
434
435         if (ax25->ax25_dev != NULL) {
436                 ax25->rtt     = ax25_dev->values[AX25_VALUES_T1] / 2;
437                 ax25->t1      = ax25_dev->values[AX25_VALUES_T1];
438                 ax25->t2      = ax25_dev->values[AX25_VALUES_T2];
439                 ax25->t3      = ax25_dev->values[AX25_VALUES_T3];
440                 ax25->n2      = ax25_dev->values[AX25_VALUES_N2];
441                 ax25->paclen  = ax25_dev->values[AX25_VALUES_PACLEN];
442                 ax25->idle    = ax25_dev->values[AX25_VALUES_IDLE];
443                 ax25->backoff = ax25_dev->values[AX25_VALUES_BACKOFF];
444
445                 if (ax25_dev->values[AX25_VALUES_AXDEFMODE]) {
446                         ax25->modulus = AX25_EMODULUS;
447                         ax25->window  = ax25_dev->values[AX25_VALUES_EWINDOW];
448                 } else {
449                         ax25->modulus = AX25_MODULUS;
450                         ax25->window  = ax25_dev->values[AX25_VALUES_WINDOW];
451                 }
452         } else {
453                 ax25->rtt     = AX25_DEF_T1 / 2;
454                 ax25->t1      = AX25_DEF_T1;
455                 ax25->t2      = AX25_DEF_T2;
456                 ax25->t3      = AX25_DEF_T3;
457                 ax25->n2      = AX25_DEF_N2;
458                 ax25->paclen  = AX25_DEF_PACLEN;
459                 ax25->idle    = AX25_DEF_IDLE;
460                 ax25->backoff = AX25_DEF_BACKOFF;
461
462                 if (AX25_DEF_AXDEFMODE) {
463                         ax25->modulus = AX25_EMODULUS;
464                         ax25->window  = AX25_DEF_EWINDOW;
465                 } else {
466                         ax25->modulus = AX25_MODULUS;
467                         ax25->window  = AX25_DEF_WINDOW;
468                 }
469         }
470 }
471
472 /*
473  * Create an empty AX.25 control block.
474  */
475 ax25_cb *ax25_create_cb(void)
476 {
477         ax25_cb *ax25;
478
479         if ((ax25 = kmalloc(sizeof(*ax25), GFP_ATOMIC)) == NULL)
480                 return NULL;
481
482         memset(ax25, 0x00, sizeof(*ax25));
483         atomic_set(&ax25->refcount, 1);
484
485         skb_queue_head_init(&ax25->write_queue);
486         skb_queue_head_init(&ax25->frag_queue);
487         skb_queue_head_init(&ax25->ack_queue);
488         skb_queue_head_init(&ax25->reseq_queue);
489
490         init_timer(&ax25->timer);
491         init_timer(&ax25->t1timer);
492         init_timer(&ax25->t2timer);
493         init_timer(&ax25->t3timer);
494         init_timer(&ax25->idletimer);
495
496         ax25_fillin_cb(ax25, NULL);
497
498         ax25->state = AX25_STATE_0;
499
500         return ax25;
501 }
502
503 /*
504  *      Handling for system calls applied via the various interfaces to an
505  *      AX25 socket object
506  */
507
508 static int ax25_setsockopt(struct socket *sock, int level, int optname,
509         char __user *optval, int optlen)
510 {
511         struct sock *sk = sock->sk;
512         ax25_cb *ax25;
513         struct net_device *dev;
514         char devname[IFNAMSIZ];
515         int opt, res = 0;
516
517         if (level != SOL_AX25)
518                 return -ENOPROTOOPT;
519
520         if (optlen < sizeof(int))
521                 return -EINVAL;
522
523         if (get_user(opt, (int __user *)optval))
524                 return -EFAULT;
525
526         lock_sock(sk);
527         ax25 = ax25_sk(sk);
528
529         switch (optname) {
530         case AX25_WINDOW:
531                 if (ax25->modulus == AX25_MODULUS) {
532                         if (opt < 1 || opt > 7) {
533                                 res = -EINVAL;
534                                 break;
535                         }
536                 } else {
537                         if (opt < 1 || opt > 63) {
538                                 res = -EINVAL;
539                                 break;
540                         }
541                 }
542                 ax25->window = opt;
543                 break;
544
545         case AX25_T1:
546                 if (opt < 1) {
547                         res = -EINVAL;
548                         break;
549                 }
550                 ax25->rtt = (opt * HZ) / 2;
551                 ax25->t1  = opt * HZ;
552                 break;
553
554         case AX25_T2:
555                 if (opt < 1) {
556                         res = -EINVAL;
557                         break;
558                 }
559                 ax25->t2 = opt * HZ;
560                 break;
561
562         case AX25_N2:
563                 if (opt < 1 || opt > 31) {
564                         res = -EINVAL;
565                         break;
566                 }
567                 ax25->n2 = opt;
568                 break;
569
570         case AX25_T3:
571                 if (opt < 1) {
572                         res = -EINVAL;
573                         break;
574                 }
575                 ax25->t3 = opt * HZ;
576                 break;
577
578         case AX25_IDLE:
579                 if (opt < 0) {
580                         res = -EINVAL;
581                         break;
582                 }
583                 ax25->idle = opt * 60 * HZ;
584                 break;
585
586         case AX25_BACKOFF:
587                 if (opt < 0 || opt > 2) {
588                         res = -EINVAL;
589                         break;
590                 }
591                 ax25->backoff = opt;
592                 break;
593
594         case AX25_EXTSEQ:
595                 ax25->modulus = opt ? AX25_EMODULUS : AX25_MODULUS;
596                 break;
597
598         case AX25_PIDINCL:
599                 ax25->pidincl = opt ? 1 : 0;
600                 break;
601
602         case AX25_IAMDIGI:
603                 ax25->iamdigi = opt ? 1 : 0;
604                 break;
605
606         case AX25_PACLEN:
607                 if (opt < 16 || opt > 65535) {
608                         res = -EINVAL;
609                         break;
610                 }
611                 ax25->paclen = opt;
612                 break;
613
614         case SO_BINDTODEVICE:
615                 if (optlen > IFNAMSIZ)
616                         optlen=IFNAMSIZ;
617                 if (copy_from_user(devname, optval, optlen)) {
618                 res = -EFAULT;
619                         break;
620                 }
621
622                 dev = dev_get_by_name(devname);
623                 if (dev == NULL) {
624                         res = -ENODEV;
625                         break;
626                 }
627
628                 if (sk->sk_type == SOCK_SEQPACKET &&
629                    (sock->state != SS_UNCONNECTED ||
630                     sk->sk_state == TCP_LISTEN)) {
631                         res = -EADDRNOTAVAIL;
632                         dev_put(dev);
633                         break;
634                 }
635
636                 ax25->ax25_dev = ax25_dev_ax25dev(dev);
637                 ax25_fillin_cb(ax25, ax25->ax25_dev);
638                 break;
639
640         default:
641                 res = -ENOPROTOOPT;
642         }
643         release_sock(sk);
644
645         return res;
646 }
647
648 static int ax25_getsockopt(struct socket *sock, int level, int optname,
649         char __user *optval, int __user *optlen)
650 {
651         struct sock *sk = sock->sk;
652         ax25_cb *ax25;
653         struct ax25_dev *ax25_dev;
654         char devname[IFNAMSIZ];
655         void *valptr;
656         int val = 0;
657         int maxlen, length;
658
659         if (level != SOL_AX25)
660                 return -ENOPROTOOPT;
661
662         if (get_user(maxlen, optlen))
663                 return -EFAULT;
664
665         if (maxlen < 1)
666                 return -EFAULT;
667
668         valptr = (void *) &val;
669         length = min_t(unsigned int, maxlen, sizeof(int));
670
671         lock_sock(sk);
672         ax25 = ax25_sk(sk);
673
674         switch (optname) {
675         case AX25_WINDOW:
676                 val = ax25->window;
677                 break;
678
679         case AX25_T1:
680                 val = ax25->t1 / HZ;
681                 break;
682
683         case AX25_T2:
684                 val = ax25->t2 / HZ;
685                 break;
686
687         case AX25_N2:
688                 val = ax25->n2;
689                 break;
690
691         case AX25_T3:
692                 val = ax25->t3 / HZ;
693                 break;
694
695         case AX25_IDLE:
696                 val = ax25->idle / (60 * HZ);
697                 break;
698
699         case AX25_BACKOFF:
700                 val = ax25->backoff;
701                 break;
702
703         case AX25_EXTSEQ:
704                 val = (ax25->modulus == AX25_EMODULUS);
705                 break;
706
707         case AX25_PIDINCL:
708                 val = ax25->pidincl;
709                 break;
710
711         case AX25_IAMDIGI:
712                 val = ax25->iamdigi;
713                 break;
714
715         case AX25_PACLEN:
716                 val = ax25->paclen;
717                 break;
718
719         case SO_BINDTODEVICE:
720                 ax25_dev = ax25->ax25_dev;
721
722                 if (ax25_dev != NULL && ax25_dev->dev != NULL) {
723                         strlcpy(devname, ax25_dev->dev->name, sizeof(devname));
724                         length = strlen(devname) + 1;
725                 } else {
726                         *devname = '\0';
727                         length = 1;
728                 }
729
730                 valptr = (void *) devname;
731                 break;
732
733         default:
734                 release_sock(sk);
735                 return -ENOPROTOOPT;
736         }
737         release_sock(sk);
738
739         if (put_user(length, optlen))
740                 return -EFAULT;
741
742         return copy_to_user(optval, valptr, length) ? -EFAULT : 0;
743 }
744
745 static int ax25_listen(struct socket *sock, int backlog)
746 {
747         struct sock *sk = sock->sk;
748         int res = 0;
749
750         lock_sock(sk);
751         if (sk->sk_type == SOCK_SEQPACKET && sk->sk_state != TCP_LISTEN) {
752                 sk->sk_max_ack_backlog = backlog;
753                 sk->sk_state           = TCP_LISTEN;
754                 goto out;
755         }
756         res = -EOPNOTSUPP;
757
758 out:
759         release_sock(sk);
760
761         return res;
762 }
763
764 /*
765  * XXX: when creating ax25_sock we should update the .obj_size setting
766  * below.
767  */
768 static struct proto ax25_proto = {
769         .name     = "AX25",
770         .owner    = THIS_MODULE,
771         .obj_size = sizeof(struct sock),
772 };
773
774 static int ax25_create(struct socket *sock, int protocol)
775 {
776         struct sock *sk;
777         ax25_cb *ax25;
778
779         switch (sock->type) {
780         case SOCK_DGRAM:
781                 if (protocol == 0 || protocol == PF_AX25)
782                         protocol = AX25_P_TEXT;
783                 break;
784
785         case SOCK_SEQPACKET:
786                 switch (protocol) {
787                 case 0:
788                 case PF_AX25:   /* For CLX */
789                         protocol = AX25_P_TEXT;
790                         break;
791                 case AX25_P_SEGMENT:
792 #ifdef CONFIG_INET
793                 case AX25_P_ARP:
794                 case AX25_P_IP:
795 #endif
796 #ifdef CONFIG_NETROM
797                 case AX25_P_NETROM:
798 #endif
799 #ifdef CONFIG_ROSE
800                 case AX25_P_ROSE:
801 #endif
802                         return -ESOCKTNOSUPPORT;
803 #ifdef CONFIG_NETROM_MODULE
804                 case AX25_P_NETROM:
805                         if (ax25_protocol_is_registered(AX25_P_NETROM))
806                                 return -ESOCKTNOSUPPORT;
807 #endif
808 #ifdef CONFIG_ROSE_MODULE
809                 case AX25_P_ROSE:
810                         if (ax25_protocol_is_registered(AX25_P_ROSE))
811                                 return -ESOCKTNOSUPPORT;
812 #endif
813                 default:
814                         break;
815                 }
816                 break;
817
818         case SOCK_RAW:
819                 break;
820         default:
821                 return -ESOCKTNOSUPPORT;
822         }
823
824         if ((sk = sk_alloc(PF_AX25, GFP_ATOMIC, &ax25_proto, 1)) == NULL)
825                 return -ENOMEM;
826
827         ax25 = sk->sk_protinfo = ax25_create_cb();
828         if (!ax25) {
829                 sk_free(sk);
830                 return -ENOMEM;
831         }
832
833         sock_init_data(sock, sk);
834
835         sk->sk_destruct = ax25_free_sock;
836         sock->ops    = &ax25_proto_ops;
837         sk->sk_protocol = protocol;
838
839         ax25->sk    = sk;
840
841         return 0;
842 }
843
844 struct sock *ax25_make_new(struct sock *osk, struct ax25_dev *ax25_dev)
845 {
846         struct sock *sk;
847         ax25_cb *ax25, *oax25;
848
849         if ((sk = sk_alloc(PF_AX25, GFP_ATOMIC, osk->sk_prot, 1)) == NULL)
850                 return NULL;
851
852         if ((ax25 = ax25_create_cb()) == NULL) {
853                 sk_free(sk);
854                 return NULL;
855         }
856
857         switch (osk->sk_type) {
858         case SOCK_DGRAM:
859                 break;
860         case SOCK_SEQPACKET:
861                 break;
862         default:
863                 sk_free(sk);
864                 ax25_cb_put(ax25);
865                 return NULL;
866         }
867
868         sock_init_data(NULL, sk);
869
870         sk->sk_destruct = ax25_free_sock;
871         sk->sk_type     = osk->sk_type;
872         sk->sk_socket   = osk->sk_socket;
873         sk->sk_priority = osk->sk_priority;
874         sk->sk_protocol = osk->sk_protocol;
875         sk->sk_rcvbuf   = osk->sk_rcvbuf;
876         sk->sk_sndbuf   = osk->sk_sndbuf;
877         sk->sk_state    = TCP_ESTABLISHED;
878         sk->sk_sleep    = osk->sk_sleep;
879         sock_copy_flags(sk, osk);
880
881         oax25 = ax25_sk(osk);
882
883         ax25->modulus = oax25->modulus;
884         ax25->backoff = oax25->backoff;
885         ax25->pidincl = oax25->pidincl;
886         ax25->iamdigi = oax25->iamdigi;
887         ax25->rtt     = oax25->rtt;
888         ax25->t1      = oax25->t1;
889         ax25->t2      = oax25->t2;
890         ax25->t3      = oax25->t3;
891         ax25->n2      = oax25->n2;
892         ax25->idle    = oax25->idle;
893         ax25->paclen  = oax25->paclen;
894         ax25->window  = oax25->window;
895
896         ax25->ax25_dev    = ax25_dev;
897         ax25->source_addr = oax25->source_addr;
898
899         if (oax25->digipeat != NULL) {
900                 if ((ax25->digipeat = kmalloc(sizeof(ax25_digi), GFP_ATOMIC)) == NULL) {
901                         sk_free(sk);
902                         ax25_cb_put(ax25);
903                         return NULL;
904                 }
905
906                 memcpy(ax25->digipeat, oax25->digipeat, sizeof(ax25_digi));
907         }
908
909         sk->sk_protinfo = ax25;
910         ax25->sk    = sk;
911
912         return sk;
913 }
914
915 static int ax25_release(struct socket *sock)
916 {
917         struct sock *sk = sock->sk;
918         ax25_cb *ax25;
919
920         if (sk == NULL)
921                 return 0;
922
923         sock_hold(sk);
924         sock_orphan(sk);
925         lock_sock(sk);
926         ax25 = ax25_sk(sk);
927
928         if (sk->sk_type == SOCK_SEQPACKET) {
929                 switch (ax25->state) {
930                 case AX25_STATE_0:
931                         release_sock(sk);
932                         ax25_disconnect(ax25, 0);
933                         lock_sock(sk);
934                         ax25_destroy_socket(ax25);
935                         break;
936
937                 case AX25_STATE_1:
938                 case AX25_STATE_2:
939                         ax25_send_control(ax25, AX25_DISC, AX25_POLLON, AX25_COMMAND);
940                         release_sock(sk);
941                         ax25_disconnect(ax25, 0);
942                         lock_sock(sk);
943                         ax25_destroy_socket(ax25);
944                         break;
945
946                 case AX25_STATE_3:
947                 case AX25_STATE_4:
948                         ax25_clear_queues(ax25);
949                         ax25->n2count = 0;
950
951                         switch (ax25->ax25_dev->values[AX25_VALUES_PROTOCOL]) {
952                         case AX25_PROTO_STD_SIMPLEX:
953                         case AX25_PROTO_STD_DUPLEX:
954                                 ax25_send_control(ax25,
955                                                   AX25_DISC,
956                                                   AX25_POLLON,
957                                                   AX25_COMMAND);
958                                 ax25_stop_t2timer(ax25);
959                                 ax25_stop_t3timer(ax25);
960                                 ax25_stop_idletimer(ax25);
961                                 break;
962 #ifdef CONFIG_AX25_DAMA_SLAVE
963                         case AX25_PROTO_DAMA_SLAVE:
964                                 ax25_stop_t3timer(ax25);
965                                 ax25_stop_idletimer(ax25);
966                                 break;
967 #endif
968                         }
969                         ax25_calculate_t1(ax25);
970                         ax25_start_t1timer(ax25);
971                         ax25->state = AX25_STATE_2;
972                         sk->sk_state                = TCP_CLOSE;
973                         sk->sk_shutdown            |= SEND_SHUTDOWN;
974                         sk->sk_state_change(sk);
975                         sock_set_flag(sk, SOCK_DESTROY);
976                         break;
977
978                 default:
979                         break;
980                 }
981         } else {
982                 sk->sk_state     = TCP_CLOSE;
983                 sk->sk_shutdown |= SEND_SHUTDOWN;
984                 sk->sk_state_change(sk);
985                 ax25_destroy_socket(ax25);
986         }
987
988         sock->sk   = NULL;
989         release_sock(sk);
990         sock_put(sk);
991
992         return 0;
993 }
994
995 /*
996  *      We support a funny extension here so you can (as root) give any callsign
997  *      digipeated via a local address as source. This hack is obsolete now
998  *      that we've implemented support for SO_BINDTODEVICE. It is however small
999  *      and trivially backward compatible.
1000  */
1001 static int ax25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
1002 {
1003         struct sock *sk = sock->sk;
1004         struct full_sockaddr_ax25 *addr = (struct full_sockaddr_ax25 *)uaddr;
1005         ax25_dev *ax25_dev = NULL;
1006         ax25_uid_assoc *user;
1007         ax25_address call;
1008         ax25_cb *ax25;
1009         int err = 0;
1010
1011         if (addr_len != sizeof(struct sockaddr_ax25) &&
1012             addr_len != sizeof(struct full_sockaddr_ax25)) {
1013                 /* support for old structure may go away some time */
1014                 if ((addr_len < sizeof(struct sockaddr_ax25) + sizeof(ax25_address) * 6) ||
1015                     (addr_len > sizeof(struct full_sockaddr_ax25))) {
1016                         return -EINVAL;
1017         }
1018
1019                 printk(KERN_WARNING "ax25_bind(): %s uses old (6 digipeater) socket structure.\n",
1020                         current->comm);
1021         }
1022
1023         if (addr->fsa_ax25.sax25_family != AF_AX25)
1024                 return -EINVAL;
1025
1026         user = ax25_findbyuid(current->euid);
1027         if (user) {
1028                 call = user->call;
1029                 ax25_uid_put(user);
1030         } else {
1031                 if (ax25_uid_policy && !capable(CAP_NET_ADMIN))
1032                         return -EACCES;
1033
1034                 call = addr->fsa_ax25.sax25_call;
1035         }
1036
1037         lock_sock(sk);
1038
1039         ax25 = ax25_sk(sk);
1040         if (!sock_flag(sk, SOCK_ZAPPED)) {
1041                 err = -EINVAL;
1042                 goto out;
1043         }
1044
1045         ax25->source_addr = call;
1046
1047         /*
1048          * User already set interface with SO_BINDTODEVICE
1049          */
1050         if (ax25->ax25_dev != NULL)
1051                 goto done;
1052
1053         if (addr_len > sizeof(struct sockaddr_ax25) && addr->fsa_ax25.sax25_ndigis == 1) {
1054                 if (ax25cmp(&addr->fsa_digipeater[0], &null_ax25_address) != 0 &&
1055                     (ax25_dev = ax25_addr_ax25dev(&addr->fsa_digipeater[0])) == NULL) {
1056                         err = -EADDRNOTAVAIL;
1057                         goto out;
1058                 }
1059         } else {
1060                 if ((ax25_dev = ax25_addr_ax25dev(&addr->fsa_ax25.sax25_call)) == NULL) {
1061                         err = -EADDRNOTAVAIL;
1062                         goto out;
1063                 }
1064         }
1065
1066         if (ax25_dev != NULL)
1067                 ax25_fillin_cb(ax25, ax25_dev);
1068
1069 done:
1070         ax25_cb_add(ax25);
1071         sock_reset_flag(sk, SOCK_ZAPPED);
1072
1073 out:
1074         release_sock(sk);
1075
1076         return 0;
1077 }
1078
1079 /*
1080  *      FIXME: nonblock behaviour looks like it may have a bug.
1081  */
1082 static int ax25_connect(struct socket *sock, struct sockaddr *uaddr,
1083         int addr_len, int flags)
1084 {
1085         struct sock *sk = sock->sk;
1086         ax25_cb *ax25 = ax25_sk(sk), *ax25t;
1087         struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)uaddr;
1088         ax25_digi *digi = NULL;
1089         int ct = 0, err = 0;
1090
1091         /*
1092          * some sanity checks. code further down depends on this
1093          */
1094
1095         if (addr_len == sizeof(struct sockaddr_ax25)) {
1096                 /* support for this will go away in early 2.5.x */
1097                 printk(KERN_WARNING "ax25_connect(): %s uses obsolete socket structure\n",
1098                         current->comm);
1099         }
1100         else if (addr_len != sizeof(struct full_sockaddr_ax25)) {
1101                 /* support for old structure may go away some time */
1102                 if ((addr_len < sizeof(struct sockaddr_ax25) + sizeof(ax25_address) * 6) ||
1103                     (addr_len > sizeof(struct full_sockaddr_ax25))) {
1104                         return -EINVAL;
1105                 }
1106
1107                 printk(KERN_WARNING "ax25_connect(): %s uses old (6 digipeater) socket structure.\n",
1108                         current->comm);
1109         }
1110
1111         if (fsa->fsa_ax25.sax25_family != AF_AX25)
1112                 return -EINVAL;
1113
1114         lock_sock(sk);
1115
1116         /* deal with restarts */
1117         if (sock->state == SS_CONNECTING) {
1118                 switch (sk->sk_state) {
1119                 case TCP_SYN_SENT: /* still trying */
1120                         err = -EINPROGRESS;
1121                         goto out;
1122
1123                 case TCP_ESTABLISHED: /* connection established */
1124                         sock->state = SS_CONNECTED;
1125                         goto out;
1126
1127                 case TCP_CLOSE: /* connection refused */
1128                         sock->state = SS_UNCONNECTED;
1129                         err = -ECONNREFUSED;
1130                         goto out;
1131                 }
1132         }
1133
1134         if (sk->sk_state == TCP_ESTABLISHED && sk->sk_type == SOCK_SEQPACKET) {
1135                 err = -EISCONN; /* No reconnect on a seqpacket socket */
1136                 goto out;
1137         }
1138
1139         sk->sk_state   = TCP_CLOSE;
1140         sock->state = SS_UNCONNECTED;
1141
1142         kfree(ax25->digipeat);
1143         ax25->digipeat = NULL;
1144
1145         /*
1146          *      Handle digi-peaters to be used.
1147          */
1148         if (addr_len > sizeof(struct sockaddr_ax25) &&
1149             fsa->fsa_ax25.sax25_ndigis != 0) {
1150                 /* Valid number of digipeaters ? */
1151                 if (fsa->fsa_ax25.sax25_ndigis < 1 || fsa->fsa_ax25.sax25_ndigis > AX25_MAX_DIGIS) {
1152                         err = -EINVAL;
1153                         goto out;
1154                 }
1155
1156                 if ((digi = kmalloc(sizeof(ax25_digi), GFP_KERNEL)) == NULL) {
1157                         err = -ENOBUFS;
1158                         goto out;
1159                 }
1160
1161                 digi->ndigi      = fsa->fsa_ax25.sax25_ndigis;
1162                 digi->lastrepeat = -1;
1163
1164                 while (ct < fsa->fsa_ax25.sax25_ndigis) {
1165                         if ((fsa->fsa_digipeater[ct].ax25_call[6] &
1166                              AX25_HBIT) && ax25->iamdigi) {
1167                                 digi->repeated[ct] = 1;
1168                                 digi->lastrepeat   = ct;
1169                         } else {
1170                                 digi->repeated[ct] = 0;
1171                         }
1172                         digi->calls[ct] = fsa->fsa_digipeater[ct];
1173                         ct++;
1174                 }
1175         }
1176
1177         /*
1178          *      Must bind first - autobinding in this may or may not work. If
1179          *      the socket is already bound, check to see if the device has
1180          *      been filled in, error if it hasn't.
1181          */
1182         if (sock_flag(sk, SOCK_ZAPPED)) {
1183                 /* check if we can remove this feature. It is broken. */
1184                 printk(KERN_WARNING "ax25_connect(): %s uses autobind, please contact jreuter@yaina.de\n",
1185                         current->comm);
1186                 if ((err = ax25_rt_autobind(ax25, &fsa->fsa_ax25.sax25_call)) < 0) {
1187                         kfree(digi);
1188                         goto out;
1189                 }
1190
1191                 ax25_fillin_cb(ax25, ax25->ax25_dev);
1192                 ax25_cb_add(ax25);
1193         } else {
1194                 if (ax25->ax25_dev == NULL) {
1195                         kfree(digi);
1196                         err = -EHOSTUNREACH;
1197                         goto out;
1198                 }
1199         }
1200
1201         if (sk->sk_type == SOCK_SEQPACKET &&
1202             (ax25t=ax25_find_cb(&ax25->source_addr, &fsa->fsa_ax25.sax25_call, digi,
1203                          ax25->ax25_dev->dev))) {
1204                 kfree(digi);
1205                 err = -EADDRINUSE;              /* Already such a connection */
1206                 ax25_cb_put(ax25t);
1207                 goto out;
1208         }
1209
1210         ax25->dest_addr = fsa->fsa_ax25.sax25_call;
1211         ax25->digipeat  = digi;
1212
1213         /* First the easy one */
1214         if (sk->sk_type != SOCK_SEQPACKET) {
1215                 sock->state = SS_CONNECTED;
1216                 sk->sk_state   = TCP_ESTABLISHED;
1217                 goto out;
1218         }
1219
1220         /* Move to connecting socket, ax.25 lapb WAIT_UA.. */
1221         sock->state        = SS_CONNECTING;
1222         sk->sk_state          = TCP_SYN_SENT;
1223
1224         switch (ax25->ax25_dev->values[AX25_VALUES_PROTOCOL]) {
1225         case AX25_PROTO_STD_SIMPLEX:
1226         case AX25_PROTO_STD_DUPLEX:
1227                 ax25_std_establish_data_link(ax25);
1228                 break;
1229
1230 #ifdef CONFIG_AX25_DAMA_SLAVE
1231         case AX25_PROTO_DAMA_SLAVE:
1232                 ax25->modulus = AX25_MODULUS;
1233                 ax25->window  = ax25->ax25_dev->values[AX25_VALUES_WINDOW];
1234                 if (ax25->ax25_dev->dama.slave)
1235                         ax25_ds_establish_data_link(ax25);
1236                 else
1237                         ax25_std_establish_data_link(ax25);
1238                 break;
1239 #endif
1240         }
1241
1242         ax25->state = AX25_STATE_1;
1243
1244         ax25_start_heartbeat(ax25);
1245
1246         /* Now the loop */
1247         if (sk->sk_state != TCP_ESTABLISHED && (flags & O_NONBLOCK)) {
1248                 err = -EINPROGRESS;
1249                 goto out;
1250         }
1251
1252         if (sk->sk_state == TCP_SYN_SENT) {
1253                 struct task_struct *tsk = current;
1254                 DECLARE_WAITQUEUE(wait, tsk);
1255
1256                 add_wait_queue(sk->sk_sleep, &wait);
1257                 for (;;) {
1258                         if (sk->sk_state != TCP_SYN_SENT)
1259                                 break;
1260                         set_current_state(TASK_INTERRUPTIBLE);
1261                         release_sock(sk);
1262                         if (!signal_pending(tsk)) {
1263                                 schedule();
1264                                 lock_sock(sk);
1265                                 continue;
1266                         }
1267                         current->state = TASK_RUNNING;
1268                         remove_wait_queue(sk->sk_sleep, &wait);
1269                         return -ERESTARTSYS;
1270                 }
1271                 current->state = TASK_RUNNING;
1272                 remove_wait_queue(sk->sk_sleep, &wait);
1273         }
1274
1275         if (sk->sk_state != TCP_ESTABLISHED) {
1276                 /* Not in ABM, not in WAIT_UA -> failed */
1277                 sock->state = SS_UNCONNECTED;
1278                 err = sock_error(sk);   /* Always set at this point */
1279                 goto out;
1280         }
1281
1282         sock->state = SS_CONNECTED;
1283
1284         err=0;
1285 out:
1286         release_sock(sk);
1287
1288         return err;
1289 }
1290
1291
1292 static int ax25_accept(struct socket *sock, struct socket *newsock, int flags)
1293 {
1294         struct task_struct *tsk = current;
1295         DECLARE_WAITQUEUE(wait, tsk);
1296         struct sk_buff *skb;
1297         struct sock *newsk;
1298         struct sock *sk;
1299         int err = 0;
1300
1301         if (sock->state != SS_UNCONNECTED)
1302                 return -EINVAL;
1303
1304         if ((sk = sock->sk) == NULL)
1305                 return -EINVAL;
1306
1307         lock_sock(sk);
1308         if (sk->sk_type != SOCK_SEQPACKET) {
1309                 err = -EOPNOTSUPP;
1310                 goto out;
1311         }
1312
1313         if (sk->sk_state != TCP_LISTEN) {
1314                 err = -EINVAL;
1315                 goto out;
1316         }
1317
1318         /*
1319          *      The read queue this time is holding sockets ready to use
1320          *      hooked into the SABM we saved
1321          */
1322         add_wait_queue(sk->sk_sleep, &wait);
1323         for (;;) {
1324                 skb = skb_dequeue(&sk->sk_receive_queue);
1325                 if (skb)
1326                         break;
1327
1328                 release_sock(sk);
1329                 current->state = TASK_INTERRUPTIBLE;
1330                 if (flags & O_NONBLOCK) {
1331                         current->state = TASK_RUNNING;
1332                         remove_wait_queue(sk->sk_sleep, &wait);
1333                         return -EWOULDBLOCK;
1334                 }
1335                 if (!signal_pending(tsk)) {
1336                         schedule();
1337                         lock_sock(sk);
1338                         continue;
1339                 }
1340                 current->state = TASK_RUNNING;
1341                 remove_wait_queue(sk->sk_sleep, &wait);
1342                 return -ERESTARTSYS;
1343         }
1344         current->state = TASK_RUNNING;
1345         remove_wait_queue(sk->sk_sleep, &wait);
1346
1347         newsk            = skb->sk;
1348         newsk->sk_socket = newsock;
1349         newsk->sk_sleep  = &newsock->wait;
1350
1351         /* Now attach up the new socket */
1352         kfree_skb(skb);
1353         sk->sk_ack_backlog--;
1354         newsock->sk    = newsk;
1355         newsock->state = SS_CONNECTED;
1356
1357 out:
1358         release_sock(sk);
1359
1360         return err;
1361 }
1362
1363 static int ax25_getname(struct socket *sock, struct sockaddr *uaddr,
1364         int *uaddr_len, int peer)
1365 {
1366         struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)uaddr;
1367         struct sock *sk = sock->sk;
1368         unsigned char ndigi, i;
1369         ax25_cb *ax25;
1370         int err = 0;
1371
1372         lock_sock(sk);
1373         ax25 = ax25_sk(sk);
1374
1375         if (peer != 0) {
1376                 if (sk->sk_state != TCP_ESTABLISHED) {
1377                         err = -ENOTCONN;
1378                         goto out;
1379                 }
1380
1381                 fsa->fsa_ax25.sax25_family = AF_AX25;
1382                 fsa->fsa_ax25.sax25_call   = ax25->dest_addr;
1383                 fsa->fsa_ax25.sax25_ndigis = 0;
1384
1385                 if (ax25->digipeat != NULL) {
1386                         ndigi = ax25->digipeat->ndigi;
1387                         fsa->fsa_ax25.sax25_ndigis = ndigi;
1388                         for (i = 0; i < ndigi; i++)
1389                                 fsa->fsa_digipeater[i] =
1390                                                 ax25->digipeat->calls[i];
1391                 }
1392         } else {
1393                 fsa->fsa_ax25.sax25_family = AF_AX25;
1394                 fsa->fsa_ax25.sax25_call   = ax25->source_addr;
1395                 fsa->fsa_ax25.sax25_ndigis = 1;
1396                 if (ax25->ax25_dev != NULL) {
1397                         memcpy(&fsa->fsa_digipeater[0],
1398                                ax25->ax25_dev->dev->dev_addr, AX25_ADDR_LEN);
1399                 } else {
1400                         fsa->fsa_digipeater[0] = null_ax25_address;
1401                 }
1402         }
1403         *uaddr_len = sizeof (struct full_sockaddr_ax25);
1404
1405 out:
1406         release_sock(sk);
1407
1408         return err;
1409 }
1410
1411 static int ax25_sendmsg(struct kiocb *iocb, struct socket *sock,
1412                         struct msghdr *msg, size_t len)
1413 {
1414         struct sockaddr_ax25 *usax = (struct sockaddr_ax25 *)msg->msg_name;
1415         struct sock *sk = sock->sk;
1416         struct sockaddr_ax25 sax;
1417         struct sk_buff *skb;
1418         ax25_digi dtmp, *dp;
1419         unsigned char *asmptr;
1420         ax25_cb *ax25;
1421         size_t size;
1422         int lv, err, addr_len = msg->msg_namelen;
1423
1424         if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_EOR|MSG_CMSG_COMPAT))
1425                 return -EINVAL;
1426
1427         lock_sock(sk);
1428         ax25 = ax25_sk(sk);
1429
1430         if (sock_flag(sk, SOCK_ZAPPED)) {
1431                 err = -EADDRNOTAVAIL;
1432                 goto out;
1433         }
1434
1435         if (sk->sk_shutdown & SEND_SHUTDOWN) {
1436                 send_sig(SIGPIPE, current, 0);
1437                 err = -EPIPE;
1438                 goto out;
1439         }
1440
1441         if (ax25->ax25_dev == NULL) {
1442                 err = -ENETUNREACH;
1443                 goto out;
1444         }
1445
1446         if (len > ax25->ax25_dev->dev->mtu) {
1447                 err = -EMSGSIZE;
1448                 goto out;
1449         }
1450                 
1451         if (usax != NULL) {
1452                 if (usax->sax25_family != AF_AX25) {
1453                         err = -EINVAL;
1454                         goto out;
1455                 }
1456
1457                 if (addr_len == sizeof(struct sockaddr_ax25)) {
1458                         printk(KERN_WARNING "ax25_sendmsg(): %s uses obsolete socket structure\n",
1459                                 current->comm);
1460                 }
1461                 else if (addr_len != sizeof(struct full_sockaddr_ax25)) {
1462                         /* support for old structure may go away some time */
1463                         if ((addr_len < sizeof(struct sockaddr_ax25) + sizeof(ax25_address) * 6) ||
1464                             (addr_len > sizeof(struct full_sockaddr_ax25))) {
1465                                 err = -EINVAL;
1466                                 goto out;
1467                         }
1468
1469                         printk(KERN_WARNING "ax25_sendmsg(): %s uses old (6 digipeater) socket structure.\n",
1470                                 current->comm);
1471                 }
1472
1473                 if (addr_len > sizeof(struct sockaddr_ax25) && usax->sax25_ndigis != 0) {
1474                         int ct           = 0;
1475                         struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)usax;
1476
1477                         /* Valid number of digipeaters ? */
1478                         if (usax->sax25_ndigis < 1 || usax->sax25_ndigis > AX25_MAX_DIGIS) {
1479                                 err = -EINVAL;
1480                                 goto out;
1481                         }
1482
1483                         dtmp.ndigi      = usax->sax25_ndigis;
1484
1485                         while (ct < usax->sax25_ndigis) {
1486                                 dtmp.repeated[ct] = 0;
1487                                 dtmp.calls[ct]    = fsa->fsa_digipeater[ct];
1488                                 ct++;
1489                         }
1490
1491                         dtmp.lastrepeat = 0;
1492                 }
1493
1494                 sax = *usax;
1495                 if (sk->sk_type == SOCK_SEQPACKET &&
1496                     ax25cmp(&ax25->dest_addr, &sax.sax25_call)) {
1497                         err = -EISCONN;
1498                         goto out;
1499                 }
1500                 if (usax->sax25_ndigis == 0)
1501                         dp = NULL;
1502                 else
1503                         dp = &dtmp;
1504         } else {
1505                 /*
1506                  *      FIXME: 1003.1g - if the socket is like this because
1507                  *      it has become closed (not started closed) and is VC
1508                  *      we ought to SIGPIPE, EPIPE
1509                  */
1510                 if (sk->sk_state != TCP_ESTABLISHED) {
1511                         err = -ENOTCONN;
1512                         goto out;
1513                 }
1514                 sax.sax25_family = AF_AX25;
1515                 sax.sax25_call   = ax25->dest_addr;
1516                 dp = ax25->digipeat;
1517         }
1518
1519         SOCK_DEBUG(sk, "AX.25: sendto: Addresses built.\n");
1520
1521         /* Build a packet */
1522         SOCK_DEBUG(sk, "AX.25: sendto: building packet.\n");
1523
1524         /* Assume the worst case */
1525         size = len + ax25->ax25_dev->dev->hard_header_len;
1526
1527         skb = sock_alloc_send_skb(sk, size, msg->msg_flags&MSG_DONTWAIT, &err);
1528         if (skb == NULL)
1529                 goto out;
1530
1531         skb_reserve(skb, size - len);
1532
1533         SOCK_DEBUG(sk, "AX.25: Appending user data\n");
1534
1535         /* User data follows immediately after the AX.25 data */
1536         if (memcpy_fromiovec(skb_put(skb, len), msg->msg_iov, len)) {
1537                 err = -EFAULT;
1538                 kfree_skb(skb);
1539                 goto out;
1540         }
1541
1542         skb->nh.raw = skb->data;
1543
1544         /* Add the PID if one is not supplied by the user in the skb */
1545         if (!ax25->pidincl) {
1546                 asmptr  = skb_push(skb, 1);
1547                 *asmptr = sk->sk_protocol;
1548         }
1549
1550         SOCK_DEBUG(sk, "AX.25: Transmitting buffer\n");
1551
1552         if (sk->sk_type == SOCK_SEQPACKET) {
1553                 /* Connected mode sockets go via the LAPB machine */
1554                 if (sk->sk_state != TCP_ESTABLISHED) {
1555                         kfree_skb(skb);
1556                         err = -ENOTCONN;
1557                         goto out;
1558                 }
1559
1560                 /* Shove it onto the queue and kick */
1561                 ax25_output(ax25, ax25->paclen, skb);
1562
1563                 err = len;
1564                 goto out;
1565         }
1566
1567         asmptr = skb_push(skb, 1 + ax25_addr_size(dp));
1568
1569         SOCK_DEBUG(sk, "Building AX.25 Header (dp=%p).\n", dp);
1570
1571         if (dp != NULL)
1572                 SOCK_DEBUG(sk, "Num digipeaters=%d\n", dp->ndigi);
1573
1574         /* Build an AX.25 header */
1575         asmptr += (lv = ax25_addr_build(asmptr, &ax25->source_addr,
1576                                         &sax.sax25_call, dp,
1577                                         AX25_COMMAND, AX25_MODULUS));
1578
1579         SOCK_DEBUG(sk, "Built header (%d bytes)\n",lv);
1580
1581         skb->h.raw = asmptr;
1582
1583         SOCK_DEBUG(sk, "base=%p pos=%p\n", skb->data, asmptr);
1584
1585         *asmptr = AX25_UI;
1586
1587         /* Datagram frames go straight out of the door as UI */
1588         ax25_queue_xmit(skb, ax25->ax25_dev->dev);
1589
1590         err = len;
1591
1592 out:
1593         release_sock(sk);
1594
1595         return err;
1596 }
1597
1598 static int ax25_recvmsg(struct kiocb *iocb, struct socket *sock,
1599         struct msghdr *msg, size_t size, int flags)
1600 {
1601         struct sock *sk = sock->sk;
1602         struct sk_buff *skb;
1603         int copied;
1604         int err = 0;
1605
1606         lock_sock(sk);
1607         /*
1608          *      This works for seqpacket too. The receiver has ordered the
1609          *      queue for us! We do one quick check first though
1610          */
1611         if (sk->sk_type == SOCK_SEQPACKET && sk->sk_state != TCP_ESTABLISHED) {
1612                 err =  -ENOTCONN;
1613                 goto out;
1614         }
1615
1616         /* Now we can treat all alike */
1617         skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
1618                                 flags & MSG_DONTWAIT, &err);
1619         if (skb == NULL)
1620                 goto out;
1621
1622         if (!ax25_sk(sk)->pidincl)
1623                 skb_pull(skb, 1);               /* Remove PID */
1624
1625         skb->h.raw = skb->data;
1626         copied     = skb->len;
1627
1628         if (copied > size) {
1629                 copied = size;
1630                 msg->msg_flags |= MSG_TRUNC;
1631         }
1632
1633         skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
1634
1635         if (msg->msg_namelen != 0) {
1636                 struct sockaddr_ax25 *sax = (struct sockaddr_ax25 *)msg->msg_name;
1637                 ax25_digi digi;
1638                 ax25_address src;
1639
1640                 ax25_addr_parse(skb->mac.raw+1, skb->data-skb->mac.raw-1, &src, NULL, &digi, NULL, NULL);
1641
1642                 sax->sax25_family = AF_AX25;
1643                 /* We set this correctly, even though we may not let the
1644                    application know the digi calls further down (because it
1645                    did NOT ask to know them).  This could get political... **/
1646                 sax->sax25_ndigis = digi.ndigi;
1647                 sax->sax25_call   = src;
1648
1649                 if (sax->sax25_ndigis != 0) {
1650                         int ct;
1651                         struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)sax;
1652
1653                         for (ct = 0; ct < digi.ndigi; ct++)
1654                                 fsa->fsa_digipeater[ct] = digi.calls[ct];
1655                 }
1656                 msg->msg_namelen = sizeof(struct full_sockaddr_ax25);
1657         }
1658
1659         skb_free_datagram(sk, skb);
1660         err = copied;
1661
1662 out:
1663         release_sock(sk);
1664
1665         return err;
1666 }
1667
1668 static int ax25_shutdown(struct socket *sk, int how)
1669 {
1670         /* FIXME - generate DM and RNR states */
1671         return -EOPNOTSUPP;
1672 }
1673
1674 static int ax25_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
1675 {
1676         struct sock *sk = sock->sk;
1677         void __user *argp = (void __user *)arg;
1678         int res = 0;
1679
1680         lock_sock(sk);
1681         switch (cmd) {
1682         case TIOCOUTQ: {
1683                 long amount;
1684                 amount = sk->sk_sndbuf - atomic_read(&sk->sk_wmem_alloc);
1685                 if (amount < 0)
1686                         amount = 0;
1687                 res = put_user(amount, (int __user *)argp);
1688                 break;
1689         }
1690
1691         case TIOCINQ: {
1692                 struct sk_buff *skb;
1693                 long amount = 0L;
1694                 /* These two are safe on a single CPU system as only user tasks fiddle here */
1695                 if ((skb = skb_peek(&sk->sk_receive_queue)) != NULL)
1696                         amount = skb->len;
1697                 res = put_user(amount, (int __user *) argp);
1698                 break;
1699         }
1700
1701         case SIOCGSTAMP:
1702                 res = sock_get_timestamp(sk, argp);
1703                 break;
1704
1705         case SIOCAX25ADDUID:    /* Add a uid to the uid/call map table */
1706         case SIOCAX25DELUID:    /* Delete a uid from the uid/call map table */
1707         case SIOCAX25GETUID: {
1708                 struct sockaddr_ax25 sax25;
1709                 if (copy_from_user(&sax25, argp, sizeof(sax25))) {
1710                         res = -EFAULT;
1711                         break;
1712                 }
1713                 res = ax25_uid_ioctl(cmd, &sax25);
1714                 break;
1715         }
1716
1717         case SIOCAX25NOUID: {   /* Set the default policy (default/bar) */
1718                 long amount;
1719                 if (!capable(CAP_NET_ADMIN)) {
1720                         res = -EPERM;
1721                         break;
1722                 }
1723                 if (get_user(amount, (long __user *)argp)) {
1724                         res = -EFAULT;
1725                         break;
1726                 }
1727                 if (amount > AX25_NOUID_BLOCK) {
1728                         res = -EINVAL;
1729                         break;
1730                 }
1731                 ax25_uid_policy = amount;
1732                 res = 0;
1733                 break;
1734         }
1735
1736         case SIOCADDRT:
1737         case SIOCDELRT:
1738         case SIOCAX25OPTRT:
1739                 if (!capable(CAP_NET_ADMIN)) {
1740                         res = -EPERM;
1741                         break;
1742                 }
1743                 res = ax25_rt_ioctl(cmd, argp);
1744                 break;
1745
1746         case SIOCAX25CTLCON:
1747                 if (!capable(CAP_NET_ADMIN)) {
1748                         res = -EPERM;
1749                         break;
1750                 }
1751                 res = ax25_ctl_ioctl(cmd, argp);
1752                 break;
1753
1754         case SIOCAX25GETINFO:
1755         case SIOCAX25GETINFOOLD: {
1756                 ax25_cb *ax25 = ax25_sk(sk);
1757                 struct ax25_info_struct ax25_info;
1758
1759                 ax25_info.t1        = ax25->t1   / HZ;
1760                 ax25_info.t2        = ax25->t2   / HZ;
1761                 ax25_info.t3        = ax25->t3   / HZ;
1762                 ax25_info.idle      = ax25->idle / (60 * HZ);
1763                 ax25_info.n2        = ax25->n2;
1764                 ax25_info.t1timer   = ax25_display_timer(&ax25->t1timer)   / HZ;
1765                 ax25_info.t2timer   = ax25_display_timer(&ax25->t2timer)   / HZ;
1766                 ax25_info.t3timer   = ax25_display_timer(&ax25->t3timer)   / HZ;
1767                 ax25_info.idletimer = ax25_display_timer(&ax25->idletimer) / (60 * HZ);
1768                 ax25_info.n2count   = ax25->n2count;
1769                 ax25_info.state     = ax25->state;
1770                 ax25_info.rcv_q     = atomic_read(&sk->sk_rmem_alloc);
1771                 ax25_info.snd_q     = atomic_read(&sk->sk_wmem_alloc);
1772                 ax25_info.vs        = ax25->vs;
1773                 ax25_info.vr        = ax25->vr;
1774                 ax25_info.va        = ax25->va;
1775                 ax25_info.vs_max    = ax25->vs; /* reserved */
1776                 ax25_info.paclen    = ax25->paclen;
1777                 ax25_info.window    = ax25->window;
1778
1779                 /* old structure? */
1780                 if (cmd == SIOCAX25GETINFOOLD) {
1781                         static int warned = 0;
1782                         if (!warned) {
1783                                 printk(KERN_INFO "%s uses old SIOCAX25GETINFO\n",
1784                                         current->comm);
1785                                 warned=1;
1786                         }
1787
1788                         if (copy_to_user(argp, &ax25_info, sizeof(struct ax25_info_struct_deprecated))) {
1789                                 res = -EFAULT;
1790                                 break;
1791                         }
1792                 } else {
1793                         if (copy_to_user(argp, &ax25_info, sizeof(struct ax25_info_struct))) {
1794                                 res = -EINVAL;
1795                                 break;
1796                         }
1797                 }
1798                 res = 0;
1799                 break;
1800         }
1801
1802         case SIOCAX25ADDFWD:
1803         case SIOCAX25DELFWD: {
1804                 struct ax25_fwd_struct ax25_fwd;
1805                 if (!capable(CAP_NET_ADMIN)) {
1806                         res = -EPERM;
1807                         break;
1808                 }
1809                 if (copy_from_user(&ax25_fwd, argp, sizeof(ax25_fwd))) {
1810                         res = -EFAULT;
1811                         break;
1812                 }
1813                 res = ax25_fwd_ioctl(cmd, &ax25_fwd);
1814                 break;
1815         }
1816
1817         case SIOCGIFADDR:
1818         case SIOCSIFADDR:
1819         case SIOCGIFDSTADDR:
1820         case SIOCSIFDSTADDR:
1821         case SIOCGIFBRDADDR:
1822         case SIOCSIFBRDADDR:
1823         case SIOCGIFNETMASK:
1824         case SIOCSIFNETMASK:
1825         case SIOCGIFMETRIC:
1826         case SIOCSIFMETRIC:
1827                 res = -EINVAL;
1828                 break;
1829
1830         default:
1831                 res = -ENOIOCTLCMD;
1832                 break;
1833         }
1834         release_sock(sk);
1835
1836         return res;
1837 }
1838
1839 #ifdef CONFIG_PROC_FS
1840
1841 static void *ax25_info_start(struct seq_file *seq, loff_t *pos)
1842 {
1843         struct ax25_cb *ax25;
1844         struct hlist_node *node;
1845         int i = 0;
1846
1847         spin_lock_bh(&ax25_list_lock);
1848         ax25_for_each(ax25, node, &ax25_list) {
1849                 if (i == *pos)
1850                         return ax25;
1851                 ++i;
1852         }
1853         return NULL;
1854 }
1855
1856 static void *ax25_info_next(struct seq_file *seq, void *v, loff_t *pos)
1857 {
1858         ++*pos;
1859
1860         return hlist_entry( ((struct ax25_cb *)v)->ax25_node.next,
1861                             struct ax25_cb, ax25_node);
1862 }
1863         
1864 static void ax25_info_stop(struct seq_file *seq, void *v)
1865 {
1866         spin_unlock_bh(&ax25_list_lock);
1867 }
1868
1869 static int ax25_info_show(struct seq_file *seq, void *v)
1870 {
1871         ax25_cb *ax25 = v;
1872         char buf[11];
1873         int k;
1874
1875
1876         /*
1877          * New format:
1878          * magic dev src_addr dest_addr,digi1,digi2,.. st vs vr va t1 t1 t2 t2 t3 t3 idle idle n2 n2 rtt window paclen Snd-Q Rcv-Q inode
1879          */
1880
1881         seq_printf(seq, "%8.8lx %s %s%s ",
1882                    (long) ax25,
1883                    ax25->ax25_dev == NULL? "???" : ax25->ax25_dev->dev->name,
1884                    ax2asc(buf, &ax25->source_addr),
1885                    ax25->iamdigi? "*":"");
1886         seq_printf(seq, "%s", ax2asc(buf, &ax25->dest_addr));
1887
1888         for (k=0; (ax25->digipeat != NULL) && (k < ax25->digipeat->ndigi); k++) {
1889                 seq_printf(seq, ",%s%s",
1890                            ax2asc(buf, &ax25->digipeat->calls[k]),
1891                            ax25->digipeat->repeated[k]? "*":"");
1892         }
1893
1894         seq_printf(seq, " %d %d %d %d %lu %lu %lu %lu %lu %lu %lu %lu %d %d %lu %d %d",
1895                    ax25->state,
1896                    ax25->vs, ax25->vr, ax25->va,
1897                    ax25_display_timer(&ax25->t1timer) / HZ, ax25->t1 / HZ,
1898                    ax25_display_timer(&ax25->t2timer) / HZ, ax25->t2 / HZ,
1899                    ax25_display_timer(&ax25->t3timer) / HZ, ax25->t3 / HZ,
1900                    ax25_display_timer(&ax25->idletimer) / (60 * HZ),
1901                    ax25->idle / (60 * HZ),
1902                    ax25->n2count, ax25->n2,
1903                    ax25->rtt / HZ,
1904                    ax25->window,
1905                    ax25->paclen);
1906
1907         if (ax25->sk != NULL) {
1908                 bh_lock_sock(ax25->sk);
1909                 seq_printf(seq," %d %d %ld\n",
1910                            atomic_read(&ax25->sk->sk_wmem_alloc),
1911                            atomic_read(&ax25->sk->sk_rmem_alloc),
1912                            ax25->sk->sk_socket != NULL ? SOCK_INODE(ax25->sk->sk_socket)->i_ino : 0L);
1913                 bh_unlock_sock(ax25->sk);
1914         } else {
1915                 seq_puts(seq, " * * *\n");
1916         }
1917         return 0;
1918 }
1919
1920 static struct seq_operations ax25_info_seqops = {
1921         .start = ax25_info_start,
1922         .next = ax25_info_next,
1923         .stop = ax25_info_stop,
1924         .show = ax25_info_show,
1925 };
1926
1927 static int ax25_info_open(struct inode *inode, struct file *file)
1928 {
1929         return seq_open(file, &ax25_info_seqops);
1930 }
1931
1932 static struct file_operations ax25_info_fops = {
1933         .owner = THIS_MODULE,
1934         .open = ax25_info_open,
1935         .read = seq_read,
1936         .llseek = seq_lseek,
1937         .release = seq_release,
1938 };
1939
1940 #endif
1941
1942 static struct net_proto_family ax25_family_ops = {
1943         .family =       PF_AX25,
1944         .create =       ax25_create,
1945         .owner  =       THIS_MODULE,
1946 };
1947
1948 static const struct proto_ops ax25_proto_ops = {
1949         .family         = PF_AX25,
1950         .owner          = THIS_MODULE,
1951         .release        = ax25_release,
1952         .bind           = ax25_bind,
1953         .connect        = ax25_connect,
1954         .socketpair     = sock_no_socketpair,
1955         .accept         = ax25_accept,
1956         .getname        = ax25_getname,
1957         .poll           = datagram_poll,
1958         .ioctl          = ax25_ioctl,
1959         .listen         = ax25_listen,
1960         .shutdown       = ax25_shutdown,
1961         .setsockopt     = ax25_setsockopt,
1962         .getsockopt     = ax25_getsockopt,
1963         .sendmsg        = ax25_sendmsg,
1964         .recvmsg        = ax25_recvmsg,
1965         .mmap           = sock_no_mmap,
1966         .sendpage       = sock_no_sendpage,
1967 };
1968
1969 /*
1970  *      Called by socket.c on kernel start up
1971  */
1972 static struct packet_type ax25_packet_type = {
1973         .type   =       __constant_htons(ETH_P_AX25),
1974         .dev    =       NULL,                           /* All devices */
1975         .func   =       ax25_kiss_rcv,
1976 };
1977
1978 static struct notifier_block ax25_dev_notifier = {
1979         .notifier_call =ax25_device_event,
1980 };
1981
1982 EXPORT_SYMBOL(ax25_hard_header);
1983 EXPORT_SYMBOL(ax25_rebuild_header);
1984 EXPORT_SYMBOL(ax25_findbyuid);
1985 EXPORT_SYMBOL(ax25_find_cb);
1986 EXPORT_SYMBOL(ax25_linkfail_register);
1987 EXPORT_SYMBOL(ax25_linkfail_release);
1988 EXPORT_SYMBOL(ax25_listen_register);
1989 EXPORT_SYMBOL(ax25_listen_release);
1990 EXPORT_SYMBOL(ax25_protocol_register);
1991 EXPORT_SYMBOL(ax25_protocol_release);
1992 EXPORT_SYMBOL(ax25_send_frame);
1993 EXPORT_SYMBOL(ax25_uid_policy);
1994 EXPORT_SYMBOL(ax25cmp);
1995 EXPORT_SYMBOL(ax2asc);
1996 EXPORT_SYMBOL(asc2ax);
1997 EXPORT_SYMBOL(null_ax25_address);
1998 EXPORT_SYMBOL(ax25_display_timer);
1999
2000 static int __init ax25_init(void)
2001 {
2002         int rc = proto_register(&ax25_proto, 0);
2003
2004         if (rc != 0)
2005                 goto out;
2006
2007         sock_register(&ax25_family_ops);
2008         dev_add_pack(&ax25_packet_type);
2009         register_netdevice_notifier(&ax25_dev_notifier);
2010         ax25_register_sysctl();
2011
2012         proc_net_fops_create("ax25_route", S_IRUGO, &ax25_route_fops);
2013         proc_net_fops_create("ax25", S_IRUGO, &ax25_info_fops);
2014         proc_net_fops_create("ax25_calls", S_IRUGO, &ax25_uid_fops);
2015 out:
2016         return rc;
2017 }
2018 module_init(ax25_init);
2019
2020
2021 MODULE_AUTHOR("Jonathan Naylor G4KLX <g4klx@g4klx.demon.co.uk>");
2022 MODULE_DESCRIPTION("The amateur radio AX.25 link layer protocol");
2023 MODULE_LICENSE("GPL");
2024 MODULE_ALIAS_NETPROTO(PF_AX25);
2025
2026 static void __exit ax25_exit(void)
2027 {
2028         proc_net_remove("ax25_route");
2029         proc_net_remove("ax25");
2030         proc_net_remove("ax25_calls");
2031         ax25_rt_free();
2032         ax25_uid_free();
2033         ax25_dev_free();
2034
2035         ax25_unregister_sysctl();
2036         unregister_netdevice_notifier(&ax25_dev_notifier);
2037
2038         dev_remove_pack(&ax25_packet_type);
2039
2040         sock_unregister(PF_AX25);
2041         proto_unregister(&ax25_proto);
2042 }
2043 module_exit(ax25_exit);