You can import this changeset into BK by piping this whole message to:
'| bk receive [path to repository]' or apply the patch as usual.

===================================================================


ChangeSet@1.1422.1.2, 2003-11-12 01:05:28-02:00, acme@conectiva.com.br
  o LLC: add sysctl support for the LLC timeouts
  
  Also make the HZ multiply only when changing the socket timeout values,
  not every time we set the actual kernel timers.


 include/linux/sysctl.h   |   26 ++++++++
 include/net/llc.h        |    7 ++
 net/llc/Makefile         |    1 
 net/llc/af_llc.c         |   53 +++++++++++++-----
 net/llc/llc_c_ac.c       |   12 ++--
 net/llc/llc_conn.c       |   13 +++-
 net/llc/llc_conn.h       |   10 +--
 net/llc/llc_station.c    |   11 ++-
 net/llc/sysctl_net_llc.c |  136 +++++++++++++++++++++++++++++++++++++++++++++++
 9 files changed, 236 insertions(+), 33 deletions(-)


diff -Nru a/include/linux/sysctl.h b/include/linux/sysctl.h
--- a/include/linux/sysctl.h	Sat Nov 15 17:02:27 2003
+++ b/include/linux/sysctl.h	Sat Nov 15 17:02:27 2003
@@ -176,7 +176,8 @@
 	NET_TR=14,
 	NET_DECNET=15,
 	NET_ECONET=16,
-	NET_SCTP=17, 
+	NET_SCTP=17,
+	NET_LLC=18,
 };
 
 /* /proc/sys/kernel/random */
@@ -452,6 +453,29 @@
 	NET_IPX_FORWARDING=2
 };
 
+/* /proc/sys/net/llc */
+enum {
+	NET_LLC2=1,
+	NET_LLC_STATION=2,
+};
+
+/* /proc/sys/net/llc/llc2 */
+enum {
+	NET_LLC2_TIMEOUT=1,
+};
+
+/* /proc/sys/net/llc/station */
+enum {
+	NET_LLC_STATION_ACK_TIMEOUT=1,
+};
+
+/* /proc/sys/net/llc/llc2/timeout */
+enum {
+	NET_LLC2_ACK_TIMEOUT=1,
+	NET_LLC2_P_TIMEOUT=2,
+	NET_LLC2_REJ_TIMEOUT=3,
+	NET_LLC2_BUSY_TIMEOUT=4,
+};
 
 /* /proc/sys/net/appletalk */
 enum {
diff -Nru a/include/net/llc.h b/include/net/llc.h
--- a/include/net/llc.h	Sat Nov 15 17:02:27 2003
+++ b/include/net/llc.h	Sat Nov 15 17:02:27 2003
@@ -104,4 +104,11 @@
 #define llc_proc_init()	(0)
 #define llc_proc_exit()	do { } while(0)
 #endif /* CONFIG_PROC_FS */
+#ifdef CONFIG_SYSCTL
+extern int llc_sysctl_init(void);
+extern void llc_sysctl_exit(void);
+#else
+#define llc_sysctl_init() (0)
+#define llc_sysctl_exit() do { } while(0)
+#endif /* CONFIG_SYSCTL */
 #endif /* LLC_H */
diff -Nru a/net/llc/Makefile b/net/llc/Makefile
--- a/net/llc/Makefile	Sat Nov 15 17:02:27 2003
+++ b/net/llc/Makefile	Sat Nov 15 17:02:27 2003
@@ -22,3 +22,4 @@
 	  llc_sap.o llc_s_ac.o llc_s_ev.o llc_s_st.o af_llc.o llc_station.o
 
 llc2-$(CONFIG_PROC_FS) += llc_proc.o
+llc2-$(CONFIG_SYSCTL)  += sysctl_net_llc.o
diff -Nru a/net/llc/af_llc.c b/net/llc/af_llc.c
--- a/net/llc/af_llc.c	Sat Nov 15 17:02:27 2003
+++ b/net/llc/af_llc.c	Sat Nov 15 17:02:27 2003
@@ -867,22 +867,22 @@
 	case LLC_OPT_ACK_TMR_EXP:
 		if (opt > LLC_OPT_MAX_ACK_TMR_EXP)
 			goto out;
-		llc->ack_timer.expire = opt;
+		llc->ack_timer.expire = opt * HZ;
 		break;
 	case LLC_OPT_P_TMR_EXP:
 		if (opt > LLC_OPT_MAX_P_TMR_EXP)
 			goto out;
-		llc->pf_cycle_timer.expire = opt;
+		llc->pf_cycle_timer.expire = opt * HZ;
 		break;
 	case LLC_OPT_REJ_TMR_EXP:
 		if (opt > LLC_OPT_MAX_REJ_TMR_EXP)
 			goto out;
-		llc->rej_sent_timer.expire = opt;
+		llc->rej_sent_timer.expire = opt * HZ;
 		break;
 	case LLC_OPT_BUSY_TMR_EXP:
 		if (opt > LLC_OPT_MAX_BUSY_TMR_EXP)
 			goto out;
-		llc->busy_state_timer.expire = opt;
+		llc->busy_state_timer.expire = opt * HZ;
 		break;
 	case LLC_OPT_TX_WIN:
 		if (opt > LLC_OPT_MAX_WIN)
@@ -932,17 +932,17 @@
 		goto out;
 	switch (optname) {
 	case LLC_OPT_RETRY:
-		val = llc->n2;				break;
+		val = llc->n2;					break;
 	case LLC_OPT_SIZE:
-		val = llc->n1;				break;
+		val = llc->n1;					break;
 	case LLC_OPT_ACK_TMR_EXP:
-		val = llc->ack_timer.expire;		break;
+		val = llc->ack_timer.expire / HZ;		break;
 	case LLC_OPT_P_TMR_EXP:
-		val = llc->pf_cycle_timer.expire;	break;
+		val = llc->pf_cycle_timer.expire / HZ;		break;
 	case LLC_OPT_REJ_TMR_EXP:
-		val = llc->rej_sent_timer.expire;	break;
+		val = llc->rej_sent_timer.expire / HZ;		break;
 	case LLC_OPT_BUSY_TMR_EXP:
-		val = llc->busy_state_timer.expire;	break;
+		val = llc->busy_state_timer.expire / HZ;	break;
 	case LLC_OPT_TX_WIN:
 		val = llc->k;				break;
 	case LLC_OPT_RX_WIN:
@@ -989,6 +989,13 @@
 extern void llc_sap_handler(struct llc_sap *sap, struct sk_buff *skb);
 extern void llc_conn_handler(struct llc_sap *sap, struct sk_buff *skb);
 
+static char llc_proc_err_msg[] __initdata =
+        KERN_CRIT "LLC: Unable to register the proc_fs entries\n";
+static char llc_sysctl_err_msg[] __initdata =
+        KERN_CRIT "LLC: Unable to register the sysctl entries\n";
+static char llc_sock_err_msg[] __initdata =
+        KERN_CRIT "LLC: Unable to register the network family\n";
+
 static int __init llc2_init(void)
 {
 	int rc;
@@ -997,12 +1004,29 @@
 	llc_station_init();
 	llc_ui_sap_last_autoport = LLC_SAP_DYN_START;
 	rc = llc_proc_init();
-	if (!rc) {
-		sock_register(&llc_ui_family_ops);
-		llc_add_pack(LLC_DEST_SAP, llc_sap_handler);
-		llc_add_pack(LLC_DEST_CONN, llc_conn_handler);
+	if (rc) {
+		printk(llc_proc_err_msg);
+		goto out;
+	}
+	rc = llc_sysctl_init();
+	if (rc) {
+		printk(llc_sysctl_err_msg);
+		goto out_proc;
 	}
+	rc = sock_register(&llc_ui_family_ops);
+	if (rc) {
+		printk(llc_sock_err_msg);
+		goto out_sysctl;
+	}
+	llc_add_pack(LLC_DEST_SAP, llc_sap_handler);
+	llc_add_pack(LLC_DEST_CONN, llc_conn_handler);
+out:
 	return rc;
+out_sysctl:
+	llc_sysctl_exit();
+out_proc:
+	llc_proc_exit();
+	goto out;
 }
 
 static void __exit llc2_exit(void)
@@ -1012,6 +1036,7 @@
 	llc_remove_pack(LLC_DEST_CONN);
 	sock_unregister(PF_LLC);
 	llc_proc_exit();
+	llc_sysctl_exit();
 }
 
 module_init(llc2_init);
diff -Nru a/net/llc/llc_c_ac.c b/net/llc/llc_c_ac.c
--- a/net/llc/llc_c_ac.c	Sat Nov 15 17:02:27 2003
+++ b/net/llc/llc_c_ac.c	Sat Nov 15 17:02:27 2003
@@ -658,7 +658,7 @@
 	if (!llc->remote_busy_flag) {
 		llc->remote_busy_flag = 1;
 		mod_timer(&llc->busy_state_timer.timer,
-			 jiffies + llc->busy_state_timer.expire * HZ);
+			 jiffies + llc->busy_state_timer.expire);
 	}
 	return 0;
 }
@@ -937,7 +937,7 @@
 
 	llc_conn_set_p_flag(sk, 1);
 	mod_timer(&llc->pf_cycle_timer.timer,
-		  jiffies + llc->pf_cycle_timer.expire * HZ);
+		  jiffies + llc->pf_cycle_timer.expire);
 	return 0;
 }
 
@@ -1213,7 +1213,7 @@
 {
 	struct llc_opt *llc = llc_sk(sk);
 
-	mod_timer(&llc->ack_timer.timer, jiffies + llc->ack_timer.expire * HZ);
+	mod_timer(&llc->ack_timer.timer, jiffies + llc->ack_timer.expire);
 	return 0;
 }
 
@@ -1222,7 +1222,7 @@
 	struct llc_opt *llc = llc_sk(sk);
 
 	mod_timer(&llc->rej_sent_timer.timer,
-		  jiffies + llc->rej_sent_timer.expire * HZ);
+		  jiffies + llc->rej_sent_timer.expire);
 	return 0;
 }
 
@@ -1233,7 +1233,7 @@
 
 	if (!timer_pending(&llc->ack_timer.timer))
 		mod_timer(&llc->ack_timer.timer,
-			  jiffies + llc->ack_timer.expire * HZ);
+			  jiffies + llc->ack_timer.expire);
 	return 0;
 }
 
@@ -1281,7 +1281,7 @@
 		}
 		if (unacked)
 			mod_timer(&llc->ack_timer.timer,
-				  jiffies + llc->ack_timer.expire * HZ);
+				  jiffies + llc->ack_timer.expire);
 	} else if (llc->failed_data_req) {
 		u8 f_bit;
 
diff -Nru a/net/llc/llc_conn.c b/net/llc/llc_conn.c
--- a/net/llc/llc_conn.c	Sat Nov 15 17:02:27 2003
+++ b/net/llc/llc_conn.c	Sat Nov 15 17:02:27 2003
@@ -40,6 +40,11 @@
 /* Offset table on connection states transition diagram */
 static int llc_offset_table[NBR_CONN_STATES][NBR_CONN_EV];
 
+int sysctl_llc2_ack_timeout = LLC2_ACK_TIME * HZ;
+int sysctl_llc2_p_timeout = LLC2_P_TIME * HZ;
+int sysctl_llc2_rej_timeout = LLC2_REJ_TIME * HZ;
+int sysctl_llc2_busy_timeout = LLC2_BUSY_TIME * HZ;
+
 /**
  *	llc_conn_state_process - sends event to connection state machine
  *	@sk: connection
@@ -801,22 +806,22 @@
 	llc->dec_step = llc->connect_step = 1;
 
 	init_timer(&llc->ack_timer.timer);
-	llc->ack_timer.expire	      = LLC_ACK_TIME;
+	llc->ack_timer.expire	      = sysctl_llc2_ack_timeout;
 	llc->ack_timer.timer.data     = (unsigned long)sk;
 	llc->ack_timer.timer.function = llc_conn_ack_tmr_cb;
 
 	init_timer(&llc->pf_cycle_timer.timer);
-	llc->pf_cycle_timer.expire	   = LLC_P_TIME;
+	llc->pf_cycle_timer.expire	   = sysctl_llc2_p_timeout;
 	llc->pf_cycle_timer.timer.data     = (unsigned long)sk;
 	llc->pf_cycle_timer.timer.function = llc_conn_pf_cycle_tmr_cb;
 
 	init_timer(&llc->rej_sent_timer.timer);
-	llc->rej_sent_timer.expire	   = LLC_REJ_TIME;
+	llc->rej_sent_timer.expire	   = sysctl_llc2_rej_timeout;
 	llc->rej_sent_timer.timer.data     = (unsigned long)sk;
 	llc->rej_sent_timer.timer.function = llc_conn_rej_tmr_cb;
 
 	init_timer(&llc->busy_state_timer.timer);
-	llc->busy_state_timer.expire	     = LLC_BUSY_TIME;
+	llc->busy_state_timer.expire	     = sysctl_llc2_busy_timeout;
 	llc->busy_state_timer.timer.data     = (unsigned long)sk;
 	llc->busy_state_timer.timer.function = llc_conn_busy_tmr_cb;
 
diff -Nru a/net/llc/llc_conn.h b/net/llc/llc_conn.h
--- a/net/llc/llc_conn.h	Sat Nov 15 17:02:27 2003
+++ b/net/llc/llc_conn.h	Sat Nov 15 17:02:27 2003
@@ -18,14 +18,14 @@
 #define LLC_EVENT                1
 #define LLC_PACKET               2
 
-#define LLC_P_TIME               2
-#define LLC_ACK_TIME             1
-#define LLC_REJ_TIME             3
-#define LLC_BUSY_TIME            3
+#define LLC2_P_TIME               2
+#define LLC2_ACK_TIME             1
+#define LLC2_REJ_TIME             3
+#define LLC2_BUSY_TIME            3
 
 struct llc_timer {
 	struct timer_list timer;
-	u16		  expire;	/* timer expire time */
+	unsigned long	  expire;	/* timer expire time */
 };
 
 struct llc_opt {
diff -Nru a/net/llc/llc_station.c b/net/llc/llc_station.c
--- a/net/llc/llc_station.c	Sat Nov 15 17:02:27 2003
+++ b/net/llc/llc_station.c	Sat Nov 15 17:02:27 2003
@@ -50,6 +50,10 @@
 	struct sk_buff_head	    mac_pdu_q;
 };
 
+#define LLC_STATION_ACK_TIME (3 * HZ)
+
+int sysctl_llc_station_ack_timeout = LLC_STATION_ACK_TIME;
+
 /* Types of events (possible values in 'ev->type') */
 #define LLC_STATION_EV_TYPE_SIMPLE	1
 #define LLC_STATION_EV_TYPE_CONDITION	2
@@ -218,7 +222,8 @@
 
 static int llc_station_ac_start_ack_timer(struct sk_buff *skb)
 {
-	mod_timer(&llc_main_station.ack_timer, jiffies + LLC_ACK_TIME * HZ);
+	mod_timer(&llc_main_station.ack_timer,
+		  jiffies + sysctl_llc_station_ack_timeout);
 	return 0;
 }
 
@@ -687,7 +692,8 @@
 	init_timer(&llc_main_station.ack_timer);
 	llc_main_station.ack_timer.data     = (unsigned long)&llc_main_station;
 	llc_main_station.ack_timer.function = llc_station_ack_tmr_cb;
-
+	llc_main_station.ack_timer.expires  = jiffies +
+						sysctl_llc_station_ack_timeout;
 	skb = alloc_skb(0, GFP_ATOMIC);
 	if (!skb)
 		goto out;
@@ -695,7 +701,6 @@
 	llc_set_station_handler(llc_station_rcv);
 	ev = llc_station_ev(skb);
 	memset(ev, 0, sizeof(*ev));
-	llc_main_station.ack_timer.expires = jiffies + 3 * HZ;
 	llc_main_station.maximum_retry	= 1;
 	llc_main_station.state		= LLC_STATION_STATE_DOWN;
 	ev->type	= LLC_STATION_EV_TYPE_SIMPLE;
diff -Nru a/net/llc/sysctl_net_llc.c b/net/llc/sysctl_net_llc.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/net/llc/sysctl_net_llc.c	Sat Nov 15 17:02:27 2003
@@ -0,0 +1,136 @@
+/*
+ * sysctl_net_llc.c: sysctl interface to LLC net subsystem.
+ * 
+ * Arnaldo Carvalho de Melo <acme@conectiva.com.br>
+ */
+
+#include <linux/config.h>
+#include <linux/mm.h>
+#include <linux/init.h>
+#include <linux/sysctl.h>
+
+#ifndef CONFIG_SYSCTL
+#error This file should not be compiled without CONFIG_SYSCTL defined
+#endif
+
+extern int sysctl_llc2_ack_timeout;
+extern int sysctl_llc2_busy_timeout;
+extern int sysctl_llc2_p_timeout;
+extern int sysctl_llc2_rej_timeout;
+extern int sysctl_llc_station_ack_timeout;
+
+static struct ctl_table llc2_timeout_table[] = {
+	{
+		.ctl_name	= NET_LLC2_ACK_TIMEOUT,
+		.procname	= "ack",
+		.data		= &sysctl_llc2_ack_timeout,
+		.maxlen		= sizeof(long),
+		.mode		= 0644,
+		.proc_handler   = &proc_dointvec_jiffies,
+		.strategy       = &sysctl_jiffies,
+	},
+	{
+		.ctl_name	= NET_LLC2_BUSY_TIMEOUT,
+		.procname	= "busy",
+		.data		= &sysctl_llc2_busy_timeout,
+		.maxlen		= sizeof(long),
+		.mode		= 0644,
+		.proc_handler   = &proc_dointvec_jiffies,
+		.strategy       = &sysctl_jiffies,
+	},
+	{
+		.ctl_name	= NET_LLC2_P_TIMEOUT,
+		.procname	= "p",
+		.data		= &sysctl_llc2_p_timeout,
+		.maxlen		= sizeof(long),
+		.mode		= 0644,
+		.proc_handler   = &proc_dointvec_jiffies,
+		.strategy       = &sysctl_jiffies,
+	},
+	{
+		.ctl_name	= NET_LLC2_REJ_TIMEOUT,
+		.procname	= "rej",
+		.data		= &sysctl_llc2_rej_timeout,
+		.maxlen		= sizeof(long),
+		.mode		= 0644,
+		.proc_handler   = &proc_dointvec_jiffies,
+		.strategy       = &sysctl_jiffies,
+	},
+	{ 0 },
+};
+
+static struct ctl_table llc_station_table[] = {
+	{
+		.ctl_name	= NET_LLC_STATION_ACK_TIMEOUT,
+		.procname	= "ack_timeout",
+		.data		= &sysctl_llc_station_ack_timeout,
+		.maxlen		= sizeof(long),
+		.mode		= 0644,
+		.proc_handler   = &proc_dointvec_jiffies,
+		.strategy       = &sysctl_jiffies,
+	},
+	{ 0 },
+};
+
+static struct ctl_table llc2_dir_timeout_table[] = {
+	{
+		.ctl_name	= NET_LLC2,
+		.procname	= "timeout",
+		.mode		= 0555,
+		.child		= llc2_timeout_table,
+       	},
+	{ 0 },
+};
+
+static struct ctl_table llc_table[] = {
+	{
+		.ctl_name	= NET_LLC2,
+		.procname	= "llc2",
+		.mode		= 0555,
+		.child		= llc2_dir_timeout_table,
+       	},
+	{
+		.ctl_name       = NET_LLC_STATION,
+		.procname       = "station",
+		.mode           = 0555,
+		.child          = llc_station_table,
+	},
+	{ 0 },
+};
+
+static struct ctl_table llc_dir_table[] = {
+	{
+		.ctl_name	= NET_LLC,
+		.procname	= "llc",
+		.mode		= 0555,
+		.child		= llc_table,
+       	},
+	{ 0 },
+};
+
+static struct ctl_table llc_root_table[] = {
+	{
+		.ctl_name	= CTL_NET,
+		.procname	= "net",
+		.mode		= 0555,
+		.child		= llc_dir_table,
+	},
+	{ 0 },
+};
+
+static struct ctl_table_header *llc_table_header;
+
+int __init llc_sysctl_init(void)
+{
+	llc_table_header = register_sysctl_table(llc_root_table, 1);
+
+	return llc_table_header ? 0 : -ENOMEM;
+}
+
+void llc_sysctl_exit(void)
+{
+	if (llc_table_header) {
+		unregister_sysctl_table(llc_table_header);
+		llc_table_header = NULL;
+	}
+}

===================================================================


This BitKeeper patch contains the following changesets:
1.1422.1.2
## Wrapped with gzip_uu ##


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
BH%SWCS0NT^H/J+P)]>[3Q6QDC;U UVU=_C_#:%L=M34     
 
