xref: /linux/drivers/net/hamradio/mkiss.c (revision d67b569f5f620c0fb95d5212642746b7ba9d29e4)
1 /*
2  *	MKISS Driver
3  *
4  *	This module:
5  *		This module is free software; you can redistribute it and/or
6  *		modify it under the terms of the GNU General Public License
7  *		as published by the Free Software Foundation; either version
8  *		2 of the License, or (at your option) any later version.
9  *
10  * 		This module implements the AX.25 protocol for kernel-based
11  *		devices like TTYs. It interfaces between a raw TTY, and the
12  *		kernel's AX.25 protocol layers, just like slip.c.
13  *		AX.25 needs to be separated from slip.c while slip.c is no
14  *		longer a static kernel device since it is a module.
15  *		This method clears the way to implement other kiss protocols
16  *		like mkiss smack g8bpq ..... so far only mkiss is implemented.
17  *
18  * Hans Alblas <hans@esrac.ele.tue.nl>
19  *
20  *	History
21  *	Jonathan (G4KLX)	Fixed to match Linux networking changes - 2.1.15.
22  *	Matthias (DG2FEF)       Added support for FlexNet CRC (on special request)
23  *                              Fixed bug in ax25_close(): dev_lock_wait() was
24  *                              called twice, causing a deadlock.
25  *	Jeroen (PE1RXQ)		Removed old MKISS_MAGIC stuff and calls to
26  *				MOD_*_USE_COUNT
27  *				Remove cli() and fix rtnl lock usage.
28  */
29 
30 #include <linux/config.h>
31 #include <linux/module.h>
32 #include <asm/system.h>
33 #include <linux/bitops.h>
34 #include <asm/uaccess.h>
35 #include <linux/string.h>
36 #include <linux/mm.h>
37 #include <linux/interrupt.h>
38 #include <linux/in.h>
39 #include <linux/inet.h>
40 #include <linux/tty.h>
41 #include <linux/errno.h>
42 #include <linux/netdevice.h>
43 #include <linux/major.h>
44 #include <linux/init.h>
45 #include <linux/rtnetlink.h>
46 #include <linux/etherdevice.h>
47 #include <linux/skbuff.h>
48 #include <linux/if_arp.h>
49 
50 #include <net/ax25.h>
51 
52 #include "mkiss.h"
53 
54 #ifdef CONFIG_INET
55 #include <linux/ip.h>
56 #include <linux/tcp.h>
57 #endif
58 
59 static char banner[] __initdata = KERN_INFO "mkiss: AX.25 Multikiss, Hans Albas PE1AYX\n";
60 
61 typedef struct ax25_ctrl {
62 	struct ax_disp ctrl;	/* 				*/
63 	struct net_device  dev;	/* the device			*/
64 } ax25_ctrl_t;
65 
66 static ax25_ctrl_t **ax25_ctrls;
67 
68 int ax25_maxdev = AX25_MAXDEV;		/* Can be overridden with insmod! */
69 
70 static struct tty_ldisc	ax_ldisc;
71 
72 static int ax25_init(struct net_device *);
73 static int kiss_esc(unsigned char *, unsigned char *, int);
74 static int kiss_esc_crc(unsigned char *, unsigned char *, unsigned short, int);
75 static void kiss_unesc(struct ax_disp *, unsigned char);
76 
77 /*---------------------------------------------------------------------------*/
78 
79 static const unsigned short Crc_flex_table[] = {
80   0x0f87, 0x1e0e, 0x2c95, 0x3d1c, 0x49a3, 0x582a, 0x6ab1, 0x7b38,
81   0x83cf, 0x9246, 0xa0dd, 0xb154, 0xc5eb, 0xd462, 0xe6f9, 0xf770,
82   0x1f06, 0x0e8f, 0x3c14, 0x2d9d, 0x5922, 0x48ab, 0x7a30, 0x6bb9,
83   0x934e, 0x82c7, 0xb05c, 0xa1d5, 0xd56a, 0xc4e3, 0xf678, 0xe7f1,
84   0x2e85, 0x3f0c, 0x0d97, 0x1c1e, 0x68a1, 0x7928, 0x4bb3, 0x5a3a,
85   0xa2cd, 0xb344, 0x81df, 0x9056, 0xe4e9, 0xf560, 0xc7fb, 0xd672,
86   0x3e04, 0x2f8d, 0x1d16, 0x0c9f, 0x7820, 0x69a9, 0x5b32, 0x4abb,
87   0xb24c, 0xa3c5, 0x915e, 0x80d7, 0xf468, 0xe5e1, 0xd77a, 0xc6f3,
88   0x4d83, 0x5c0a, 0x6e91, 0x7f18, 0x0ba7, 0x1a2e, 0x28b5, 0x393c,
89   0xc1cb, 0xd042, 0xe2d9, 0xf350, 0x87ef, 0x9666, 0xa4fd, 0xb574,
90   0x5d02, 0x4c8b, 0x7e10, 0x6f99, 0x1b26, 0x0aaf, 0x3834, 0x29bd,
91   0xd14a, 0xc0c3, 0xf258, 0xe3d1, 0x976e, 0x86e7, 0xb47c, 0xa5f5,
92   0x6c81, 0x7d08, 0x4f93, 0x5e1a, 0x2aa5, 0x3b2c, 0x09b7, 0x183e,
93   0xe0c9, 0xf140, 0xc3db, 0xd252, 0xa6ed, 0xb764, 0x85ff, 0x9476,
94   0x7c00, 0x6d89, 0x5f12, 0x4e9b, 0x3a24, 0x2bad, 0x1936, 0x08bf,
95   0xf048, 0xe1c1, 0xd35a, 0xc2d3, 0xb66c, 0xa7e5, 0x957e, 0x84f7,
96   0x8b8f, 0x9a06, 0xa89d, 0xb914, 0xcdab, 0xdc22, 0xeeb9, 0xff30,
97   0x07c7, 0x164e, 0x24d5, 0x355c, 0x41e3, 0x506a, 0x62f1, 0x7378,
98   0x9b0e, 0x8a87, 0xb81c, 0xa995, 0xdd2a, 0xcca3, 0xfe38, 0xefb1,
99   0x1746, 0x06cf, 0x3454, 0x25dd, 0x5162, 0x40eb, 0x7270, 0x63f9,
100   0xaa8d, 0xbb04, 0x899f, 0x9816, 0xeca9, 0xfd20, 0xcfbb, 0xde32,
101   0x26c5, 0x374c, 0x05d7, 0x145e, 0x60e1, 0x7168, 0x43f3, 0x527a,
102   0xba0c, 0xab85, 0x991e, 0x8897, 0xfc28, 0xeda1, 0xdf3a, 0xceb3,
103   0x3644, 0x27cd, 0x1556, 0x04df, 0x7060, 0x61e9, 0x5372, 0x42fb,
104   0xc98b, 0xd802, 0xea99, 0xfb10, 0x8faf, 0x9e26, 0xacbd, 0xbd34,
105   0x45c3, 0x544a, 0x66d1, 0x7758, 0x03e7, 0x126e, 0x20f5, 0x317c,
106   0xd90a, 0xc883, 0xfa18, 0xeb91, 0x9f2e, 0x8ea7, 0xbc3c, 0xadb5,
107   0x5542, 0x44cb, 0x7650, 0x67d9, 0x1366, 0x02ef, 0x3074, 0x21fd,
108   0xe889, 0xf900, 0xcb9b, 0xda12, 0xaead, 0xbf24, 0x8dbf, 0x9c36,
109   0x64c1, 0x7548, 0x47d3, 0x565a, 0x22e5, 0x336c, 0x01f7, 0x107e,
110   0xf808, 0xe981, 0xdb1a, 0xca93, 0xbe2c, 0xafa5, 0x9d3e, 0x8cb7,
111   0x7440, 0x65c9, 0x5752, 0x46db, 0x3264, 0x23ed, 0x1176, 0x00ff
112 };
113 
114 /*---------------------------------------------------------------------------*/
115 
116 static unsigned short calc_crc_flex(unsigned char *cp, int size)
117 {
118     unsigned short crc = 0xffff;
119 
120     while (size--)
121 	crc = (crc << 8) ^ Crc_flex_table[((crc >> 8) ^ *cp++) & 0xff];
122 
123     return crc;
124 }
125 
126 /*---------------------------------------------------------------------------*/
127 
128 static int check_crc_flex(unsigned char *cp, int size)
129 {
130   unsigned short crc = 0xffff;
131 
132   if (size < 3)
133       return -1;
134 
135   while (size--)
136       crc = (crc << 8) ^ Crc_flex_table[((crc >> 8) ^ *cp++) & 0xff];
137 
138   if ((crc & 0xffff) != 0x7070)
139       return -1;
140 
141   return 0;
142 }
143 
144 /*---------------------------------------------------------------------------*/
145 
146 /* Find a free channel, and link in this `tty' line. */
147 static inline struct ax_disp *ax_alloc(void)
148 {
149 	ax25_ctrl_t *axp=NULL;
150 	int i;
151 
152 	for (i = 0; i < ax25_maxdev; i++) {
153 		axp = ax25_ctrls[i];
154 
155 		/* Not allocated ? */
156 		if (axp == NULL)
157 			break;
158 
159 		/* Not in use ? */
160 		if (!test_and_set_bit(AXF_INUSE, &axp->ctrl.flags))
161 			break;
162 	}
163 
164 	/* Sorry, too many, all slots in use */
165 	if (i >= ax25_maxdev)
166 		return NULL;
167 
168 	/* If no channels are available, allocate one */
169 	if (axp == NULL && (ax25_ctrls[i] = kmalloc(sizeof(ax25_ctrl_t), GFP_KERNEL)) != NULL) {
170 		axp = ax25_ctrls[i];
171 	}
172 	memset(axp, 0, sizeof(ax25_ctrl_t));
173 
174 	/* Initialize channel control data */
175 	set_bit(AXF_INUSE, &axp->ctrl.flags);
176 	sprintf(axp->dev.name, "ax%d", i++);
177 	axp->ctrl.tty      = NULL;
178 	axp->dev.base_addr = i;
179 	axp->dev.priv      = (void *)&axp->ctrl;
180 	axp->dev.next      = NULL;
181 	axp->dev.init      = ax25_init;
182 
183 	if (axp != NULL) {
184 		/*
185 		 * register device so that it can be ifconfig'ed
186 		 * ax25_init() will be called as a side-effect
187 		 * SIDE-EFFECT WARNING: ax25_init() CLEARS axp->ctrl !
188 		 */
189 		if (register_netdev(&axp->dev) == 0) {
190 			/* (Re-)Set the INUSE bit.   Very Important! */
191 			set_bit(AXF_INUSE, &axp->ctrl.flags);
192 			axp->ctrl.dev = &axp->dev;
193 			axp->dev.priv = (void *) &axp->ctrl;
194 
195 			return &axp->ctrl;
196 		} else {
197 			clear_bit(AXF_INUSE,&axp->ctrl.flags);
198 			printk(KERN_ERR "mkiss: ax_alloc() - register_netdev() failure.\n");
199 		}
200 	}
201 
202 	return NULL;
203 }
204 
205 /* Free an AX25 channel. */
206 static inline void ax_free(struct ax_disp *ax)
207 {
208 	/* Free all AX25 frame buffers. */
209 	if (ax->rbuff)
210 		kfree(ax->rbuff);
211 	ax->rbuff = NULL;
212 	if (ax->xbuff)
213 		kfree(ax->xbuff);
214 	ax->xbuff = NULL;
215 	if (!test_and_clear_bit(AXF_INUSE, &ax->flags))
216 		printk(KERN_ERR "mkiss: %s: ax_free for already free unit.\n", ax->dev->name);
217 }
218 
219 static void ax_changedmtu(struct ax_disp *ax)
220 {
221 	struct net_device *dev = ax->dev;
222 	unsigned char *xbuff, *rbuff, *oxbuff, *orbuff;
223 	int len;
224 
225 	len = dev->mtu * 2;
226 
227 	/*
228 	 * allow for arrival of larger UDP packets, even if we say not to
229 	 * also fixes a bug in which SunOS sends 512-byte packets even with
230 	 * an MSS of 128
231 	 */
232 	if (len < 576 * 2)
233 		len = 576 * 2;
234 
235 	xbuff = kmalloc(len + 4, GFP_ATOMIC);
236 	rbuff = kmalloc(len + 4, GFP_ATOMIC);
237 
238 	if (xbuff == NULL || rbuff == NULL)  {
239 		printk(KERN_ERR "mkiss: %s: unable to grow ax25 buffers, MTU change cancelled.\n",
240 		       ax->dev->name);
241 		dev->mtu = ax->mtu;
242 		if (xbuff != NULL)
243 			kfree(xbuff);
244 		if (rbuff != NULL)
245 			kfree(rbuff);
246 		return;
247 	}
248 
249 	spin_lock_bh(&ax->buflock);
250 
251 	oxbuff    = ax->xbuff;
252 	ax->xbuff = xbuff;
253 	orbuff    = ax->rbuff;
254 	ax->rbuff = rbuff;
255 
256 	if (ax->xleft) {
257 		if (ax->xleft <= len) {
258 			memcpy(ax->xbuff, ax->xhead, ax->xleft);
259 		} else  {
260 			ax->xleft = 0;
261 			ax->tx_dropped++;
262 		}
263 	}
264 
265 	ax->xhead = ax->xbuff;
266 
267 	if (ax->rcount) {
268 		if (ax->rcount <= len) {
269 			memcpy(ax->rbuff, orbuff, ax->rcount);
270 		} else  {
271 			ax->rcount = 0;
272 			ax->rx_over_errors++;
273 			set_bit(AXF_ERROR, &ax->flags);
274 		}
275 	}
276 
277 	ax->mtu      = dev->mtu + 73;
278 	ax->buffsize = len;
279 
280 	spin_unlock_bh(&ax->buflock);
281 
282 	if (oxbuff != NULL)
283 		kfree(oxbuff);
284 	if (orbuff != NULL)
285 		kfree(orbuff);
286 }
287 
288 
289 /* Set the "sending" flag.  This must be atomic. */
290 static inline void ax_lock(struct ax_disp *ax)
291 {
292 	netif_stop_queue(ax->dev);
293 }
294 
295 
296 /* Clear the "sending" flag.  This must be atomic. */
297 static inline void ax_unlock(struct ax_disp *ax)
298 {
299 	netif_start_queue(ax->dev);
300 }
301 
302 /* Send one completely decapsulated AX.25 packet to the AX.25 layer. */
303 static void ax_bump(struct ax_disp *ax)
304 {
305 	struct sk_buff *skb;
306 	int count;
307 
308 	spin_lock_bh(&ax->buflock);
309 	if (ax->rbuff[0] > 0x0f) {
310 		if (ax->rbuff[0] & 0x20) {
311 		        ax->crcmode = CRC_MODE_FLEX;
312 			if (check_crc_flex(ax->rbuff, ax->rcount) < 0) {
313 			        ax->rx_errors++;
314 				return;
315 			}
316 			ax->rcount -= 2;
317                         /* dl9sau bugfix: the trailling two bytes flexnet crc
318                          * will not be passed to the kernel. thus we have
319                          * to correct the kissparm signature, because it
320                          * indicates a crc but there's none
321 			 */
322                         *ax->rbuff &= ~0x20;
323 		}
324  	}
325 	spin_unlock_bh(&ax->buflock);
326 
327 	count = ax->rcount;
328 
329 	if ((skb = dev_alloc_skb(count)) == NULL) {
330 		printk(KERN_ERR "mkiss: %s: memory squeeze, dropping packet.\n", ax->dev->name);
331 		ax->rx_dropped++;
332 		return;
333 	}
334 
335 	spin_lock_bh(&ax->buflock);
336 	memcpy(skb_put(skb,count), ax->rbuff, count);
337 	spin_unlock_bh(&ax->buflock);
338 	skb->protocol = ax25_type_trans(skb, ax->dev);
339 	netif_rx(skb);
340 	ax->dev->last_rx = jiffies;
341 	ax->rx_packets++;
342 	ax->rx_bytes+=count;
343 }
344 
345 /* Encapsulate one AX.25 packet and stuff into a TTY queue. */
346 static void ax_encaps(struct ax_disp *ax, unsigned char *icp, int len)
347 {
348 	unsigned char *p;
349 	int actual, count;
350 
351 	if (ax->mtu != ax->dev->mtu + 73)	/* Someone has been ifconfigging */
352 		ax_changedmtu(ax);
353 
354 	if (len > ax->mtu) {		/* Sigh, shouldn't occur BUT ... */
355 		len = ax->mtu;
356 		printk(KERN_ERR "mkiss: %s: truncating oversized transmit packet!\n", ax->dev->name);
357 		ax->tx_dropped++;
358 		ax_unlock(ax);
359 		return;
360 	}
361 
362 	p = icp;
363 
364 	spin_lock_bh(&ax->buflock);
365         switch (ax->crcmode) {
366 	         unsigned short crc;
367 
368 	case CRC_MODE_FLEX:
369 	         *p |= 0x20;
370 	         crc = calc_crc_flex(p, len);
371 		 count = kiss_esc_crc(p, (unsigned char *)ax->xbuff, crc, len+2);
372 		 break;
373 
374 	default:
375 	         count = kiss_esc(p, (unsigned char *)ax->xbuff, len);
376 		 break;
377 	}
378 
379 	ax->tty->flags |= (1 << TTY_DO_WRITE_WAKEUP);
380 	actual = ax->tty->driver->write(ax->tty, ax->xbuff, count);
381 	ax->tx_packets++;
382 	ax->tx_bytes+=actual;
383 	ax->dev->trans_start = jiffies;
384 	ax->xleft = count - actual;
385 	ax->xhead = ax->xbuff + actual;
386 
387 	spin_unlock_bh(&ax->buflock);
388 }
389 
390 /*
391  * Called by the driver when there's room for more data.  If we have
392  * more packets to send, we send them here.
393  */
394 static void ax25_write_wakeup(struct tty_struct *tty)
395 {
396 	int actual;
397 	struct ax_disp *ax = (struct ax_disp *) tty->disc_data;
398 
399 	/* First make sure we're connected. */
400 	if (ax == NULL || ax->magic != AX25_MAGIC || !netif_running(ax->dev))
401 		return;
402 	if (ax->xleft <= 0)  {
403 		/* Now serial buffer is almost free & we can start
404 		 * transmission of another packet
405 		 */
406 		tty->flags &= ~(1 << TTY_DO_WRITE_WAKEUP);
407 
408 		netif_wake_queue(ax->dev);
409 		return;
410 	}
411 
412 	actual = tty->driver->write(tty, ax->xhead, ax->xleft);
413 	ax->xleft -= actual;
414 	ax->xhead += actual;
415 }
416 
417 /* Encapsulate an AX.25 packet and kick it into a TTY queue. */
418 static int ax_xmit(struct sk_buff *skb, struct net_device *dev)
419 {
420 	struct ax_disp *ax = netdev_priv(dev);
421 
422 	if (!netif_running(dev))  {
423 		printk(KERN_ERR "mkiss: %s: xmit call when iface is down\n", dev->name);
424 		return 1;
425 	}
426 
427 	if (netif_queue_stopped(dev)) {
428 		/*
429 		 * May be we must check transmitter timeout here ?
430 		 *      14 Oct 1994 Dmitry Gorodchanin.
431 		 */
432 		if (jiffies - dev->trans_start  < 20 * HZ) {
433 			/* 20 sec timeout not reached */
434 			return 1;
435 		}
436 
437 		printk(KERN_ERR "mkiss: %s: transmit timed out, %s?\n", dev->name,
438 		       (ax->tty->driver->chars_in_buffer(ax->tty) || ax->xleft) ?
439 		       "bad line quality" : "driver error");
440 
441 		ax->xleft = 0;
442 		ax->tty->flags &= ~(1 << TTY_DO_WRITE_WAKEUP);
443 		ax_unlock(ax);
444 	}
445 
446 	/* We were not busy, so we are now... :-) */
447 	if (skb != NULL) {
448 		ax_lock(ax);
449 		ax_encaps(ax, skb->data, skb->len);
450 		kfree_skb(skb);
451 	}
452 
453 	return 0;
454 }
455 
456 #if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
457 
458 /* Return the frame type ID */
459 static int ax_header(struct sk_buff *skb, struct net_device *dev, unsigned short type,
460 	  void *daddr, void *saddr, unsigned len)
461 {
462 #ifdef CONFIG_INET
463 	if (type != htons(ETH_P_AX25))
464 		return ax25_encapsulate(skb, dev, type, daddr, saddr, len);
465 #endif
466 	return 0;
467 }
468 
469 
470 static int ax_rebuild_header(struct sk_buff *skb)
471 {
472 #ifdef CONFIG_INET
473 	return ax25_rebuild_header(skb);
474 #else
475 	return 0;
476 #endif
477 }
478 
479 #endif	/* CONFIG_{AX25,AX25_MODULE} */
480 
481 /* Open the low-level part of the AX25 channel. Easy! */
482 static int ax_open(struct net_device *dev)
483 {
484 	struct ax_disp *ax = netdev_priv(dev);
485 	unsigned long len;
486 
487 	if (ax->tty == NULL)
488 		return -ENODEV;
489 
490 	/*
491 	 * Allocate the frame buffers:
492 	 *
493 	 * rbuff	Receive buffer.
494 	 * xbuff	Transmit buffer.
495 	 */
496 	len = dev->mtu * 2;
497 
498 	/*
499 	 * allow for arrival of larger UDP packets, even if we say not to
500 	 * also fixes a bug in which SunOS sends 512-byte packets even with
501 	 * an MSS of 128
502 	 */
503 	if (len < 576 * 2)
504 		len = 576 * 2;
505 
506 	if ((ax->rbuff = kmalloc(len + 4, GFP_KERNEL)) == NULL)
507 		goto norbuff;
508 
509 	if ((ax->xbuff = kmalloc(len + 4, GFP_KERNEL)) == NULL)
510 		goto noxbuff;
511 
512 	ax->mtu	     = dev->mtu + 73;
513 	ax->buffsize = len;
514 	ax->rcount   = 0;
515 	ax->xleft    = 0;
516 
517 	ax->flags   &= (1 << AXF_INUSE);      /* Clear ESCAPE & ERROR flags */
518 
519 	spin_lock_init(&ax->buflock);
520 
521 	netif_start_queue(dev);
522 	return 0;
523 
524 noxbuff:
525 	kfree(ax->rbuff);
526 
527 norbuff:
528 	return -ENOMEM;
529 }
530 
531 
532 /* Close the low-level part of the AX25 channel. Easy! */
533 static int ax_close(struct net_device *dev)
534 {
535 	struct ax_disp *ax = netdev_priv(dev);
536 
537 	if (ax->tty == NULL)
538 		return -EBUSY;
539 
540 	ax->tty->flags &= ~(1 << TTY_DO_WRITE_WAKEUP);
541 
542 	netif_stop_queue(dev);
543 
544 	return 0;
545 }
546 
547 static int ax25_receive_room(struct tty_struct *tty)
548 {
549 	return 65536;  /* We can handle an infinite amount of data. :-) */
550 }
551 
552 /*
553  * Handle the 'receiver data ready' interrupt.
554  * This function is called by the 'tty_io' module in the kernel when
555  * a block of data has been received, which can now be decapsulated
556  * and sent on to the AX.25 layer for further processing.
557  */
558 static void ax25_receive_buf(struct tty_struct *tty, const unsigned char *cp, char *fp, int count)
559 {
560 	struct ax_disp *ax = (struct ax_disp *) tty->disc_data;
561 
562 	if (ax == NULL || ax->magic != AX25_MAGIC || !netif_running(ax->dev))
563 		return;
564 
565 	/*
566 	 * Argh! mtu change time! - costs us the packet part received
567 	 * at the change
568 	 */
569 	if (ax->mtu != ax->dev->mtu + 73)
570 		ax_changedmtu(ax);
571 
572 	/* Read the characters out of the buffer */
573 	while (count--) {
574 		if (fp != NULL && *fp++) {
575 			if (!test_and_set_bit(AXF_ERROR, &ax->flags))
576 				ax->rx_errors++;
577 			cp++;
578 			continue;
579 		}
580 
581 		kiss_unesc(ax, *cp++);
582 	}
583 }
584 
585 static int ax25_open(struct tty_struct *tty)
586 {
587 	struct ax_disp *ax = (struct ax_disp *) tty->disc_data;
588 	int err;
589 
590 	/* First make sure we're not already connected. */
591 	if (ax && ax->magic == AX25_MAGIC)
592 		return -EEXIST;
593 
594 	/* OK.  Find a free AX25 channel to use. */
595 	if ((ax = ax_alloc()) == NULL)
596 		return -ENFILE;
597 
598 	ax->tty = tty;
599 	tty->disc_data = ax;
600 
601 	if (tty->driver->flush_buffer)
602 		tty->driver->flush_buffer(tty);
603 
604 	/* Restore default settings */
605 	ax->dev->type = ARPHRD_AX25;
606 
607 	/* Perform the low-level AX25 initialization. */
608 	if ((err = ax_open(ax->dev)))
609 		return err;
610 
611 	/* Done.  We have linked the TTY line to a channel. */
612 	return ax->dev->base_addr;
613 }
614 
615 static void ax25_close(struct tty_struct *tty)
616 {
617 	struct ax_disp *ax = (struct ax_disp *) tty->disc_data;
618 
619 	/* First make sure we're connected. */
620 	if (ax == NULL || ax->magic != AX25_MAGIC)
621 		return;
622 
623 	unregister_netdev(ax->dev);
624 
625 	tty->disc_data = NULL;
626 	ax->tty        = NULL;
627 
628 	ax_free(ax);
629 }
630 
631 
632 static struct net_device_stats *ax_get_stats(struct net_device *dev)
633 {
634 	static struct net_device_stats stats;
635 	struct ax_disp *ax = netdev_priv(dev);
636 
637 	memset(&stats, 0, sizeof(struct net_device_stats));
638 
639 	stats.rx_packets     = ax->rx_packets;
640 	stats.tx_packets     = ax->tx_packets;
641 	stats.rx_bytes	     = ax->rx_bytes;
642 	stats.tx_bytes       = ax->tx_bytes;
643 	stats.rx_dropped     = ax->rx_dropped;
644 	stats.tx_dropped     = ax->tx_dropped;
645 	stats.tx_errors      = ax->tx_errors;
646 	stats.rx_errors      = ax->rx_errors;
647 	stats.rx_over_errors = ax->rx_over_errors;
648 
649 	return &stats;
650 }
651 
652 
653 /************************************************************************
654  *			   STANDARD ENCAPSULATION	        	 *
655  ************************************************************************/
656 
657 static int kiss_esc(unsigned char *s, unsigned char *d, int len)
658 {
659 	unsigned char *ptr = d;
660 	unsigned char c;
661 
662 	/*
663 	 * Send an initial END character to flush out any
664 	 * data that may have accumulated in the receiver
665 	 * due to line noise.
666 	 */
667 
668 	*ptr++ = END;
669 
670 	while (len-- > 0) {
671 		switch (c = *s++) {
672 			case END:
673 				*ptr++ = ESC;
674 				*ptr++ = ESC_END;
675 				break;
676 			case ESC:
677 				*ptr++ = ESC;
678 				*ptr++ = ESC_ESC;
679 				break;
680 			default:
681 				*ptr++ = c;
682 				break;
683 		}
684 	}
685 
686 	*ptr++ = END;
687 
688 	return ptr - d;
689 }
690 
691 /*
692  * MW:
693  * OK its ugly, but tell me a better solution without copying the
694  * packet to a temporary buffer :-)
695  */
696 static int kiss_esc_crc(unsigned char *s, unsigned char *d, unsigned short crc, int len)
697 {
698 	unsigned char *ptr = d;
699 	unsigned char c=0;
700 
701 	*ptr++ = END;
702 	while (len > 0) {
703 		if (len > 2)
704 			c = *s++;
705 		else if (len > 1)
706 			c = crc >> 8;
707 		else if (len > 0)
708 			c = crc & 0xff;
709 
710 		len--;
711 
712 		switch (c) {
713                         case END:
714                                 *ptr++ = ESC;
715                                 *ptr++ = ESC_END;
716                                 break;
717                         case ESC:
718                                 *ptr++ = ESC;
719                                 *ptr++ = ESC_ESC;
720                                 break;
721                         default:
722                                 *ptr++ = c;
723                                 break;
724 		}
725 	}
726 	*ptr++ = END;
727 	return ptr - d;
728 }
729 
730 static void kiss_unesc(struct ax_disp *ax, unsigned char s)
731 {
732 	switch (s) {
733 		case END:
734 			/* drop keeptest bit = VSV */
735 			if (test_bit(AXF_KEEPTEST, &ax->flags))
736 				clear_bit(AXF_KEEPTEST, &ax->flags);
737 
738 			if (!test_and_clear_bit(AXF_ERROR, &ax->flags) && (ax->rcount > 2))
739 				ax_bump(ax);
740 
741 			clear_bit(AXF_ESCAPE, &ax->flags);
742 			ax->rcount = 0;
743 			return;
744 
745 		case ESC:
746 			set_bit(AXF_ESCAPE, &ax->flags);
747 			return;
748 		case ESC_ESC:
749 			if (test_and_clear_bit(AXF_ESCAPE, &ax->flags))
750 				s = ESC;
751 			break;
752 		case ESC_END:
753 			if (test_and_clear_bit(AXF_ESCAPE, &ax->flags))
754 				s = END;
755 			break;
756 	}
757 
758 	spin_lock_bh(&ax->buflock);
759 	if (!test_bit(AXF_ERROR, &ax->flags)) {
760 		if (ax->rcount < ax->buffsize) {
761 			ax->rbuff[ax->rcount++] = s;
762 			spin_unlock_bh(&ax->buflock);
763 			return;
764 		}
765 
766 		ax->rx_over_errors++;
767 		set_bit(AXF_ERROR, &ax->flags);
768 	}
769 	spin_unlock_bh(&ax->buflock);
770 }
771 
772 
773 static int ax_set_mac_address(struct net_device *dev, void __user *addr)
774 {
775 	if (copy_from_user(dev->dev_addr, addr, AX25_ADDR_LEN))
776 		return -EFAULT;
777 	return 0;
778 }
779 
780 static int ax_set_dev_mac_address(struct net_device *dev, void *addr)
781 {
782 	struct sockaddr *sa = addr;
783 
784 	memcpy(dev->dev_addr, sa->sa_data, AX25_ADDR_LEN);
785 
786 	return 0;
787 }
788 
789 
790 /* Perform I/O control on an active ax25 channel. */
791 static int ax25_disp_ioctl(struct tty_struct *tty, void *file, int cmd, void __user *arg)
792 {
793 	struct ax_disp *ax = (struct ax_disp *) tty->disc_data;
794 	unsigned int tmp;
795 
796 	/* First make sure we're connected. */
797 	if (ax == NULL || ax->magic != AX25_MAGIC)
798 		return -EINVAL;
799 
800 	switch (cmd) {
801 	 	case SIOCGIFNAME:
802 			if (copy_to_user(arg, ax->dev->name, strlen(ax->dev->name) + 1))
803 				return -EFAULT;
804 			return 0;
805 
806 		case SIOCGIFENCAP:
807 			return put_user(4, (int __user *)arg);
808 
809 		case SIOCSIFENCAP:
810 			if (get_user(tmp, (int __user *)arg))
811 				return -EFAULT;
812 			ax->mode = tmp;
813 			ax->dev->addr_len        = AX25_ADDR_LEN;	  /* sizeof an AX.25 addr */
814 			ax->dev->hard_header_len = AX25_KISS_HEADER_LEN + AX25_MAX_HEADER_LEN + 3;
815 			ax->dev->type            = ARPHRD_AX25;
816 			return 0;
817 
818 		 case SIOCSIFHWADDR:
819 			return ax_set_mac_address(ax->dev, arg);
820 
821 		default:
822 			return -ENOIOCTLCMD;
823 	}
824 }
825 
826 static int ax_open_dev(struct net_device *dev)
827 {
828 	struct ax_disp *ax = netdev_priv(dev);
829 
830 	if (ax->tty == NULL)
831 		return -ENODEV;
832 
833 	return 0;
834 }
835 
836 
837 /* Initialize the driver.  Called by network startup. */
838 static int ax25_init(struct net_device *dev)
839 {
840 	struct ax_disp *ax = netdev_priv(dev);
841 
842 	static char ax25_bcast[AX25_ADDR_LEN] =
843 		{'Q'<<1,'S'<<1,'T'<<1,' '<<1,' '<<1,' '<<1,'0'<<1};
844 	static char ax25_test[AX25_ADDR_LEN] =
845 		{'L'<<1,'I'<<1,'N'<<1,'U'<<1,'X'<<1,' '<<1,'1'<<1};
846 
847 	if (ax == NULL)		/* Allocation failed ?? */
848 		return -ENODEV;
849 
850 	/* Set up the "AX25 Control Block". (And clear statistics) */
851 	memset(ax, 0, sizeof (struct ax_disp));
852 	ax->magic  = AX25_MAGIC;
853 	ax->dev	   = dev;
854 
855 	/* Finish setting up the DEVICE info. */
856 	dev->mtu             = AX_MTU;
857 	dev->hard_start_xmit = ax_xmit;
858 	dev->open            = ax_open_dev;
859 	dev->stop            = ax_close;
860 	dev->get_stats	     = ax_get_stats;
861 	dev->set_mac_address = ax_set_dev_mac_address;
862 	dev->hard_header_len = 0;
863 	dev->addr_len        = 0;
864 	dev->type            = ARPHRD_AX25;
865 	dev->tx_queue_len    = 10;
866 	dev->hard_header     = ax_header;
867 	dev->rebuild_header  = ax_rebuild_header;
868 
869 	memcpy(dev->broadcast, ax25_bcast, AX25_ADDR_LEN);
870 	memcpy(dev->dev_addr,  ax25_test,  AX25_ADDR_LEN);
871 
872 	/* New-style flags. */
873 	dev->flags      = IFF_BROADCAST | IFF_MULTICAST;
874 
875 	return 0;
876 }
877 
878 
879 /* ******************************************************************** */
880 /* *			Init MKISS driver			      * */
881 /* ******************************************************************** */
882 
883 static int __init mkiss_init_driver(void)
884 {
885 	int status;
886 
887 	printk(banner);
888 
889 	if (ax25_maxdev < 4)
890 	  ax25_maxdev = 4; /* Sanity */
891 
892 	if ((ax25_ctrls = kmalloc(sizeof(void *) * ax25_maxdev, GFP_KERNEL)) == NULL) {
893 		printk(KERN_ERR "mkiss: Can't allocate ax25_ctrls[] array!\n");
894 		return -ENOMEM;
895 	}
896 
897 	/* Clear the pointer array, we allocate devices when we need them */
898 	memset(ax25_ctrls, 0, sizeof(void*) * ax25_maxdev); /* Pointers */
899 
900 	/* Fill in our line protocol discipline, and register it */
901 	ax_ldisc.magic		= TTY_LDISC_MAGIC;
902 	ax_ldisc.name		= "mkiss";
903 	ax_ldisc.open		= ax25_open;
904 	ax_ldisc.close		= ax25_close;
905 	ax_ldisc.ioctl		= (int (*)(struct tty_struct *, struct file *,
906 					unsigned int, unsigned long))ax25_disp_ioctl;
907 	ax_ldisc.receive_buf	= ax25_receive_buf;
908 	ax_ldisc.receive_room	= ax25_receive_room;
909 	ax_ldisc.write_wakeup	= ax25_write_wakeup;
910 
911 	if ((status = tty_register_ldisc(N_AX25, &ax_ldisc)) != 0) {
912 		printk(KERN_ERR "mkiss: can't register line discipline (err = %d)\n", status);
913 		kfree(ax25_ctrls);
914 	}
915 	return status;
916 }
917 
918 static void __exit mkiss_exit_driver(void)
919 {
920 	int i;
921 
922 	for (i = 0; i < ax25_maxdev; i++) {
923 		if (ax25_ctrls[i]) {
924 			/*
925 			* VSV = if dev->start==0, then device
926 			* unregistered while close proc.
927 			*/
928 			if (netif_running(&ax25_ctrls[i]->dev))
929 				unregister_netdev(&ax25_ctrls[i]->dev);
930 			kfree(ax25_ctrls[i]);
931 		}
932 	}
933 
934 	kfree(ax25_ctrls);
935 	ax25_ctrls = NULL;
936 
937 	if ((i = tty_unregister_ldisc(N_AX25)))
938 		printk(KERN_ERR "mkiss: can't unregister line discipline (err = %d)\n", i);
939 }
940 
941 MODULE_AUTHOR("Hans Albas PE1AYX <hans@esrac.ele.tue.nl>");
942 MODULE_DESCRIPTION("KISS driver for AX.25 over TTYs");
943 MODULE_PARM(ax25_maxdev, "i");
944 MODULE_PARM_DESC(ax25_maxdev, "number of MKISS devices");
945 MODULE_LICENSE("GPL");
946 MODULE_ALIAS_LDISC(N_AX25);
947 module_init(mkiss_init_driver);
948 module_exit(mkiss_exit_driver);
949 
950