Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6: [ATM] CLIP: Do not refer freed skbuff in clip_mkip(). [NET]: Drop tx lock in dev_watchdog_up [PACKET]: Don't truncate non-linear skbs with mmaped IO [NET]: Mark frame diverter for future removal. [NETFILTER]: Add secmark headers to header-y [ATM]: linux-atm-general mailing list is subscribers only [ATM]: [he] when transmit fails, unmap the dma regions [TCP] tcp-lp: update information to MAINTAINERS [TCP] tcp-lp: bug fix for oops in 2.6.18-rc6 [BRIDGE]: random extra bytes on STP TCN packet [IPV6]: Accept -1 for IPV6_TCLASS [IPV6]: Fix tclass setting for raw sockets. [IPVS]: remove the debug option go ip_vs_ftp [IPVS]: Make sure ip_vs_ftp ports are valid [IPVS]: auto-help for ip_vs_ftp [IPVS]: Document the ports option to ip_vs_ftp in kernel-parameters.txt [TCP]: Turn ABC off. [NEIGH]: neigh_table_clear() doesn't free stats
This commit is contained in:
		
						commit
						1d19f176a2
					
				| @ -281,3 +281,16 @@ Why:	The deferred output hooks are a layering violation causing unusual | ||||
| Who:	Patrick McHardy <kaber@trash.net> | ||||
| 
 | ||||
| --------------------------- | ||||
| 
 | ||||
| What:	frame diverter | ||||
| When:	November 2006 | ||||
| Why:	The frame diverter is included in most distribution kernels, but is | ||||
| 	broken. It does not correctly handle many things: | ||||
| 	- IPV6 | ||||
| 	- non-linear skb's | ||||
| 	- network device RCU on removal | ||||
| 	- input frames not correctly checked for protocol errors | ||||
| 	It also adds allocation overhead even if not enabled. | ||||
| 	It is not clear if anyone is still using it. | ||||
| Who:	Stephen Hemminger <shemminger@osdl.org> | ||||
| 
 | ||||
|  | ||||
| @ -697,6 +697,12 @@ running once the system is up. | ||||
| 	ips=		[HW,SCSI] Adaptec / IBM ServeRAID controller | ||||
| 			See header of drivers/scsi/ips.c. | ||||
| 
 | ||||
| 	ports=		[IP_VS_FTP] IPVS ftp helper module | ||||
| 			Default is 21. | ||||
| 			Up to 8 (IP_VS_APP_MAX_PORTS) ports | ||||
| 			may be specified. | ||||
| 			Format: <port>,<port>.... | ||||
| 
 | ||||
| 	irqfixup	[HW] | ||||
| 			When an interrupt is not handled search all handlers | ||||
| 			for it. Intended to get systems with badly broken | ||||
|  | ||||
| @ -102,9 +102,15 @@ inet_peer_gc_maxtime - INTEGER | ||||
| TCP variables:  | ||||
| 
 | ||||
| tcp_abc - INTEGER | ||||
| 	Controls Appropriate Byte Count defined in RFC3465. If set to | ||||
| 	0 then does congestion avoid once per ack. 1 is conservative | ||||
| 	value, and 2 is more agressive. | ||||
| 	Controls Appropriate Byte Count (ABC) defined in RFC3465. | ||||
| 	ABC is a way of increasing congestion window (cwnd) more slowly | ||||
| 	in response to partial acknowledgments. | ||||
| 	Possible values are: | ||||
| 		0 increase cwnd once per acknowledgment (no ABC) | ||||
| 		1 increase cwnd once per acknowledgment of full sized segment | ||||
| 		2 allow increase cwnd by two if acknowledgment is | ||||
| 		  of two segments to compensate for delayed acknowledgments. | ||||
| 	Default: 0 (off) | ||||
| 
 | ||||
| tcp_syn_retries - INTEGER | ||||
| 	Number of times initial SYNs for an active TCP connection attempt | ||||
|  | ||||
							
								
								
									
										10
									
								
								MAINTAINERS
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								MAINTAINERS
									
									
									
									
									
								
							| @ -416,7 +416,7 @@ S:	Supported | ||||
| ATM | ||||
| P:	Chas Williams | ||||
| M:	chas@cmf.nrl.navy.mil | ||||
| L:	linux-atm-general@lists.sourceforge.net | ||||
| L:	linux-atm-general@lists.sourceforge.net (subscribers-only) | ||||
| W:	http://linux-atm.sourceforge.net | ||||
| S:	Maintained | ||||
| 
 | ||||
| @ -2810,6 +2810,14 @@ M:	hadi@cyberus.ca | ||||
| L:	netdev@vger.kernel.org | ||||
| S:	Maintained | ||||
| 
 | ||||
| TCP LOW PRIORITY MODULE | ||||
| P:	Wong Hoi Sing, Edison | ||||
| M:	hswong3i@gmail.com | ||||
| P:	Hung Hing Lun, Mike | ||||
| M:	hlhung3i@gmail.com | ||||
| W:	http://tcp-lp-mod.sourceforge.net/ | ||||
| S:	Maintained | ||||
| 
 | ||||
| TI OMAP RANDOM NUMBER GENERATOR SUPPORT | ||||
| P:	Deepak Saxena | ||||
| M:	dsaxena@plexity.net | ||||
|  | ||||
| @ -2282,6 +2282,8 @@ __enqueue_tpd(struct he_dev *he_dev, struct he_tpd *tpd, unsigned cid) | ||||
| 				TPDRQ_MASK(he_readl(he_dev, TPDRQ_B_H))); | ||||
| 
 | ||||
| 		if (new_tail == he_dev->tpdrq_head) { | ||||
| 			int slot; | ||||
| 
 | ||||
| 			hprintk("tpdrq full (cid 0x%x)\n", cid); | ||||
| 			/*
 | ||||
| 			 * FIXME | ||||
| @ -2289,6 +2291,13 @@ __enqueue_tpd(struct he_dev *he_dev, struct he_tpd *tpd, unsigned cid) | ||||
| 			 * after service_tbrq, service the backlog | ||||
| 			 * for now, we just drop the pdu | ||||
| 			 */ | ||||
| 			for (slot = 0; slot < TPD_MAXIOV; ++slot) { | ||||
| 				if (tpd->iovec[slot].addr) | ||||
| 					pci_unmap_single(he_dev->pci_dev, | ||||
| 						tpd->iovec[slot].addr, | ||||
| 						tpd->iovec[slot].len & TPD_LEN_MASK, | ||||
| 								PCI_DMA_TODEVICE); | ||||
| 			} | ||||
| 			if (tpd->skb) { | ||||
| 				if (tpd->vcc->pop) | ||||
| 					tpd->vcc->pop(tpd->vcc, tpd->skb); | ||||
|  | ||||
| @ -5,7 +5,7 @@ header-y := nf_conntrack_sctp.h nf_conntrack_tuple_common.h		\ | ||||
| 	    xt_helper.h xt_length.h xt_limit.h xt_mac.h xt_mark.h	\ | ||||
| 	    xt_MARK.h xt_multiport.h xt_NFQUEUE.h xt_pkttype.h		\ | ||||
| 	    xt_policy.h xt_realm.h xt_sctp.h xt_state.h xt_string.h	\ | ||||
| 	    xt_tcpmss.h xt_tcpudp.h | ||||
| 	    xt_tcpmss.h xt_tcpudp.h xt_SECMARK.h xt_CONNSECMARK.h | ||||
| 
 | ||||
| unifdef-y := nf_conntrack_common.h nf_conntrack_ftp.h		\ | ||||
| 	nf_conntrack_tcp.h nfnetlink.h x_tables.h xt_physdev.h | ||||
|  | ||||
| @ -177,7 +177,7 @@ source "net/lapb/Kconfig" | ||||
| 
 | ||||
| config NET_DIVERT | ||||
| 	bool "Frame Diverter (EXPERIMENTAL)" | ||||
| 	depends on EXPERIMENTAL | ||||
| 	depends on EXPERIMENTAL && BROKEN | ||||
| 	---help--- | ||||
| 	  The Frame Diverter allows you to divert packets from the | ||||
| 	  network, that are not aimed at the interface receiving it (in | ||||
|  | ||||
| @ -500,9 +500,11 @@ static int clip_mkip(struct atm_vcc *vcc, int timeout) | ||||
| 		} else { | ||||
| 			unsigned int len = skb->len; | ||||
| 
 | ||||
| 			skb_get(skb); | ||||
| 			clip_push(vcc, skb); | ||||
| 			PRIV(skb->dev)->stats.rx_packets--; | ||||
| 			PRIV(skb->dev)->stats.rx_bytes -= len; | ||||
| 			kfree_skb(skb); | ||||
| 		} | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| @ -121,7 +121,7 @@ void br_send_tcn_bpdu(struct net_bridge_port *p) | ||||
| 	buf[1] = 0; | ||||
| 	buf[2] = 0; | ||||
| 	buf[3] = BPDU_TYPE_TCN; | ||||
| 	br_send_bpdu(p, buf, 7); | ||||
| 	br_send_bpdu(p, buf, 4); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  | ||||
| @ -1432,6 +1432,9 @@ int neigh_table_clear(struct neigh_table *tbl) | ||||
| 	kfree(tbl->phash_buckets); | ||||
| 	tbl->phash_buckets = NULL; | ||||
| 
 | ||||
| 	free_percpu(tbl->stats); | ||||
| 	tbl->stats = NULL; | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -46,14 +46,7 @@ | ||||
|  */ | ||||
| static int ports[IP_VS_APP_MAX_PORTS] = {21, 0}; | ||||
| module_param_array(ports, int, NULL, 0); | ||||
| 
 | ||||
| /*
 | ||||
|  *	Debug level | ||||
|  */ | ||||
| #ifdef CONFIG_IP_VS_DEBUG | ||||
| static int debug=0; | ||||
| module_param(debug, int, 0); | ||||
| #endif | ||||
| MODULE_PARM_DESC(ports, "Ports to monitor for FTP control commands"); | ||||
| 
 | ||||
| 
 | ||||
| /*	Dummy variable */ | ||||
| @ -177,7 +170,7 @@ static int ip_vs_ftp_out(struct ip_vs_app *app, struct ip_vs_conn *cp, | ||||
| 					   &start, &end) != 1) | ||||
| 			return 1; | ||||
| 
 | ||||
| 		IP_VS_DBG(1-debug, "PASV response (%u.%u.%u.%u:%d) -> " | ||||
| 		IP_VS_DBG(7, "PASV response (%u.%u.%u.%u:%d) -> " | ||||
| 			  "%u.%u.%u.%u:%d detected\n", | ||||
| 			  NIPQUAD(from), ntohs(port), NIPQUAD(cp->caddr), 0); | ||||
| 
 | ||||
| @ -280,7 +273,7 @@ static int ip_vs_ftp_in(struct ip_vs_app *app, struct ip_vs_conn *cp, | ||||
| 	while (data <= data_limit - 6) { | ||||
| 		if (strnicmp(data, "PASV\r\n", 6) == 0) { | ||||
| 			/* Passive mode on */ | ||||
| 			IP_VS_DBG(1-debug, "got PASV at %zd of %zd\n", | ||||
| 			IP_VS_DBG(7, "got PASV at %zd of %zd\n", | ||||
| 				  data - data_start, | ||||
| 				  data_limit - data_start); | ||||
| 			cp->app_data = &ip_vs_ftp_pasv; | ||||
| @ -302,7 +295,7 @@ static int ip_vs_ftp_in(struct ip_vs_app *app, struct ip_vs_conn *cp, | ||||
| 				   &start, &end) != 1) | ||||
| 		return 1; | ||||
| 
 | ||||
| 	IP_VS_DBG(1-debug, "PORT %u.%u.%u.%u:%d detected\n", | ||||
| 	IP_VS_DBG(7, "PORT %u.%u.%u.%u:%d detected\n", | ||||
| 		  NIPQUAD(to), ntohs(port)); | ||||
| 
 | ||||
| 	/* Passive mode off */ | ||||
| @ -311,7 +304,7 @@ static int ip_vs_ftp_in(struct ip_vs_app *app, struct ip_vs_conn *cp, | ||||
| 	/*
 | ||||
| 	 * Now update or create a connection entry for it | ||||
| 	 */ | ||||
| 	IP_VS_DBG(1-debug, "protocol %s %u.%u.%u.%u:%d %u.%u.%u.%u:%d\n", | ||||
| 	IP_VS_DBG(7, "protocol %s %u.%u.%u.%u:%d %u.%u.%u.%u:%d\n", | ||||
| 		  ip_vs_proto_name(iph->protocol), | ||||
| 		  NIPQUAD(to), ntohs(port), NIPQUAD(cp->vaddr), 0); | ||||
| 
 | ||||
| @ -372,11 +365,17 @@ static int __init ip_vs_ftp_init(void) | ||||
| 	for (i=0; i<IP_VS_APP_MAX_PORTS; i++) { | ||||
| 		if (!ports[i]) | ||||
| 			continue; | ||||
| 		if (ports[i] < 0 || ports[i] > 0xffff) { | ||||
| 			IP_VS_WARNING("ip_vs_ftp: Ignoring invalid " | ||||
| 				      "configuration port[%d] = %d\n", | ||||
| 				      i, ports[i]); | ||||
| 			continue; | ||||
| 		} | ||||
| 		ret = register_ip_vs_app_inc(app, app->protocol, ports[i]); | ||||
| 		if (ret) | ||||
| 			break; | ||||
| 		IP_VS_DBG(1-debug, "%s: loaded support on port[%d] = %d\n", | ||||
| 			  app->name, i, ports[i]); | ||||
| 		IP_VS_INFO("%s: loaded support on port[%d] = %d\n", | ||||
| 		 	   app->name, i, ports[i]); | ||||
| 	} | ||||
| 
 | ||||
| 	if (ret) | ||||
|  | ||||
| @ -89,7 +89,7 @@ int sysctl_tcp_frto; | ||||
| int sysctl_tcp_nometrics_save; | ||||
| 
 | ||||
| int sysctl_tcp_moderate_rcvbuf = 1; | ||||
| int sysctl_tcp_abc = 1; | ||||
| int sysctl_tcp_abc; | ||||
| 
 | ||||
| #define FLAG_DATA		0x01 /* Incoming frame contained data.		*/ | ||||
| #define FLAG_WIN_UPDATE		0x02 /* Incoming ACK was a window update.	*/ | ||||
|  | ||||
| @ -3,13 +3,8 @@ | ||||
|  * | ||||
|  * TCP Low Priority is a distributed algorithm whose goal is to utilize only | ||||
|  *   the excess network bandwidth as compared to the ``fair share`` of | ||||
|  *   bandwidth as targeted by TCP. Available from: | ||||
|  *     http://www.ece.rice.edu/~akuzma/Doc/akuzma/TCP-LP.pdf
 | ||||
|  *   bandwidth as targeted by TCP. | ||||
|  * | ||||
|  * Original Author: | ||||
|  *   Aleksandar Kuzmanovic <akuzma@northwestern.edu> | ||||
|  * | ||||
|  * See http://www-ece.rice.edu/networks/TCP-LP/ for their implementation.
 | ||||
|  * As of 2.6.13, Linux supports pluggable congestion control algorithms. | ||||
|  * Due to the limitation of the API, we take the following changes from | ||||
|  * the original TCP-LP implementation: | ||||
| @ -24,11 +19,20 @@ | ||||
|  *   o OWD is handled in relative format, where local time stamp will in | ||||
|  *     tcp_time_stamp format. | ||||
|  * | ||||
|  * Port from 2.4.19 to 2.6.16 as module by: | ||||
|  *   Wong Hoi Sing Edison <hswong3i@gmail.com> | ||||
|  *   Hung Hing Lun <hlhung3i@gmail.com> | ||||
|  * Original Author: | ||||
|  *   Aleksandar Kuzmanovic <akuzma@northwestern.edu> | ||||
|  * Available from: | ||||
|  *   http://www.ece.rice.edu/~akuzma/Doc/akuzma/TCP-LP.pdf
 | ||||
|  * Original implementation for 2.4.19: | ||||
|  *   http://www-ece.rice.edu/networks/TCP-LP/
 | ||||
|  * | ||||
|  * Version: $Id: tcp_lp.c,v 1.22 2006-05-02 18:18:19 hswong3i Exp $ | ||||
|  * 2.6.x module Authors: | ||||
|  *   Wong Hoi Sing, Edison <hswong3i@gmail.com> | ||||
|  *   Hung Hing Lun, Mike <hlhung3i@gmail.com> | ||||
|  * SourceForge project page: | ||||
|  *   http://tcp-lp-mod.sourceforge.net/
 | ||||
|  * | ||||
|  * Version: $Id: tcp_lp.c,v 1.24 2006/09/05 20:22:53 hswong3i Exp $ | ||||
|  */ | ||||
| 
 | ||||
| #include <linux/config.h> | ||||
| @ -153,16 +157,19 @@ static u32 tcp_lp_remote_hz_estimator(struct sock *sk) | ||||
| 	if (m < 0) | ||||
| 		m = -m; | ||||
| 
 | ||||
| 	if (rhz != 0) { | ||||
| 	if (rhz > 0) { | ||||
| 		m -= rhz >> 6;	/* m is now error in remote HZ est */ | ||||
| 		rhz += m;	/* 63/64 old + 1/64 new */ | ||||
| 	} else | ||||
| 		rhz = m << 6; | ||||
| 
 | ||||
| 	/* record time for successful remote HZ calc */ | ||||
| 	lp->flag |= LP_VALID_RHZ; | ||||
| 
 | ||||
|  out: | ||||
| 	/* record time for successful remote HZ calc */ | ||||
| 	if (rhz > 0) | ||||
| 		lp->flag |= LP_VALID_RHZ; | ||||
| 	else | ||||
| 		lp->flag &= ~LP_VALID_RHZ; | ||||
| 
 | ||||
| 	/* record reference time stamp */ | ||||
| 	lp->remote_ref_time = tp->rx_opt.rcv_tsval; | ||||
| 	lp->local_ref_time = tp->rx_opt.rcv_tsecr; | ||||
| @ -333,6 +340,6 @@ static void __exit tcp_lp_unregister(void) | ||||
| module_init(tcp_lp_register); | ||||
| module_exit(tcp_lp_unregister); | ||||
| 
 | ||||
| MODULE_AUTHOR("Wong Hoi Sing Edison, Hung Hing Lun"); | ||||
| MODULE_AUTHOR("Wong Hoi Sing Edison, Hung Hing Lun Mike"); | ||||
| MODULE_LICENSE("GPL"); | ||||
| MODULE_DESCRIPTION("TCP Low Priority"); | ||||
|  | ||||
| @ -696,7 +696,7 @@ int datagram_send_ctl(struct msghdr *msg, struct flowi *fl, | ||||
| 			} | ||||
| 
 | ||||
| 			tc = *(int *)CMSG_DATA(cmsg); | ||||
| 			if (tc < 0 || tc > 0xff) | ||||
| 			if (tc < -1 || tc > 0xff) | ||||
| 				goto exit_f; | ||||
| 
 | ||||
| 			err = 0; | ||||
|  | ||||
| @ -401,7 +401,7 @@ void icmpv6_send(struct sk_buff *skb, int type, int code, __u32 info, | ||||
| 	if (hlimit < 0) | ||||
| 		hlimit = ipv6_get_hoplimit(dst->dev); | ||||
| 
 | ||||
| 	tclass = np->cork.tclass; | ||||
| 	tclass = np->tclass; | ||||
| 	if (tclass < 0) | ||||
| 		tclass = 0; | ||||
| 
 | ||||
| @ -497,7 +497,7 @@ static void icmpv6_echo_reply(struct sk_buff *skb) | ||||
| 	if (hlimit < 0) | ||||
| 		hlimit = ipv6_get_hoplimit(dst->dev); | ||||
| 
 | ||||
| 	tclass = np->cork.tclass; | ||||
| 	tclass = np->tclass; | ||||
| 	if (tclass < 0) | ||||
| 		tclass = 0; | ||||
| 
 | ||||
|  | ||||
| @ -362,7 +362,7 @@ static int do_ipv6_setsockopt(struct sock *sk, int level, int optname, | ||||
| 		break; | ||||
| 
 | ||||
| 	case IPV6_TCLASS: | ||||
| 		if (val < 0 || val > 0xff) | ||||
| 		if (val < -1 || val > 0xff) | ||||
| 			goto e_inval; | ||||
| 		np->tclass = val; | ||||
| 		retv = 0; | ||||
| @ -947,6 +947,8 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname, | ||||
| 
 | ||||
| 	case IPV6_TCLASS: | ||||
| 		val = np->tclass; | ||||
| 		if (val < 0) | ||||
| 			val = 0; | ||||
| 		break; | ||||
| 
 | ||||
| 	case IPV6_RECVTCLASS: | ||||
|  | ||||
| @ -781,7 +781,7 @@ static int rawv6_sendmsg(struct kiocb *iocb, struct sock *sk, | ||||
| 	} | ||||
| 
 | ||||
| 	if (tclass < 0) { | ||||
| 		tclass = np->cork.tclass; | ||||
| 		tclass = np->tclass; | ||||
| 		if (tclass < 0) | ||||
| 			tclass = 0; | ||||
| 	} | ||||
|  | ||||
| @ -626,8 +626,6 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev, struct packe | ||||
| 		if ((int)snaplen < 0) | ||||
| 			snaplen = 0; | ||||
| 	} | ||||
| 	if (snaplen > skb->len-skb->data_len) | ||||
| 		snaplen = skb->len-skb->data_len; | ||||
| 
 | ||||
| 	spin_lock(&sk->sk_receive_queue.lock); | ||||
| 	h = (struct tpacket_hdr *)packet_lookup_frame(po, po->head); | ||||
| @ -644,7 +642,7 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev, struct packe | ||||
| 		status &= ~TP_STATUS_LOSING; | ||||
| 	spin_unlock(&sk->sk_receive_queue.lock); | ||||
| 
 | ||||
| 	memcpy((u8*)h + macoff, skb->data, snaplen); | ||||
| 	skb_copy_bits(skb, 0, (u8*)h + macoff, snaplen); | ||||
| 
 | ||||
| 	h->tp_len = skb->len; | ||||
| 	h->tp_snaplen = snaplen; | ||||
|  | ||||
| @ -238,9 +238,7 @@ void __netdev_watchdog_up(struct net_device *dev) | ||||
| 
 | ||||
| static void dev_watchdog_up(struct net_device *dev) | ||||
| { | ||||
| 	netif_tx_lock_bh(dev); | ||||
| 	__netdev_watchdog_up(dev); | ||||
| 	netif_tx_unlock_bh(dev); | ||||
| } | ||||
| 
 | ||||
| static void dev_watchdog_down(struct net_device *dev) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user