diff -ur linux-2.3.42/include/linux/ax25.h linux-2.3.42-bke/include/linux/ax25.h --- linux-2.3.42/include/linux/ax25.h Wed Feb 2 17:46:07 2000 +++ linux-2.3.42-bke/include/linux/ax25.h Wed Feb 2 18:58:55 2000 @@ -29,9 +29,11 @@ #define SIOCAX25NOUID (SIOCPROTOPRIVATE+3) #define SIOCAX25OPTRT (SIOCPROTOPRIVATE+7) #define SIOCAX25CTLCON (SIOCPROTOPRIVATE+8) -#define SIOCAX25GETINFO (SIOCPROTOPRIVATE+9) +#define SIOCAX25GETINFOOLD (SIOCPROTOPRIVATE+9) #define SIOCAX25ADDFWD (SIOCPROTOPRIVATE+10) #define SIOCAX25DELFWD (SIOCPROTOPRIVATE+11) +#define SIOCAX25DEVCTL (SIOCPROTOPRIVATE+12) +#define SIOCAX25GETINFO (SIOCPROTOPRIVATE+13) #define AX25_SET_RT_IPMODE 2 @@ -80,6 +82,17 @@ ax25_address digi_addr[AX25_MAX_DIGIS]; }; +/* this will go away. Please do not export to user land */ +struct ax25_info_struct_depreciated { + unsigned int n2, n2count; + unsigned int t1, t1timer; + unsigned int t2, t2timer; + unsigned int t3, t3timer; + unsigned int idle, idletimer; + unsigned int state; + unsigned int rcv_q, snd_q; +}; + struct ax25_info_struct { unsigned int n2, n2count; unsigned int t1, t1timer; @@ -88,6 +101,9 @@ unsigned int idle, idletimer; unsigned int state; unsigned int rcv_q, snd_q; + unsigned int vs, vr, va, vs_max; + unsigned int paclen; + unsigned int window; }; struct ax25_fwd_struct { Only in linux-2.3.42-bke/include/linux: ax25.h.old diff -ur linux-2.3.42/net/ax25/af_ax25.c linux-2.3.42-bke/net/ax25/af_ax25.c --- linux-2.3.42/net/ax25/af_ax25.c Wed Feb 2 17:40:47 2000 +++ linux-2.3.42-bke/net/ax25/af_ax25.c Wed Feb 2 19:09:25 2000 @@ -1574,8 +1574,10 @@ return -EPERM; return ax25_ctl_ioctl(cmd, (void *)arg); - case SIOCAX25GETINFO: { + case SIOCAX25GETINFO: + case SIOCAX25GETINFOOLD: { struct ax25_info_struct ax25_info; + ax25_info.t1 = sk->protinfo.ax25->t1 / HZ; ax25_info.t2 = sk->protinfo.ax25->t2 / HZ; ax25_info.t3 = sk->protinfo.ax25->t3 / HZ; @@ -1589,8 +1591,28 @@ ax25_info.state = sk->protinfo.ax25->state; ax25_info.rcv_q = atomic_read(&sk->rmem_alloc); ax25_info.snd_q = atomic_read(&sk->wmem_alloc); - if (copy_to_user((void *)arg, &ax25_info, sizeof(ax25_info))) - return -EFAULT; + ax25_info.vs = sk->protinfo.ax25->vs; + ax25_info.vr = sk->protinfo.ax25->vr; + ax25_info.va = sk->protinfo.ax25->va; + ax25_info.vs_max = sk->protinfo.ax25->vs; /* reserved */ + ax25_info.paclen = sk->protinfo.ax25->paclen; + ax25_info.window = sk->protinfo.ax25->window; + + /* old structure? */ + if (cmd == SIOCAX25GETINFOOLD) { + static int warned = 0; + if (!warned) { + printk(KERN_INFO "%s uses old SIOCAX25GETINFO\n", + current->comm); + warned=1; + } + + if (copy_to_user((void *)arg, &ax25_info, sizeof(struct ax25_info_struct_depreciated))) + return -EFAULT; + } else { + if (copy_to_user((void *)arg, &ax25_info, sizeof(struct ax25_info_struct))) + return -EINVAL; + } return 0; }