diff -ur linux/include/linux/sysctl.h linux-mx1/include/linux/sysctl.h
--- linux/include/linux/sysctl.h	2003-11-23 14:54:47.000000000 +0200
+++ linux-mx1/include/linux/sysctl.h	2003-11-22 21:01:31.000000000 +0200
@@ -299,6 +299,7 @@
 	NET_TCP_FRTO=92,
 	NET_TCP_LOW_LATENCY=93,
 	NET_IPV4_IPFRAG_SECRET_INTERVAL=94,
+	NET_IPV4_IP_RECORD_ROUTE=95,
 };
 
 enum {
diff -ur linux/Makefile linux-mx1/Makefile
--- linux/Makefile	2003-11-23 14:54:09.000000000 +0200
+++ linux-mx1/Makefile	2003-11-22 20:31:49.000000000 +0200
@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 4
 SUBLEVEL = 22
-EXTRAVERSION =
+EXTRAVERSION = mx1
 
 KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
 
diff -ur linux/net/ipv4/ip_options.c linux-mx1/net/ipv4/ip_options.c
--- linux/net/ipv4/ip_options.c	2003-11-23 14:53:14.000000000 +0200
+++ linux-mx1/net/ipv4/ip_options.c	2003-11-23 13:42:00.000000000 +0200
@@ -33,6 +33,8 @@
  * saddr is address of outgoing interface.
  */
 
+int sysctl_ip_record_route = 1;
+
 void ip_options_build(struct sk_buff * skb, struct ip_options * opt,
 			    u32 daddr, struct rtable *rt, int is_frag) 
 {
@@ -47,7 +49,7 @@
 		memcpy(iph+opt->srr+iph[opt->srr+1]-4, &daddr, 4);
 
 	if (!is_frag) {
-		if (opt->rr_needaddr)
+		if ( (opt->rr_needaddr) && (sysctl_ip_record_route) )
 			ip_rt_get_source(iph+opt->rr+iph[opt->rr+2]-5, rt);
 		if (opt->ts_needaddr)
 			ip_rt_get_source(iph+opt->ts+iph[opt->ts+2]-9, rt);
@@ -108,7 +110,7 @@
 	else
 		daddr = skb->nh.iph->daddr;
 
-	if (sopt->rr) {
+	if ( (sopt->rr) && (sysctl_ip_record_route) ) {
 		optlen  = sptr[sopt->rr+1];
 		soffset = sptr[sopt->rr+2];
 		dopt->rr = dopt->optlen + sizeof(struct iphdr);
@@ -312,6 +314,7 @@
 			opt->srr = optptr - iph;
 			break;
 		      case IPOPT_RR:
+			if (!sysctl_ip_record_route) break;
 			if (opt->rr) {
 				pp_ptr = optptr;
 				goto error;
@@ -525,7 +528,7 @@
 	struct rtable *rt = (struct rtable*)skb->dst;
 	unsigned char *raw = skb->nh.raw;
 
-	if (opt->rr_needaddr) {
+	if ( (opt->rr_needaddr) && (sysctl_ip_record_route) )  {
 		optptr = (unsigned char *)raw + opt->rr;
 		ip_rt_get_source(&optptr[optptr[2]-5], rt);
 		opt->is_changed = 1;
diff -ur linux/net/ipv4/sysctl_net_ipv4.c linux-mx1/net/ipv4/sysctl_net_ipv4.c
--- linux/net/ipv4/sysctl_net_ipv4.c	2003-11-23 14:53:53.000000000 +0200
+++ linux-mx1/net/ipv4/sysctl_net_ipv4.c	2003-11-22 21:00:42.000000000 +0200
@@ -32,6 +32,9 @@
 /* From ip_output.c */
 extern int sysctl_ip_dynaddr;
 
+/* from ip_options.c */
+extern int sysctl_ip_record_route;
+
 /* From icmp.c */
 extern int sysctl_icmp_ratelimit;
 extern int sysctl_icmp_ratemask;
@@ -229,6 +232,8 @@
 	{NET_IPV4_IPFRAG_SECRET_INTERVAL, "ipfrag_secret_interval",
 	 &sysctl_ipfrag_secret_interval, sizeof(int), 0644, NULL, &proc_dointvec_jiffies, 
 	 &sysctl_jiffies},
+	{NET_IPV4_IP_RECORD_ROUTE,"ip_record_route",&sysctl_ip_record_route, sizeof(int),
+	 0644,NULL, &proc_dointvec},
 	{0}
 };
 
