unsigned long timers in ax25_info_struct_new
Subsystems (2)
PATCH 1/1 unsigned long timers in ax25_info_struct_new
A new structure is proposed with unsigned long types for AX25 timers, in order to be compliant with kernel 2.6. These timers are listed in /proc/net/ax25/
AX25 info can be copied into user space via ioctl call using a new argument SIOCAX25GETINFONEW.
A KERN_INFO warning is printed if ioctl is called using deprecated structure and argument.
Signed-off-by Bernard Pidoux <[email protected]>
--- include/linux/ax25.h | 16 +++++++++++++++- net/ax25/af_ax25.c | 16 +++++++++++----- 2 files changed, 26 insertions(+), 6 deletions(-)
include/linux/ax25.h +15 -1
@@ -36,6 +36,7 @@#define SIOCAX25DELFWD (SIOCPROTOPRIVATE+11)#define SIOCAX25DEVCTL (SIOCPROTOPRIVATE+12)#define SIOCAX25GETINFO (SIOCPROTOPRIVATE+13) +#define SIOCAX25GETINFONEW (SIOCPROTOPRIVATE+14)#define AX25_SET_RT_IPMODE 2
@@ -94,7 +95,7 @@ struct ax25_info_struct_deprecated {unsigned int state;unsigned int rcv_q, snd_q; }; - +/* deprecated */ struct ax25_info_struct {unsigned int n2, n2count;unsigned int t1, t1timer;
@@ -108,6 +109,19 @@ struct ax25_info_struct {unsigned int window; }; +struct ax25_info_struct_new { +unsigned int n2, n2count; +unsigned long t1, t1timer; +unsigned long t2, t2timer; +unsigned long t3, t3timer; +unsigned long 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 {ax25_address port_from;ax25_address port_to;
net/ax25/af_ax25.c +11 -5
@@ -1769,9 +1769,10 @@ static int ax25_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)break ;case SIOCAX25GETINFO : +case SIOCAX25GETINFONEW :case SIOCAX25GETINFOOLD : {ax25_cb *ax25 =ax25_sk (sk); -struct ax25_info_struct ax25_info; +struct ax25_info_struct_new ax25_info; ax25_info.t1 = ax25->t1 /HZ ; ax25_info.t2 = ax25->t2 /HZ ;
@@ -1793,11 +1794,11 @@ static int ax25_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) ax25_info.paclen = ax25->paclen; ax25_info.window = ax25->window; -/* old structure? */ -if (cmd ==SIOCAX25GETINFOOLD ) { +/* old structure ? */ +if (cmd !=SIOCAX25GETINFONEW ) {static int warned =0 ;if (!warned) { -printk (KERN_INFO "%s uses old SIOCAX25GETINFO\n" , +printk (KERN_INFO "%s uses deprecated SIOCAX25GETINFOOLD or SIOCAX25GETINFO\n" , current->comm); warned=1 ; }
@@ -1806,8 +1807,13 @@ static int ax25_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) res = -EFAULT ;break ; } - }else { +if (copy_to_user (argp, &ax25_info,sizeof (struct ax25_info_struct ))) { + res = -EFAULT ; +break ; + } + }else { +if (copy_to_user (argp, &ax25_info,sizeof (struct ax25_info_struct_new ))) { res = -EINVAL ;break ; }
Signature · 1 line
1.5.5