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.
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
11 * You should have received a copy of the GNU General Public License along
12 * with this program; if not, see <http://www.gnu.org/licenses/>.
14 * Copyright (C) Hans Alblas PE1AYX <hans@esrac.ele.tue.nl>
15 * Copyright (C) 2004, 05 Ralf Baechle DL5RB <ralf@linux-mips.org>
16 * Copyright (C) 2004, 05 Thomas Osterried DL9SAU <thomas@x-berg.in-berlin.de>
18 #include <linux/module.h>
19 #include <linux/bitops.h>
20 #include <linux/uaccess.h>
21 #include <linux/crc16.h>
22 #include <linux/string.h>
24 #include <linux/interrupt.h>
26 #include <linux/inet.h>
27 #include <linux/slab.h>
28 #include <linux/tty.h>
29 #include <linux/errno.h>
30 #include <linux/netdevice.h>
31 #include <linux/major.h>
32 #include <linux/init.h>
33 #include <linux/rtnetlink.h>
34 #include <linux/etherdevice.h>
35 #include <linux/skbuff.h>
36 #include <linux/if_arp.h>
37 #include <linux/jiffies.h>
43 /* SLIP/KISS protocol characters. */
44 #define END 0300 /* indicates end of frame */
45 #define ESC 0333 /* indicates byte stuffing */
46 #define ESC_END 0334 /* ESC ESC_END means END 'data' */
47 #define ESC_ESC 0335 /* ESC ESC_ESC means ESC 'data' */
50 struct tty_struct
*tty
; /* ptr to TTY structure */
51 struct net_device
*dev
; /* easy for intr handling */
53 /* These are pointers to the malloc()ed frame buffers. */
54 spinlock_t buflock
;/* lock for rbuf and xbuf */
55 unsigned char *rbuff
; /* receiver buffer */
56 int rcount
; /* received chars counter */
57 unsigned char *xbuff
; /* transmitter buffer */
58 unsigned char *xhead
; /* pointer to next byte to XMIT */
59 int xleft
; /* bytes left in XMIT queue */
61 /* Detailed SLIP statistics. */
62 int mtu
; /* Our mtu (to spot changes!) */
63 int buffsize
; /* Max buffers sizes */
65 unsigned long flags
; /* Flag values/ mode etc */
66 /* long req'd: used by set_bit --RR */
67 #define AXF_INUSE 0 /* Channel in use */
68 #define AXF_ESCAPE 1 /* ESC received */
69 #define AXF_ERROR 2 /* Parity, etc. error */
70 #define AXF_KEEPTEST 3 /* Keepalive test flag */
71 #define AXF_OUTWAIT 4 /* is outpacket was flag */
74 int crcmode
; /* MW: for FlexNet, SMACK etc. */
75 int crcauto
; /* CRC auto mode */
77 #define CRC_MODE_NONE 0
78 #define CRC_MODE_FLEX 1
79 #define CRC_MODE_SMACK 2
80 #define CRC_MODE_FLEX_TEST 3
81 #define CRC_MODE_SMACK_TEST 4
84 struct completion dead
;
87 /*---------------------------------------------------------------------------*/
89 static const unsigned short crc_flex_table
[] = {
90 0x0f87, 0x1e0e, 0x2c95, 0x3d1c, 0x49a3, 0x582a, 0x6ab1, 0x7b38,
91 0x83cf, 0x9246, 0xa0dd, 0xb154, 0xc5eb, 0xd462, 0xe6f9, 0xf770,
92 0x1f06, 0x0e8f, 0x3c14, 0x2d9d, 0x5922, 0x48ab, 0x7a30, 0x6bb9,
93 0x934e, 0x82c7, 0xb05c, 0xa1d5, 0xd56a, 0xc4e3, 0xf678, 0xe7f1,
94 0x2e85, 0x3f0c, 0x0d97, 0x1c1e, 0x68a1, 0x7928, 0x4bb3, 0x5a3a,
95 0xa2cd, 0xb344, 0x81df, 0x9056, 0xe4e9, 0xf560, 0xc7fb, 0xd672,
96 0x3e04, 0x2f8d, 0x1d16, 0x0c9f, 0x7820, 0x69a9, 0x5b32, 0x4abb,
97 0xb24c, 0xa3c5, 0x915e, 0x80d7, 0xf468, 0xe5e1, 0xd77a, 0xc6f3,
98 0x4d83, 0x5c0a, 0x6e91, 0x7f18, 0x0ba7, 0x1a2e, 0x28b5, 0x393c,
99 0xc1cb, 0xd042, 0xe2d9, 0xf350, 0x87ef, 0x9666, 0xa4fd, 0xb574,
100 0x5d02, 0x4c8b, 0x7e10, 0x6f99, 0x1b26, 0x0aaf, 0x3834, 0x29bd,
101 0xd14a, 0xc0c3, 0xf258, 0xe3d1, 0x976e, 0x86e7, 0xb47c, 0xa5f5,
102 0x6c81, 0x7d08, 0x4f93, 0x5e1a, 0x2aa5, 0x3b2c, 0x09b7, 0x183e,
103 0xe0c9, 0xf140, 0xc3db, 0xd252, 0xa6ed, 0xb764, 0x85ff, 0x9476,
104 0x7c00, 0x6d89, 0x5f12, 0x4e9b, 0x3a24, 0x2bad, 0x1936, 0x08bf,
105 0xf048, 0xe1c1, 0xd35a, 0xc2d3, 0xb66c, 0xa7e5, 0x957e, 0x84f7,
106 0x8b8f, 0x9a06, 0xa89d, 0xb914, 0xcdab, 0xdc22, 0xeeb9, 0xff30,
107 0x07c7, 0x164e, 0x24d5, 0x355c, 0x41e3, 0x506a, 0x62f1, 0x7378,
108 0x9b0e, 0x8a87, 0xb81c, 0xa995, 0xdd2a, 0xcca3, 0xfe38, 0xefb1,
109 0x1746, 0x06cf, 0x3454, 0x25dd, 0x5162, 0x40eb, 0x7270, 0x63f9,
110 0xaa8d, 0xbb04, 0x899f, 0x9816, 0xeca9, 0xfd20, 0xcfbb, 0xde32,
111 0x26c5, 0x374c, 0x05d7, 0x145e, 0x60e1, 0x7168, 0x43f3, 0x527a,
112 0xba0c, 0xab85, 0x991e, 0x8897, 0xfc28, 0xeda1, 0xdf3a, 0xceb3,
113 0x3644, 0x27cd, 0x1556, 0x04df, 0x7060, 0x61e9, 0x5372, 0x42fb,
114 0xc98b, 0xd802, 0xea99, 0xfb10, 0x8faf, 0x9e26, 0xacbd, 0xbd34,
115 0x45c3, 0x544a, 0x66d1, 0x7758, 0x03e7, 0x126e, 0x20f5, 0x317c,
116 0xd90a, 0xc883, 0xfa18, 0xeb91, 0x9f2e, 0x8ea7, 0xbc3c, 0xadb5,
117 0x5542, 0x44cb, 0x7650, 0x67d9, 0x1366, 0x02ef, 0x3074, 0x21fd,
118 0xe889, 0xf900, 0xcb9b, 0xda12, 0xaead, 0xbf24, 0x8dbf, 0x9c36,
119 0x64c1, 0x7548, 0x47d3, 0x565a, 0x22e5, 0x336c, 0x01f7, 0x107e,
120 0xf808, 0xe981, 0xdb1a, 0xca93, 0xbe2c, 0xafa5, 0x9d3e, 0x8cb7,
121 0x7440, 0x65c9, 0x5752, 0x46db, 0x3264, 0x23ed, 0x1176, 0x00ff
124 static unsigned short calc_crc_flex(unsigned char *cp
, int size
)
126 unsigned short crc
= 0xffff;
129 crc
= (crc
<< 8) ^ crc_flex_table
[((crc
>> 8) ^ *cp
++) & 0xff];
134 static int check_crc_flex(unsigned char *cp
, int size
)
136 unsigned short crc
= 0xffff;
142 crc
= (crc
<< 8) ^ crc_flex_table
[((crc
>> 8) ^ *cp
++) & 0xff];
144 if ((crc
& 0xffff) != 0x7070)
150 static int check_crc_16(unsigned char *cp
, int size
)
152 unsigned short crc
= 0x0000;
157 crc
= crc16(0, cp
, size
);
166 * Standard encapsulation
169 static int kiss_esc(unsigned char *s
, unsigned char *d
, int len
)
171 unsigned char *ptr
= d
;
175 * Send an initial END character to flush out any data that may have
176 * accumulated in the receiver due to line noise.
204 * OK its ugly, but tell me a better solution without copying the
205 * packet to a temporary buffer :-)
207 static int kiss_esc_crc(unsigned char *s
, unsigned char *d
, unsigned short crc
,
210 unsigned char *ptr
= d
;
243 /* Send one completely decapsulated AX.25 packet to the AX.25 layer. */
244 static void ax_bump(struct mkiss
*ax
)
249 spin_lock_bh(&ax
->buflock
);
250 if (ax
->rbuff
[0] > 0x0f) {
251 if (ax
->rbuff
[0] & 0x80) {
252 if (check_crc_16(ax
->rbuff
, ax
->rcount
) < 0) {
253 ax
->dev
->stats
.rx_errors
++;
254 spin_unlock_bh(&ax
->buflock
);
258 if (ax
->crcmode
!= CRC_MODE_SMACK
&& ax
->crcauto
) {
260 "mkiss: %s: Switching to crc-smack\n",
262 ax
->crcmode
= CRC_MODE_SMACK
;
266 } else if (ax
->rbuff
[0] & 0x20) {
267 if (check_crc_flex(ax
->rbuff
, ax
->rcount
) < 0) {
268 ax
->dev
->stats
.rx_errors
++;
269 spin_unlock_bh(&ax
->buflock
);
272 if (ax
->crcmode
!= CRC_MODE_FLEX
&& ax
->crcauto
) {
274 "mkiss: %s: Switching to crc-flexnet\n",
276 ax
->crcmode
= CRC_MODE_FLEX
;
281 * dl9sau bugfix: the trailling two bytes flexnet crc
282 * will not be passed to the kernel. thus we have to
283 * correct the kissparm signature, because it indicates
284 * a crc but there's none
292 if ((skb
= dev_alloc_skb(count
)) == NULL
) {
293 printk(KERN_ERR
"mkiss: %s: memory squeeze, dropping packet.\n",
295 ax
->dev
->stats
.rx_dropped
++;
296 spin_unlock_bh(&ax
->buflock
);
300 skb_put_data(skb
, ax
->rbuff
, count
);
301 skb
->protocol
= ax25_type_trans(skb
, ax
->dev
);
303 ax
->dev
->stats
.rx_packets
++;
304 ax
->dev
->stats
.rx_bytes
+= count
;
305 spin_unlock_bh(&ax
->buflock
);
308 static void kiss_unesc(struct mkiss
*ax
, unsigned char s
)
312 /* drop keeptest bit = VSV */
313 if (test_bit(AXF_KEEPTEST
, &ax
->flags
))
314 clear_bit(AXF_KEEPTEST
, &ax
->flags
);
316 if (!test_and_clear_bit(AXF_ERROR
, &ax
->flags
) && (ax
->rcount
> 2))
319 clear_bit(AXF_ESCAPE
, &ax
->flags
);
324 set_bit(AXF_ESCAPE
, &ax
->flags
);
327 if (test_and_clear_bit(AXF_ESCAPE
, &ax
->flags
))
331 if (test_and_clear_bit(AXF_ESCAPE
, &ax
->flags
))
336 spin_lock_bh(&ax
->buflock
);
337 if (!test_bit(AXF_ERROR
, &ax
->flags
)) {
338 if (ax
->rcount
< ax
->buffsize
) {
339 ax
->rbuff
[ax
->rcount
++] = s
;
340 spin_unlock_bh(&ax
->buflock
);
344 ax
->dev
->stats
.rx_over_errors
++;
345 set_bit(AXF_ERROR
, &ax
->flags
);
347 spin_unlock_bh(&ax
->buflock
);
350 static int ax_set_mac_address(struct net_device
*dev
, void *addr
)
352 struct sockaddr_ax25
*sa
= addr
;
354 netif_tx_lock_bh(dev
);
355 netif_addr_lock(dev
);
356 memcpy(dev
->dev_addr
, &sa
->sax25_call
, AX25_ADDR_LEN
);
357 netif_addr_unlock(dev
);
358 netif_tx_unlock_bh(dev
);
363 /*---------------------------------------------------------------------------*/
365 static void ax_changedmtu(struct mkiss
*ax
)
367 struct net_device
*dev
= ax
->dev
;
368 unsigned char *xbuff
, *rbuff
, *oxbuff
, *orbuff
;
374 * allow for arrival of larger UDP packets, even if we say not to
375 * also fixes a bug in which SunOS sends 512-byte packets even with
381 xbuff
= kmalloc(len
+ 4, GFP_ATOMIC
);
382 rbuff
= kmalloc(len
+ 4, GFP_ATOMIC
);
384 if (xbuff
== NULL
|| rbuff
== NULL
) {
385 printk(KERN_ERR
"mkiss: %s: unable to grow ax25 buffers, "
386 "MTU change cancelled.\n",
394 spin_lock_bh(&ax
->buflock
);
402 if (ax
->xleft
<= len
) {
403 memcpy(ax
->xbuff
, ax
->xhead
, ax
->xleft
);
406 dev
->stats
.tx_dropped
++;
410 ax
->xhead
= ax
->xbuff
;
413 if (ax
->rcount
<= len
) {
414 memcpy(ax
->rbuff
, orbuff
, ax
->rcount
);
417 dev
->stats
.rx_over_errors
++;
418 set_bit(AXF_ERROR
, &ax
->flags
);
422 ax
->mtu
= dev
->mtu
+ 73;
425 spin_unlock_bh(&ax
->buflock
);
431 /* Encapsulate one AX.25 packet and stuff into a TTY queue. */
432 static void ax_encaps(struct net_device
*dev
, unsigned char *icp
, int len
)
434 struct mkiss
*ax
= netdev_priv(dev
);
438 if (ax
->mtu
!= ax
->dev
->mtu
+ 73) /* Someone has been ifconfigging */
441 if (len
> ax
->mtu
) { /* Sigh, shouldn't occur BUT ... */
442 printk(KERN_ERR
"mkiss: %s: truncating oversized transmit packet!\n", ax
->dev
->name
);
443 dev
->stats
.tx_dropped
++;
444 netif_start_queue(dev
);
450 spin_lock_bh(&ax
->buflock
);
451 if ((*p
& 0x0f) != 0) {
452 /* Configuration Command (kissparms(1).
453 * Protocol spec says: never append CRC.
454 * This fixes a very old bug in the linux
455 * kiss driver. -- dl9sau */
458 /* command from userspace especially for us,
459 * not for delivery to the tnc */
461 int cmd
= (p
[1] & 0xff);
464 ax
->crcmode
= CRC_MODE_SMACK
;
467 ax
->crcmode
= CRC_MODE_FLEX
;
470 ax
->crcmode
= CRC_MODE_NONE
;
474 ax
->crcmode
= CRC_MODE_SMACK_TEST
;
477 ax
->crcauto
= (cmd
? 0 : 1);
478 printk(KERN_INFO
"mkiss: %s: crc mode set to %d\n",
481 spin_unlock_bh(&ax
->buflock
);
482 netif_start_queue(dev
);
486 count
= kiss_esc(p
, ax
->xbuff
, len
);
490 switch (ax
->crcmode
) {
491 case CRC_MODE_SMACK_TEST
:
492 ax
->crcmode
= CRC_MODE_FLEX_TEST
;
493 printk(KERN_INFO
"mkiss: %s: Trying crc-smack\n", ax
->dev
->name
);
497 crc
= swab16(crc16(0, p
, len
));
498 count
= kiss_esc_crc(p
, ax
->xbuff
, crc
, len
+2);
500 case CRC_MODE_FLEX_TEST
:
501 ax
->crcmode
= CRC_MODE_NONE
;
502 printk(KERN_INFO
"mkiss: %s: Trying crc-flexnet\n", ax
->dev
->name
);
506 crc
= calc_crc_flex(p
, len
);
507 count
= kiss_esc_crc(p
, ax
->xbuff
, crc
, len
+2);
511 count
= kiss_esc(p
, ax
->xbuff
, len
);
514 spin_unlock_bh(&ax
->buflock
);
516 set_bit(TTY_DO_WRITE_WAKEUP
, &ax
->tty
->flags
);
517 actual
= ax
->tty
->ops
->write(ax
->tty
, ax
->xbuff
, count
);
518 dev
->stats
.tx_packets
++;
519 dev
->stats
.tx_bytes
+= actual
;
521 netif_trans_update(ax
->dev
);
522 ax
->xleft
= count
- actual
;
523 ax
->xhead
= ax
->xbuff
+ actual
;
526 /* Encapsulate an AX.25 packet and kick it into a TTY queue. */
527 static netdev_tx_t
ax_xmit(struct sk_buff
*skb
, struct net_device
*dev
)
529 struct mkiss
*ax
= netdev_priv(dev
);
531 if (skb
->protocol
== htons(ETH_P_IP
))
532 return ax25_ip_xmit(skb
);
534 if (!netif_running(dev
)) {
535 printk(KERN_ERR
"mkiss: %s: xmit call when iface is down\n", dev
->name
);
536 return NETDEV_TX_BUSY
;
539 if (netif_queue_stopped(dev
)) {
541 * May be we must check transmitter timeout here ?
542 * 14 Oct 1994 Dmitry Gorodchanin.
544 if (time_before(jiffies
, dev_trans_start(dev
) + 20 * HZ
)) {
545 /* 20 sec timeout not reached */
546 return NETDEV_TX_BUSY
;
549 printk(KERN_ERR
"mkiss: %s: transmit timed out, %s?\n", dev
->name
,
550 (tty_chars_in_buffer(ax
->tty
) || ax
->xleft
) ?
551 "bad line quality" : "driver error");
554 clear_bit(TTY_DO_WRITE_WAKEUP
, &ax
->tty
->flags
);
555 netif_start_queue(dev
);
558 /* We were not busy, so we are now... :-) */
559 netif_stop_queue(dev
);
560 ax_encaps(dev
, skb
->data
, skb
->len
);
566 static int ax_open_dev(struct net_device
*dev
)
568 struct mkiss
*ax
= netdev_priv(dev
);
576 /* Open the low-level part of the AX25 channel. Easy! */
577 static int ax_open(struct net_device
*dev
)
579 struct mkiss
*ax
= netdev_priv(dev
);
586 * Allocate the frame buffers:
588 * rbuff Receive buffer.
589 * xbuff Transmit buffer.
594 * allow for arrival of larger UDP packets, even if we say not to
595 * also fixes a bug in which SunOS sends 512-byte packets even with
601 if ((ax
->rbuff
= kmalloc(len
+ 4, GFP_KERNEL
)) == NULL
)
604 if ((ax
->xbuff
= kmalloc(len
+ 4, GFP_KERNEL
)) == NULL
)
607 ax
->mtu
= dev
->mtu
+ 73;
612 ax
->flags
&= (1 << AXF_INUSE
); /* Clear ESCAPE & ERROR flags */
614 spin_lock_init(&ax
->buflock
);
626 /* Close the low-level part of the AX25 channel. Easy! */
627 static int ax_close(struct net_device
*dev
)
629 struct mkiss
*ax
= netdev_priv(dev
);
632 clear_bit(TTY_DO_WRITE_WAKEUP
, &ax
->tty
->flags
);
634 netif_stop_queue(dev
);
639 static const struct net_device_ops ax_netdev_ops
= {
640 .ndo_open
= ax_open_dev
,
641 .ndo_stop
= ax_close
,
642 .ndo_start_xmit
= ax_xmit
,
643 .ndo_set_mac_address
= ax_set_mac_address
,
646 static void ax_setup(struct net_device
*dev
)
648 /* Finish setting up the DEVICE info. */
650 dev
->hard_header_len
= AX25_MAX_HEADER_LEN
;
651 dev
->addr_len
= AX25_ADDR_LEN
;
652 dev
->type
= ARPHRD_AX25
;
653 dev
->tx_queue_len
= 10;
654 dev
->header_ops
= &ax25_header_ops
;
655 dev
->netdev_ops
= &ax_netdev_ops
;
658 memcpy(dev
->broadcast
, &ax25_bcast
, AX25_ADDR_LEN
);
659 memcpy(dev
->dev_addr
, &ax25_defaddr
, AX25_ADDR_LEN
);
661 dev
->flags
= IFF_BROADCAST
| IFF_MULTICAST
;
665 * We have a potential race on dereferencing tty->disc_data, because the tty
666 * layer provides no locking at all - thus one cpu could be running
667 * sixpack_receive_buf while another calls sixpack_close, which zeroes
668 * tty->disc_data and frees the memory that sixpack_receive_buf is using. The
669 * best way to fix this is to use a rwlock in the tty struct, but for now we
670 * use a single global rwlock for all ttys in ppp line discipline.
672 static DEFINE_RWLOCK(disc_data_lock
);
674 static struct mkiss
*mkiss_get(struct tty_struct
*tty
)
678 read_lock(&disc_data_lock
);
681 atomic_inc(&ax
->refcnt
);
682 read_unlock(&disc_data_lock
);
687 static void mkiss_put(struct mkiss
*ax
)
689 if (atomic_dec_and_test(&ax
->refcnt
))
693 static int crc_force
= 0; /* Can be overridden with insmod */
695 static int mkiss_open(struct tty_struct
*tty
)
697 struct net_device
*dev
;
701 if (!capable(CAP_NET_ADMIN
))
703 if (tty
->ops
->write
== NULL
)
706 dev
= alloc_netdev(sizeof(struct mkiss
), "ax%d", NET_NAME_UNKNOWN
,
713 ax
= netdev_priv(dev
);
716 spin_lock_init(&ax
->buflock
);
717 atomic_set(&ax
->refcnt
, 1);
718 init_completion(&ax
->dead
);
722 tty
->receive_room
= 65535;
724 tty_driver_flush_buffer(tty
);
726 /* Restore default settings */
727 dev
->type
= ARPHRD_AX25
;
729 /* Perform the low-level AX25 initialization. */
730 err
= ax_open(ax
->dev
);
732 goto out_free_netdev
;
734 err
= register_netdev(dev
);
736 goto out_free_buffers
;
738 /* after register_netdev() - because else printk smashes the kernel */
741 ax
->crcmode
= CRC_MODE_SMACK
;
742 printk(KERN_INFO
"mkiss: %s: crc mode smack forced.\n",
746 ax
->crcmode
= CRC_MODE_FLEX
;
747 printk(KERN_INFO
"mkiss: %s: crc mode flexnet forced.\n",
751 ax
->crcmode
= CRC_MODE_NONE
;
752 printk(KERN_INFO
"mkiss: %s: crc mode disabled.\n",
759 printk(KERN_INFO
"mkiss: %s: crc mode is auto.\n",
761 ax
->crcmode
= CRC_MODE_SMACK_TEST
;
763 ax
->crcauto
= (crc_force
? 0 : 1);
765 netif_start_queue(dev
);
767 /* Done. We have linked the TTY line to a channel. */
781 static void mkiss_close(struct tty_struct
*tty
)
785 write_lock_bh(&disc_data_lock
);
787 tty
->disc_data
= NULL
;
788 write_unlock_bh(&disc_data_lock
);
794 * We have now ensured that nobody can start using ap from now on, but
795 * we have to wait for all existing users to finish.
797 if (!atomic_dec_and_test(&ax
->refcnt
))
798 wait_for_completion(&ax
->dead
);
800 * Halt the transmit queue so that a new transmit cannot scribble
803 netif_stop_queue(ax
->dev
);
805 /* Free all AX25 frame buffers. */
811 unregister_netdev(ax
->dev
);
814 /* Perform I/O control on an active ax25 channel. */
815 static int mkiss_ioctl(struct tty_struct
*tty
, struct file
*file
,
816 unsigned int cmd
, unsigned long arg
)
818 struct mkiss
*ax
= mkiss_get(tty
);
819 struct net_device
*dev
;
820 unsigned int tmp
, err
;
822 /* First make sure we're connected. */
829 err
= copy_to_user((void __user
*) arg
, ax
->dev
->name
,
830 strlen(ax
->dev
->name
) + 1) ? -EFAULT
: 0;
834 err
= put_user(4, (int __user
*) arg
);
838 if (get_user(tmp
, (int __user
*) arg
)) {
844 dev
->addr_len
= AX25_ADDR_LEN
;
845 dev
->hard_header_len
= AX25_KISS_HEADER_LEN
+
846 AX25_MAX_HEADER_LEN
+ 3;
847 dev
->type
= ARPHRD_AX25
;
852 case SIOCSIFHWADDR
: {
853 char addr
[AX25_ADDR_LEN
];
855 if (copy_from_user(&addr
,
856 (void __user
*) arg
, AX25_ADDR_LEN
)) {
861 netif_tx_lock_bh(dev
);
862 memcpy(dev
->dev_addr
, addr
, AX25_ADDR_LEN
);
863 netif_tx_unlock_bh(dev
);
878 * Handle the 'receiver data ready' interrupt.
879 * This function is called by the 'tty_io' module in the kernel when
880 * a block of data has been received, which can now be decapsulated
881 * and sent on to the AX.25 layer for further processing.
883 static void mkiss_receive_buf(struct tty_struct
*tty
, const unsigned char *cp
,
886 struct mkiss
*ax
= mkiss_get(tty
);
892 * Argh! mtu change time! - costs us the packet part received
895 if (ax
->mtu
!= ax
->dev
->mtu
+ 73)
898 /* Read the characters out of the buffer */
900 if (fp
!= NULL
&& *fp
++) {
901 if (!test_and_set_bit(AXF_ERROR
, &ax
->flags
))
902 ax
->dev
->stats
.rx_errors
++;
907 kiss_unesc(ax
, *cp
++);
915 * Called by the driver when there's room for more data. If we have
916 * more packets to send, we send them here.
918 static void mkiss_write_wakeup(struct tty_struct
*tty
)
920 struct mkiss
*ax
= mkiss_get(tty
);
926 if (ax
->xleft
<= 0) {
927 /* Now serial buffer is almost free & we can start
928 * transmission of another packet
930 clear_bit(TTY_DO_WRITE_WAKEUP
, &tty
->flags
);
932 netif_wake_queue(ax
->dev
);
936 actual
= tty
->ops
->write(tty
, ax
->xhead
, ax
->xleft
);
944 static struct tty_ldisc_ops ax_ldisc
= {
945 .owner
= THIS_MODULE
,
946 .magic
= TTY_LDISC_MAGIC
,
949 .close
= mkiss_close
,
950 .ioctl
= mkiss_ioctl
,
951 .receive_buf
= mkiss_receive_buf
,
952 .write_wakeup
= mkiss_write_wakeup
955 static const char banner
[] __initconst
= KERN_INFO \
956 "mkiss: AX.25 Multikiss, Hans Albas PE1AYX\n";
957 static const char msg_regfail
[] __initconst
= KERN_ERR \
958 "mkiss: can't register line discipline (err = %d)\n";
960 static int __init
mkiss_init_driver(void)
966 status
= tty_register_ldisc(N_AX25
, &ax_ldisc
);
968 printk(msg_regfail
, status
);
973 static const char msg_unregfail
[] = KERN_ERR \
974 "mkiss: can't unregister line discipline (err = %d)\n";
976 static void __exit
mkiss_exit_driver(void)
980 if ((ret
= tty_unregister_ldisc(N_AX25
)))
981 printk(msg_unregfail
, ret
);
984 MODULE_AUTHOR("Ralf Baechle DL5RB <ralf@linux-mips.org>");
985 MODULE_DESCRIPTION("KISS driver for AX.25 over TTYs");
986 module_param(crc_force
, int, 0);
987 MODULE_PARM_DESC(crc_force
, "crc [0 = auto | 1 = none | 2 = flexnet | 3 = smack]");
988 MODULE_LICENSE("GPL");
989 MODULE_ALIAS_LDISC(N_AX25
);
991 module_init(mkiss_init_driver
);
992 module_exit(mkiss_exit_driver
);