Subject: [PATCH] rose_loopback_timer VC number <= ROSE_DEFAULT_MAXVC

From: Bernard Pidoux <[email-masked]>
Date: Sat, 12 Dec 2009 09:56:02 +0100

[PATCH] rose_loopback_timer VC number <= ROSE_DEFAULT_MAXVC

On my 2.6.32 kernel compiled for generic x86_64 CPU
cat /proc/net/rose displayed a rose sockets abnormal lci value, i.e. greater than maximum
number of VCs per neighbour allowed.
This out of limits number prevents further comparisons of lci value during rose VC attributions.

Example :
[bernard]# cat /proc/net/rose
dest_addr  dest_call src_addr   src_call  dev   lci neigh st vs vr va   t  t1  t2  t3  hb    idle Snd-Q Rcv-Q inode
*          *         2080175520 F6BVP-1   rose0 000 00000  0  0  0  0   0 200 180 180   5   0/000     0     0 254746
2080175520 FPAD-0    2080175520 WP-0      rose0 FFE 00001  3  0  0  0   0 200 180 180   5   0/000     0     0 12916

Here are the default parameters definitions :
linux/include/net/rose.h:#define ROSE_DEFAULT_MAXVC 50 /* Maximum number of VCs per neighbour */
linux/net/rose/af_rose.c:int sysctl_rose_maximum_vcs = ROSE_DEFAULT_MAXVC;

With the following patch, rose_loopback_timer() attributes a VC number within limits.

--- a/net/rose/rose_loopback.c	2009-12-03 04:51:21.000000000 +0100
+++ b/net/rose/rose_loopback.c	2009-12-06 23:17:02.267741413 +0100
@@ -75,7 +75,7 @@
		lci_i     = ((skb->data[0] << 8) & 0xF00) + ((skb->data[1] << 0) & 0x0FF);
		frametype = skb->data[2];
		dest      = (rose_address *)(skb->data + 4);
-		lci_o     = 0xFFF - lci_i;
+		lci_o     = ROSE_DEFAULT_MAXVC + 1 - lci_i;

		skb_reset_transport_header(skb);

Bernard Pidoux