xref: /linux/drivers/net/hamradio/mkiss.c (revision 367b8112fe2ea5c39a7bb4d263dcdd9b612fae18)
1 /*
2  *  This program is free software; you can distribute it and/or modify it
3  *  under the terms of the GNU General Public License (Version 2) as
4  *  published by the Free Software Foundation.
5  *
6  *  This program is distributed in the hope it will be useful, but WITHOUT
7  *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
8  *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
9  *  for more details.
10  *
11  *  You should have received a copy of the GNU General Public License along
12  *  with this program; if not, write to the Free Software Foundation, Inc.,
13  *  59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
14  *
15  * Copyright (C) Hans Alblas PE1AYX <hans@esrac.ele.tue.nl>
16  * Copyright (C) 2004, 05 Ralf Baechle DL5RB <ralf@linux-mips.org>
17  * Copyright (C) 2004, 05 Thomas Osterried DL9SAU <thomas@x-berg.in-berlin.de>
18  */
19 #include <linux/module.h>
20 #include <asm/system.h>
21 #include <linux/bitops.h>
22 #include <asm/uaccess.h>
23 #include <linux/crc16.h>
24 #include <linux/string.h>
25 #include <linux/mm.h>
26 #include <linux/interrupt.h>
27 #include <linux/in.h>
28 #include <linux/inet.h>
29 #include <linux/tty.h>
30 #include <linux/errno.h>
31 #include <linux/netdevice.h>
32 #include <linux/major.h>
33 #include <linux/init.h>
34 #include <linux/rtnetlink.h>
35 #include <linux/etherdevice.h>
36 #include <linux/skbuff.h>
37 #include <linux/if_arp.h>
38 #include <linux/jiffies.h>
39 
40 #include <net/ax25.h>
41 
42 #define AX_MTU		236
43 
44 /* SLIP/KISS protocol characters. */
45 #define END             0300		/* indicates end of frame	*/
46 #define ESC             0333		/* indicates byte stuffing	*/
47 #define ESC_END         0334		/* ESC ESC_END means END 'data'	*/
48 #define ESC_ESC         0335		/* ESC ESC_ESC means ESC 'data'	*/
49 
50 struct mkiss {
51 	struct tty_struct	*tty;	/* ptr to TTY structure		*/
52 	struct net_device	*dev;	/* easy for intr handling	*/
53 
54 	/* These are pointers to the malloc()ed frame buffers. */
55 	spinlock_t		buflock;/* lock for rbuf and xbuf */
56 	unsigned char		*rbuff;	/* receiver buffer		*/
57 	int			rcount;	/* received chars counter       */
58 	unsigned char		*xbuff;	/* transmitter buffer		*/
59 	unsigned char		*xhead;	/* pointer to next byte to XMIT */
60 	int			xleft;	/* bytes left in XMIT queue     */
61 
62 	struct net_device_stats	stats;
63 
64 	/* Detailed SLIP statistics. */
65 	int		mtu;		/* Our mtu (to spot changes!)   */
66 	int		buffsize;	/* Max buffers sizes            */
67 
68 	unsigned long	flags;		/* Flag values/ mode etc	*/
69 					/* long req'd: used by set_bit --RR */
70 #define AXF_INUSE	0		/* Channel in use               */
71 #define AXF_ESCAPE	1               /* ESC received                 */
72 #define AXF_ERROR	2               /* Parity, etc. error           */
73 #define AXF_KEEPTEST	3		/* Keepalive test flag		*/
74 #define AXF_OUTWAIT	4		/* is outpacket was flag	*/
75 
76 	int		mode;
77         int		crcmode;	/* MW: for FlexNet, SMACK etc.  */
78 	int		crcauto;	/* CRC auto mode */
79 
80 #define CRC_MODE_NONE		0
81 #define CRC_MODE_FLEX		1
82 #define CRC_MODE_SMACK		2
83 #define CRC_MODE_FLEX_TEST	3
84 #define CRC_MODE_SMACK_TEST	4
85 
86 	atomic_t		refcnt;
87 	struct semaphore	dead_sem;
88 };
89 
90 /*---------------------------------------------------------------------------*/
91 
92 static const unsigned short crc_flex_table[] = {
93 	0x0f87, 0x1e0e, 0x2c95, 0x3d1c, 0x49a3, 0x582a, 0x6ab1, 0x7b38,
94 	0x83cf, 0x9246, 0xa0dd, 0xb154, 0xc5eb, 0xd462, 0xe6f9, 0xf770,
95 	0x1f06, 0x0e8f, 0x3c14, 0x2d9d, 0x5922, 0x48ab, 0x7a30, 0x6bb9,
96 	0x934e, 0x82c7, 0xb05c, 0xa1d5, 0xd56a, 0xc4e3, 0xf678, 0xe7f1,
97 	0x2e85, 0x3f0c, 0x0d97, 0x1c1e, 0x68a1, 0x7928, 0x4bb3, 0x5a3a,
98 	0xa2cd, 0xb344, 0x81df, 0x9056, 0xe4e9, 0xf560, 0xc7fb, 0xd672,
99 	0x3e04, 0x2f8d, 0x1d16, 0x0c9f, 0x7820, 0x69a9, 0x5b32, 0x4abb,
100 	0xb24c, 0xa3c5, 0x915e, 0x80d7, 0xf468, 0xe5e1, 0xd77a, 0xc6f3,
101 	0x4d83, 0x5c0a, 0x6e91, 0x7f18, 0x0ba7, 0x1a2e, 0x28b5, 0x393c,
102 	0xc1cb, 0xd042, 0xe2d9, 0xf350, 0x87ef, 0x9666, 0xa4fd, 0xb574,
103 	0x5d02, 0x4c8b, 0x7e10, 0x6f99, 0x1b26, 0x0aaf, 0x3834, 0x29bd,
104 	0xd14a, 0xc0c3, 0xf258, 0xe3d1, 0x976e, 0x86e7, 0xb47c, 0xa5f5,
105 	0x6c81, 0x7d08, 0x4f93, 0x5e1a, 0x2aa5, 0x3b2c, 0x09b7, 0x183e,
106 	0xe0c9, 0xf140, 0xc3db, 0xd252, 0xa6ed, 0xb764, 0x85ff, 0x9476,
107 	0x7c00, 0x6d89, 0x5f12, 0x4e9b, 0x3a24, 0x2bad, 0x1936, 0x08bf,
108 	0xf048, 0xe1c1, 0xd35a, 0xc2d3, 0xb66c, 0xa7e5, 0x957e, 0x84f7,
109 	0x8b8f, 0x9a06, 0xa89d, 0xb914, 0xcdab, 0xdc22, 0xeeb9, 0xff30,
110 	0x07c7, 0x164e, 0x24d5, 0x355c, 0x41e3, 0x506a, 0x62f1, 0x7378,
111 	0x9b0e, 0x8a87, 0xb81c, 0xa995, 0xdd2a, 0xcca3, 0xfe38, 0xefb1,
112 	0x1746, 0x06cf, 0x3454, 0x25dd, 0x5162, 0x40eb, 0x7270, 0x63f9,
113 	0xaa8d, 0xbb04, 0x899f, 0x9816, 0xeca9, 0xfd20, 0xcfbb, 0xde32,
114 	0x26c5, 0x374c, 0x05d7, 0x145e, 0x60e1, 0x7168, 0x43f3, 0x527a,
115 	0xba0c, 0xab85, 0x991e, 0x8897, 0xfc28, 0xeda1, 0xdf3a, 0xceb3,
116 	0x3644, 0x27cd, 0x1556, 0x04df, 0x7060, 0x61e9, 0x5372, 0x42fb,
117 	0xc98b, 0xd802, 0xea99, 0xfb10, 0x8faf, 0x9e26, 0xacbd, 0xbd34,
118 	0x45c3, 0x544a, 0x66d1, 0x7758, 0x03e7, 0x126e, 0x20f5, 0x317c,
119 	0xd90a, 0xc883, 0xfa18, 0xeb91, 0x9f2e, 0x8ea7, 0xbc3c, 0xadb5,
120 	0x5542, 0x44cb, 0x7650, 0x67d9, 0x1366, 0x02ef, 0x3074, 0x21fd,
121 	0xe889, 0xf900, 0xcb9b, 0xda12, 0xaead, 0xbf24, 0x8dbf, 0x9c36,
122 	0x64c1, 0x7548, 0x47d3, 0x565a, 0x22e5, 0x336c, 0x01f7, 0x107e,
123 	0xf808, 0xe981, 0xdb1a, 0xca93, 0xbe2c, 0xafa5, 0x9d3e, 0x8cb7,
124 	0x7440, 0x65c9, 0x5752, 0x46db, 0x3264, 0x23ed, 0x1176, 0x00ff
125 };
126 
127 static unsigned short calc_crc_flex(unsigned char *cp, int size)
128 {
129 	unsigned short crc = 0xffff;
130 
131 	while (size--)
132 		crc = (crc << 8) ^ crc_flex_table[((crc >> 8) ^ *cp++) & 0xff];
133 
134 	return crc;
135 }
136 
137 static int check_crc_flex(unsigned char *cp, int size)
138 {
139 	unsigned short crc = 0xffff;
140 
141 	if (size < 3)
142 		return -1;
143 
144 	while (size--)
145 		crc = (crc << 8) ^ crc_flex_table[((crc >> 8) ^ *cp++) & 0xff];
146 
147 	if ((crc & 0xffff) != 0x7070)
148 		return -1;
149 
150 	return 0;
151 }
152 
153 static int check_crc_16(unsigned char *cp, int size)
154 {
155 	unsigned short crc = 0x0000;
156 
157 	if (size < 3)
158 		return -1;
159 
160 	crc = crc16(0, cp, size);
161 
162 	if (crc != 0x0000)
163 		return -1;
164 
165 	return 0;
166 }
167 
168 /*
169  * Standard encapsulation
170  */
171 
172 static int kiss_esc(unsigned char *s, unsigned char *d, int len)
173 {
174 	unsigned char *ptr = d;
175 	unsigned char c;
176 
177 	/*
178 	 * Send an initial END character to flush out any data that may have
179 	 * accumulated in the receiver due to line noise.
180 	 */
181 
182 	*ptr++ = END;
183 
184 	while (len-- > 0) {
185 		switch (c = *s++) {
186 		case END:
187 			*ptr++ = ESC;
188 			*ptr++ = ESC_END;
189 			break;
190 		case ESC:
191 			*ptr++ = ESC;
192 			*ptr++ = ESC_ESC;
193 			break;
194 		default:
195 			*ptr++ = c;
196 			break;
197 		}
198 	}
199 
200 	*ptr++ = END;
201 
202 	return ptr - d;
203 }
204 
205 /*
206  * MW:
207  * OK its ugly, but tell me a better solution without copying the
208  * packet to a temporary buffer :-)
209  */
210 static int kiss_esc_crc(unsigned char *s, unsigned char *d, unsigned short crc,
211 	int len)
212 {
213 	unsigned char *ptr = d;
214 	unsigned char c=0;
215 
216 	*ptr++ = END;
217 	while (len > 0) {
218 		if (len > 2)
219 			c = *s++;
220 		else if (len > 1)
221 			c = crc >> 8;
222 		else if (len > 0)
223 			c = crc & 0xff;
224 
225 		len--;
226 
227 		switch (c) {
228 		case END:
229 			*ptr++ = ESC;
230 			*ptr++ = ESC_END;
231 			break;
232 		case ESC:
233 			*ptr++ = ESC;
234 			*ptr++ = ESC_ESC;
235 			break;
236 		default:
237 			*ptr++ = c;
238 			break;
239 		}
240 	}
241 	*ptr++ = END;
242 
243 	return ptr - d;
244 }
245 
246 /* Send one completely decapsulated AX.25 packet to the AX.25 layer. */
247 static void ax_bump(struct mkiss *ax)
248 {
249 	struct sk_buff *skb;
250 	int count;
251 
252 	spin_lock_bh(&ax->buflock);
253 	if (ax->rbuff[0] > 0x0f) {
254 		if (ax->rbuff[0] & 0x80) {
255 			if (check_crc_16(ax->rbuff, ax->rcount) < 0) {
256 				ax->stats.rx_errors++;
257 				spin_unlock_bh(&ax->buflock);
258 
259 				return;
260 			}
261 			if (ax->crcmode != CRC_MODE_SMACK && ax->crcauto) {
262 				printk(KERN_INFO
263 				       "mkiss: %s: Switchting to crc-smack\n",
264 				       ax->dev->name);
265 				ax->crcmode = CRC_MODE_SMACK;
266 			}
267 			ax->rcount -= 2;
268 			*ax->rbuff &= ~0x80;
269 		} else if (ax->rbuff[0] & 0x20)  {
270 			if (check_crc_flex(ax->rbuff, ax->rcount) < 0) {
271 				ax->stats.rx_errors++;
272 				spin_unlock_bh(&ax->buflock);
273 				return;
274 			}
275 			if (ax->crcmode != CRC_MODE_FLEX && ax->crcauto) {
276 				printk(KERN_INFO
277 				       "mkiss: %s: Switchting to crc-flexnet\n",
278 				       ax->dev->name);
279 				ax->crcmode = CRC_MODE_FLEX;
280 			}
281 			ax->rcount -= 2;
282 
283 			/*
284 			 * dl9sau bugfix: the trailling two bytes flexnet crc
285 			 * will not be passed to the kernel. thus we have to
286 			 * correct the kissparm signature, because it indicates
287 			 * a crc but there's none
288 			 */
289 			*ax->rbuff &= ~0x20;
290 		}
291  	}
292 
293 	count = ax->rcount;
294 
295 	if ((skb = dev_alloc_skb(count)) == NULL) {
296 		printk(KERN_ERR "mkiss: %s: memory squeeze, dropping packet.\n",
297 		       ax->dev->name);
298 		ax->stats.rx_dropped++;
299 		spin_unlock_bh(&ax->buflock);
300 		return;
301 	}
302 
303 	memcpy(skb_put(skb,count), ax->rbuff, count);
304 	skb->protocol = ax25_type_trans(skb, ax->dev);
305 	netif_rx(skb);
306 	ax->dev->last_rx = jiffies;
307 	ax->stats.rx_packets++;
308 	ax->stats.rx_bytes += count;
309 	spin_unlock_bh(&ax->buflock);
310 }
311 
312 static void kiss_unesc(struct mkiss *ax, unsigned char s)
313 {
314 	switch (s) {
315 	case END:
316 		/* drop keeptest bit = VSV */
317 		if (test_bit(AXF_KEEPTEST, &ax->flags))
318 			clear_bit(AXF_KEEPTEST, &ax->flags);
319 
320 		if (!test_and_clear_bit(AXF_ERROR, &ax->flags) && (ax->rcount > 2))
321 			ax_bump(ax);
322 
323 		clear_bit(AXF_ESCAPE, &ax->flags);
324 		ax->rcount = 0;
325 		return;
326 
327 	case ESC:
328 		set_bit(AXF_ESCAPE, &ax->flags);
329 		return;
330 	case ESC_ESC:
331 		if (test_and_clear_bit(AXF_ESCAPE, &ax->flags))
332 			s = ESC;
333 		break;
334 	case ESC_END:
335 		if (test_and_clear_bit(AXF_ESCAPE, &ax->flags))
336 			s = END;
337 		break;
338 	}
339 
340 	spin_lock_bh(&ax->buflock);
341 	if (!test_bit(AXF_ERROR, &ax->flags)) {
342 		if (ax->rcount < ax->buffsize) {
343 			ax->rbuff[ax->rcount++] = s;
344 			spin_unlock_bh(&ax->buflock);
345 			return;
346 		}
347 
348 		ax->stats.rx_over_errors++;
349 		set_bit(AXF_ERROR, &ax->flags);
350 	}
351 	spin_unlock_bh(&ax->buflock);
352 }
353 
354 static int ax_set_mac_address(struct net_device *dev, void *addr)
355 {
356 	struct sockaddr_ax25 *sa = addr;
357 
358 	netif_tx_lock_bh(dev);
359 	netif_addr_lock(dev);
360 	memcpy(dev->dev_addr, &sa->sax25_call, AX25_ADDR_LEN);
361 	netif_addr_unlock(dev);
362 	netif_tx_unlock_bh(dev);
363 
364 	return 0;
365 }
366 
367 /*---------------------------------------------------------------------------*/
368 
369 static void ax_changedmtu(struct mkiss *ax)
370 {
371 	struct net_device *dev = ax->dev;
372 	unsigned char *xbuff, *rbuff, *oxbuff, *orbuff;
373 	int len;
374 
375 	len = dev->mtu * 2;
376 
377 	/*
378 	 * allow for arrival of larger UDP packets, even if we say not to
379 	 * also fixes a bug in which SunOS sends 512-byte packets even with
380 	 * an MSS of 128
381 	 */
382 	if (len < 576 * 2)
383 		len = 576 * 2;
384 
385 	xbuff = kmalloc(len + 4, GFP_ATOMIC);
386 	rbuff = kmalloc(len + 4, GFP_ATOMIC);
387 
388 	if (xbuff == NULL || rbuff == NULL)  {
389 		printk(KERN_ERR "mkiss: %s: unable to grow ax25 buffers, "
390 		       "MTU change cancelled.\n",
391 		       ax->dev->name);
392 		dev->mtu = ax->mtu;
393 		kfree(xbuff);
394 		kfree(rbuff);
395 		return;
396 	}
397 
398 	spin_lock_bh(&ax->buflock);
399 
400 	oxbuff    = ax->xbuff;
401 	ax->xbuff = xbuff;
402 	orbuff    = ax->rbuff;
403 	ax->rbuff = rbuff;
404 
405 	if (ax->xleft) {
406 		if (ax->xleft <= len) {
407 			memcpy(ax->xbuff, ax->xhead, ax->xleft);
408 		} else  {
409 			ax->xleft = 0;
410 			ax->stats.tx_dropped++;
411 		}
412 	}
413 
414 	ax->xhead = ax->xbuff;
415 
416 	if (ax->rcount) {
417 		if (ax->rcount <= len) {
418 			memcpy(ax->rbuff, orbuff, ax->rcount);
419 		} else  {
420 			ax->rcount = 0;
421 			ax->stats.rx_over_errors++;
422 			set_bit(AXF_ERROR, &ax->flags);
423 		}
424 	}
425 
426 	ax->mtu      = dev->mtu + 73;
427 	ax->buffsize = len;
428 
429 	spin_unlock_bh(&ax->buflock);
430 
431 	kfree(oxbuff);
432 	kfree(orbuff);
433 }
434 
435 /* Encapsulate one AX.25 packet and stuff into a TTY queue. */
436 static void ax_encaps(struct net_device *dev, unsigned char *icp, int len)
437 {
438 	struct mkiss *ax = netdev_priv(dev);
439 	unsigned char *p;
440 	int actual, count;
441 
442 	if (ax->mtu != ax->dev->mtu + 73)	/* Someone has been ifconfigging */
443 		ax_changedmtu(ax);
444 
445 	if (len > ax->mtu) {		/* Sigh, shouldn't occur BUT ... */
446 		len = ax->mtu;
447 		printk(KERN_ERR "mkiss: %s: truncating oversized transmit packet!\n", ax->dev->name);
448 		ax->stats.tx_dropped++;
449 		netif_start_queue(dev);
450 		return;
451 	}
452 
453 	p = icp;
454 
455 	spin_lock_bh(&ax->buflock);
456 	if ((*p & 0x0f) != 0) {
457 		/* Configuration Command (kissparms(1).
458 		 * Protocol spec says: never append CRC.
459 		 * This fixes a very old bug in the linux
460 		 * kiss driver. -- dl9sau */
461 		switch (*p & 0xff) {
462 		case 0x85:
463 			/* command from userspace especially for us,
464 			 * not for delivery to the tnc */
465 			if (len > 1) {
466 				int cmd = (p[1] & 0xff);
467 				switch(cmd) {
468 				case 3:
469 				  ax->crcmode = CRC_MODE_SMACK;
470 				  break;
471 				case 2:
472 				  ax->crcmode = CRC_MODE_FLEX;
473 				  break;
474 				case 1:
475 				  ax->crcmode = CRC_MODE_NONE;
476 				  break;
477 				case 0:
478 				default:
479 				  ax->crcmode = CRC_MODE_SMACK_TEST;
480 				  cmd = 0;
481 				}
482 				ax->crcauto = (cmd ? 0 : 1);
483 				printk(KERN_INFO "mkiss: %s: crc mode %s %d\n", ax->dev->name, (len) ? "set to" : "is", cmd);
484 			}
485 			spin_unlock_bh(&ax->buflock);
486 			netif_start_queue(dev);
487 
488 			return;
489 		default:
490 			count = kiss_esc(p, (unsigned char *)ax->xbuff, len);
491 		}
492 	} else {
493 		unsigned short crc;
494 		switch (ax->crcmode) {
495 		case CRC_MODE_SMACK_TEST:
496 			ax->crcmode  = CRC_MODE_FLEX_TEST;
497 			printk(KERN_INFO "mkiss: %s: Trying crc-smack\n", ax->dev->name);
498 			// fall through
499 		case CRC_MODE_SMACK:
500 			*p |= 0x80;
501 			crc = swab16(crc16(0, p, len));
502 			count = kiss_esc_crc(p, (unsigned char *)ax->xbuff, crc, len+2);
503 			break;
504 		case CRC_MODE_FLEX_TEST:
505 			ax->crcmode = CRC_MODE_NONE;
506 			printk(KERN_INFO "mkiss: %s: Trying crc-flexnet\n", ax->dev->name);
507 			// fall through
508 		case CRC_MODE_FLEX:
509 			*p |= 0x20;
510 			crc = calc_crc_flex(p, len);
511 			count = kiss_esc_crc(p, (unsigned char *)ax->xbuff, crc, len+2);
512 			break;
513 
514 		default:
515 			count = kiss_esc(p, (unsigned char *)ax->xbuff, len);
516 		}
517   	}
518 	spin_unlock_bh(&ax->buflock);
519 
520 	set_bit(TTY_DO_WRITE_WAKEUP, &ax->tty->flags);
521 	actual = ax->tty->ops->write(ax->tty, ax->xbuff, count);
522 	ax->stats.tx_packets++;
523 	ax->stats.tx_bytes += actual;
524 
525 	ax->dev->trans_start = jiffies;
526 	ax->xleft = count - actual;
527 	ax->xhead = ax->xbuff + actual;
528 }
529 
530 /* Encapsulate an AX.25 packet and kick it into a TTY queue. */
531 static int ax_xmit(struct sk_buff *skb, struct net_device *dev)
532 {
533 	struct mkiss *ax = netdev_priv(dev);
534 
535 	if (!netif_running(dev))  {
536 		printk(KERN_ERR "mkiss: %s: xmit call when iface is down\n", dev->name);
537 		return 1;
538 	}
539 
540 	if (netif_queue_stopped(dev)) {
541 		/*
542 		 * May be we must check transmitter timeout here ?
543 		 *      14 Oct 1994 Dmitry Gorodchanin.
544 		 */
545 		if (time_before(jiffies, dev->trans_start + 20 * HZ)) {
546 			/* 20 sec timeout not reached */
547 			return 1;
548 		}
549 
550 		printk(KERN_ERR "mkiss: %s: transmit timed out, %s?\n", dev->name,
551 		       (tty_chars_in_buffer(ax->tty) || ax->xleft) ?
552 		       "bad line quality" : "driver error");
553 
554 		ax->xleft = 0;
555 		clear_bit(TTY_DO_WRITE_WAKEUP, &ax->tty->flags);
556 		netif_start_queue(dev);
557 	}
558 
559 	/* We were not busy, so we are now... :-) */
560 	if (skb != NULL) {
561 		netif_stop_queue(dev);
562 		ax_encaps(dev, skb->data, skb->len);
563 		kfree_skb(skb);
564 	}
565 
566 	return 0;
567 }
568 
569 static int ax_open_dev(struct net_device *dev)
570 {
571 	struct mkiss *ax = netdev_priv(dev);
572 
573 	if (ax->tty == NULL)
574 		return -ENODEV;
575 
576 	return 0;
577 }
578 
579 #if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
580 
581 /* Return the frame type ID */
582 static int ax_header(struct sk_buff *skb, struct net_device *dev,
583 		     unsigned short type, const void *daddr,
584 		     const void *saddr, unsigned len)
585 {
586 #ifdef CONFIG_INET
587 	if (type != ETH_P_AX25)
588 		return ax25_hard_header(skb, dev, type, daddr, saddr, len);
589 #endif
590 	return 0;
591 }
592 
593 
594 static int ax_rebuild_header(struct sk_buff *skb)
595 {
596 #ifdef CONFIG_INET
597 	return ax25_rebuild_header(skb);
598 #else
599 	return 0;
600 #endif
601 }
602 
603 #endif	/* CONFIG_{AX25,AX25_MODULE} */
604 
605 /* Open the low-level part of the AX25 channel. Easy! */
606 static int ax_open(struct net_device *dev)
607 {
608 	struct mkiss *ax = netdev_priv(dev);
609 	unsigned long len;
610 
611 	if (ax->tty == NULL)
612 		return -ENODEV;
613 
614 	/*
615 	 * Allocate the frame buffers:
616 	 *
617 	 * rbuff	Receive buffer.
618 	 * xbuff	Transmit buffer.
619 	 */
620 	len = dev->mtu * 2;
621 
622 	/*
623 	 * allow for arrival of larger UDP packets, even if we say not to
624 	 * also fixes a bug in which SunOS sends 512-byte packets even with
625 	 * an MSS of 128
626 	 */
627 	if (len < 576 * 2)
628 		len = 576 * 2;
629 
630 	if ((ax->rbuff = kmalloc(len + 4, GFP_KERNEL)) == NULL)
631 		goto norbuff;
632 
633 	if ((ax->xbuff = kmalloc(len + 4, GFP_KERNEL)) == NULL)
634 		goto noxbuff;
635 
636 	ax->mtu	     = dev->mtu + 73;
637 	ax->buffsize = len;
638 	ax->rcount   = 0;
639 	ax->xleft    = 0;
640 
641 	ax->flags   &= (1 << AXF_INUSE);      /* Clear ESCAPE & ERROR flags */
642 
643 	spin_lock_init(&ax->buflock);
644 
645 	return 0;
646 
647 noxbuff:
648 	kfree(ax->rbuff);
649 
650 norbuff:
651 	return -ENOMEM;
652 }
653 
654 
655 /* Close the low-level part of the AX25 channel. Easy! */
656 static int ax_close(struct net_device *dev)
657 {
658 	struct mkiss *ax = netdev_priv(dev);
659 
660 	if (ax->tty)
661 		clear_bit(TTY_DO_WRITE_WAKEUP, &ax->tty->flags);
662 
663 	netif_stop_queue(dev);
664 
665 	return 0;
666 }
667 
668 static struct net_device_stats *ax_get_stats(struct net_device *dev)
669 {
670 	struct mkiss *ax = netdev_priv(dev);
671 
672 	return &ax->stats;
673 }
674 
675 static const struct header_ops ax_header_ops = {
676 	.create    = ax_header,
677 	.rebuild   = ax_rebuild_header,
678 };
679 
680 static void ax_setup(struct net_device *dev)
681 {
682 	/* Finish setting up the DEVICE info. */
683 	dev->mtu             = AX_MTU;
684 	dev->hard_start_xmit = ax_xmit;
685 	dev->open            = ax_open_dev;
686 	dev->stop            = ax_close;
687 	dev->get_stats	     = ax_get_stats;
688 	dev->set_mac_address = ax_set_mac_address;
689 	dev->hard_header_len = 0;
690 	dev->addr_len        = 0;
691 	dev->type            = ARPHRD_AX25;
692 	dev->tx_queue_len    = 10;
693 	dev->header_ops      = &ax_header_ops;
694 
695 
696 	memcpy(dev->broadcast, &ax25_bcast, AX25_ADDR_LEN);
697 	memcpy(dev->dev_addr,  &ax25_defaddr,  AX25_ADDR_LEN);
698 
699 	dev->flags      = IFF_BROADCAST | IFF_MULTICAST;
700 }
701 
702 /*
703  * We have a potential race on dereferencing tty->disc_data, because the tty
704  * layer provides no locking at all - thus one cpu could be running
705  * sixpack_receive_buf while another calls sixpack_close, which zeroes
706  * tty->disc_data and frees the memory that sixpack_receive_buf is using.  The
707  * best way to fix this is to use a rwlock in the tty struct, but for now we
708  * use a single global rwlock for all ttys in ppp line discipline.
709  */
710 static DEFINE_RWLOCK(disc_data_lock);
711 
712 static struct mkiss *mkiss_get(struct tty_struct *tty)
713 {
714 	struct mkiss *ax;
715 
716 	read_lock(&disc_data_lock);
717 	ax = tty->disc_data;
718 	if (ax)
719 		atomic_inc(&ax->refcnt);
720 	read_unlock(&disc_data_lock);
721 
722 	return ax;
723 }
724 
725 static void mkiss_put(struct mkiss *ax)
726 {
727 	if (atomic_dec_and_test(&ax->refcnt))
728 		up(&ax->dead_sem);
729 }
730 
731 static int crc_force = 0;	/* Can be overridden with insmod */
732 
733 static int mkiss_open(struct tty_struct *tty)
734 {
735 	struct net_device *dev;
736 	struct mkiss *ax;
737 	int err;
738 
739 	if (!capable(CAP_NET_ADMIN))
740 		return -EPERM;
741 	if (tty->ops->write == NULL)
742 		return -EOPNOTSUPP;
743 
744 	dev = alloc_netdev(sizeof(struct mkiss), "ax%d", ax_setup);
745 	if (!dev) {
746 		err = -ENOMEM;
747 		goto out;
748 	}
749 
750 	ax = netdev_priv(dev);
751 	ax->dev = dev;
752 
753 	spin_lock_init(&ax->buflock);
754 	atomic_set(&ax->refcnt, 1);
755 	init_MUTEX_LOCKED(&ax->dead_sem);
756 
757 	ax->tty = tty;
758 	tty->disc_data = ax;
759 	tty->receive_room = 65535;
760 
761 	tty_driver_flush_buffer(tty);
762 
763 	/* Restore default settings */
764 	dev->type = ARPHRD_AX25;
765 
766 	/* Perform the low-level AX25 initialization. */
767 	if ((err = ax_open(ax->dev))) {
768 		goto out_free_netdev;
769 	}
770 
771 	if (register_netdev(dev))
772 		goto out_free_buffers;
773 
774 	/* after register_netdev() - because else printk smashes the kernel */
775 	switch (crc_force) {
776 	case 3:
777 		ax->crcmode  = CRC_MODE_SMACK;
778 		printk(KERN_INFO "mkiss: %s: crc mode smack forced.\n",
779 		       ax->dev->name);
780 		break;
781 	case 2:
782 		ax->crcmode  = CRC_MODE_FLEX;
783 		printk(KERN_INFO "mkiss: %s: crc mode flexnet forced.\n",
784 		       ax->dev->name);
785 		break;
786 	case 1:
787 		ax->crcmode  = CRC_MODE_NONE;
788 		printk(KERN_INFO "mkiss: %s: crc mode disabled.\n",
789 		       ax->dev->name);
790 		break;
791 	case 0:
792 		/* fall through */
793 	default:
794 		crc_force = 0;
795 		printk(KERN_INFO "mkiss: %s: crc mode is auto.\n",
796 		       ax->dev->name);
797 		ax->crcmode  = CRC_MODE_SMACK_TEST;
798 	}
799 	ax->crcauto = (crc_force ? 0 : 1);
800 
801 	netif_start_queue(dev);
802 
803 	/* Done.  We have linked the TTY line to a channel. */
804 	return 0;
805 
806 out_free_buffers:
807 	kfree(ax->rbuff);
808 	kfree(ax->xbuff);
809 
810 out_free_netdev:
811 	free_netdev(dev);
812 
813 out:
814 	return err;
815 }
816 
817 static void mkiss_close(struct tty_struct *tty)
818 {
819 	struct mkiss *ax;
820 
821 	write_lock(&disc_data_lock);
822 	ax = tty->disc_data;
823 	tty->disc_data = NULL;
824 	write_unlock(&disc_data_lock);
825 
826 	if (!ax)
827 		return;
828 
829 	/*
830 	 * We have now ensured that nobody can start using ap from now on, but
831 	 * we have to wait for all existing users to finish.
832 	 */
833 	if (!atomic_dec_and_test(&ax->refcnt))
834 		down(&ax->dead_sem);
835 
836 	unregister_netdev(ax->dev);
837 
838 	/* Free all AX25 frame buffers. */
839 	kfree(ax->rbuff);
840 	kfree(ax->xbuff);
841 
842 	ax->tty = NULL;
843 }
844 
845 /* Perform I/O control on an active ax25 channel. */
846 static int mkiss_ioctl(struct tty_struct *tty, struct file *file,
847 	unsigned int cmd, unsigned long arg)
848 {
849 	struct mkiss *ax = mkiss_get(tty);
850 	struct net_device *dev = ax->dev;
851 	unsigned int tmp, err;
852 
853 	/* First make sure we're connected. */
854 	if (ax == NULL)
855 		return -ENXIO;
856 
857 	switch (cmd) {
858  	case SIOCGIFNAME:
859 		err = copy_to_user((void __user *) arg, ax->dev->name,
860 		                   strlen(ax->dev->name) + 1) ? -EFAULT : 0;
861 		break;
862 
863 	case SIOCGIFENCAP:
864 		err = put_user(4, (int __user *) arg);
865 		break;
866 
867 	case SIOCSIFENCAP:
868 		if (get_user(tmp, (int __user *) arg)) {
869 			err = -EFAULT;
870 			break;
871 		}
872 
873 		ax->mode = tmp;
874 		dev->addr_len        = AX25_ADDR_LEN;
875 		dev->hard_header_len = AX25_KISS_HEADER_LEN +
876 		                       AX25_MAX_HEADER_LEN + 3;
877 		dev->type            = ARPHRD_AX25;
878 
879 		err = 0;
880 		break;
881 
882 	case SIOCSIFHWADDR: {
883 		char addr[AX25_ADDR_LEN];
884 
885 		if (copy_from_user(&addr,
886 		                   (void __user *) arg, AX25_ADDR_LEN)) {
887 			err = -EFAULT;
888 			break;
889 		}
890 
891 		netif_tx_lock_bh(dev);
892 		memcpy(dev->dev_addr, addr, AX25_ADDR_LEN);
893 		netif_tx_unlock_bh(dev);
894 
895 		err = 0;
896 		break;
897 	}
898 	default:
899 		err = -ENOIOCTLCMD;
900 	}
901 
902 	mkiss_put(ax);
903 
904 	return err;
905 }
906 
907 /*
908  * Handle the 'receiver data ready' interrupt.
909  * This function is called by the 'tty_io' module in the kernel when
910  * a block of data has been received, which can now be decapsulated
911  * and sent on to the AX.25 layer for further processing.
912  */
913 static void mkiss_receive_buf(struct tty_struct *tty, const unsigned char *cp,
914 	char *fp, int count)
915 {
916 	struct mkiss *ax = mkiss_get(tty);
917 
918 	if (!ax)
919 		return;
920 
921 	/*
922 	 * Argh! mtu change time! - costs us the packet part received
923 	 * at the change
924 	 */
925 	if (ax->mtu != ax->dev->mtu + 73)
926 		ax_changedmtu(ax);
927 
928 	/* Read the characters out of the buffer */
929 	while (count--) {
930 		if (fp != NULL && *fp++) {
931 			if (!test_and_set_bit(AXF_ERROR, &ax->flags))
932 				ax->stats.rx_errors++;
933 			cp++;
934 			continue;
935 		}
936 
937 		kiss_unesc(ax, *cp++);
938 	}
939 
940 	mkiss_put(ax);
941 	tty_unthrottle(tty);
942 }
943 
944 /*
945  * Called by the driver when there's room for more data.  If we have
946  * more packets to send, we send them here.
947  */
948 static void mkiss_write_wakeup(struct tty_struct *tty)
949 {
950 	struct mkiss *ax = mkiss_get(tty);
951 	int actual;
952 
953 	if (!ax)
954 		return;
955 
956 	if (ax->xleft <= 0)  {
957 		/* Now serial buffer is almost free & we can start
958 		 * transmission of another packet
959 		 */
960 		clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
961 
962 		netif_wake_queue(ax->dev);
963 		goto out;
964 	}
965 
966 	actual = tty->ops->write(tty, ax->xhead, ax->xleft);
967 	ax->xleft -= actual;
968 	ax->xhead += actual;
969 
970 out:
971 	mkiss_put(ax);
972 }
973 
974 static struct tty_ldisc_ops ax_ldisc = {
975 	.owner		= THIS_MODULE,
976 	.magic		= TTY_LDISC_MAGIC,
977 	.name		= "mkiss",
978 	.open		= mkiss_open,
979 	.close		= mkiss_close,
980 	.ioctl		= mkiss_ioctl,
981 	.receive_buf	= mkiss_receive_buf,
982 	.write_wakeup	= mkiss_write_wakeup
983 };
984 
985 static char banner[] __initdata = KERN_INFO \
986 	"mkiss: AX.25 Multikiss, Hans Albas PE1AYX\n";
987 static char msg_regfail[] __initdata = KERN_ERR \
988 	"mkiss: can't register line discipline (err = %d)\n";
989 
990 static int __init mkiss_init_driver(void)
991 {
992 	int status;
993 
994 	printk(banner);
995 
996 	if ((status = tty_register_ldisc(N_AX25, &ax_ldisc)) != 0)
997 		printk(msg_regfail);
998 
999 	return status;
1000 }
1001 
1002 static const char msg_unregfail[] __exitdata = KERN_ERR \
1003 	"mkiss: can't unregister line discipline (err = %d)\n";
1004 
1005 static void __exit mkiss_exit_driver(void)
1006 {
1007 	int ret;
1008 
1009 	if ((ret = tty_unregister_ldisc(N_AX25)))
1010 		printk(msg_unregfail, ret);
1011 }
1012 
1013 MODULE_AUTHOR("Ralf Baechle DL5RB <ralf@linux-mips.org>");
1014 MODULE_DESCRIPTION("KISS driver for AX.25 over TTYs");
1015 module_param(crc_force, int, 0);
1016 MODULE_PARM_DESC(crc_force, "crc [0 = auto | 1 = none | 2 = flexnet | 3 = smack]");
1017 MODULE_LICENSE("GPL");
1018 MODULE_ALIAS_LDISC(N_AX25);
1019 
1020 module_init(mkiss_init_driver);
1021 module_exit(mkiss_exit_driver);
1022