diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-09-18 19:16:05 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-09-18 19:16:05 -0400 |
commit | 1d19f176a2884d31c4fe2c7018349ff884a819b1 (patch) | |
tree | f0f02160cb954d3d7bd4417548ca997f0a88fd45 | |
parent | 20bf94e266969f91c623ed8b51da4109e3f57bcb (diff) | |
parent | fe26109a9dfd9327fdbe630fc819e1b7450986b2 (diff) |
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
-rw-r--r-- | Documentation/feature-removal-schedule.txt | 13 | ||||
-rw-r--r-- | Documentation/kernel-parameters.txt | 6 | ||||
-rw-r--r-- | Documentation/networking/ip-sysctl.txt | 12 | ||||
-rw-r--r-- | MAINTAINERS | 10 | ||||
-rw-r--r-- | drivers/atm/he.c | 9 | ||||
-rw-r--r-- | include/linux/netfilter/Kbuild | 2 | ||||
-rw-r--r-- | net/Kconfig | 2 | ||||
-rw-r--r-- | net/atm/clip.c | 2 | ||||
-rw-r--r-- | net/bridge/br_stp_bpdu.c | 2 | ||||
-rw-r--r-- | net/core/neighbour.c | 3 | ||||
-rw-r--r-- | net/ipv4/ipvs/ip_vs_ftp.c | 27 | ||||
-rw-r--r-- | net/ipv4/tcp_input.c | 2 | ||||
-rw-r--r-- | net/ipv4/tcp_lp.c | 35 | ||||
-rw-r--r-- | net/ipv6/datagram.c | 2 | ||||
-rw-r--r-- | net/ipv6/icmp.c | 4 | ||||
-rw-r--r-- | net/ipv6/ipv6_sockglue.c | 4 | ||||
-rw-r--r-- | net/ipv6/raw.c | 2 | ||||
-rw-r--r-- | net/packet/af_packet.c | 4 | ||||
-rw-r--r-- | net/sched/sch_generic.c | 2 |
19 files changed, 97 insertions, 46 deletions
diff --git a/Documentation/feature-removal-schedule.txt b/Documentation/feature-removal-schedule.txt index d1cd5f93e028..552507fe9a7e 100644 --- a/Documentation/feature-removal-schedule.txt +++ b/Documentation/feature-removal-schedule.txt | |||
@@ -281,3 +281,16 @@ Why: The deferred output hooks are a layering violation causing unusual | |||
281 | Who: Patrick McHardy <kaber@trash.net> | 281 | Who: Patrick McHardy <kaber@trash.net> |
282 | 282 | ||
283 | --------------------------- | 283 | --------------------------- |
284 | |||
285 | What: frame diverter | ||
286 | When: November 2006 | ||
287 | Why: The frame diverter is included in most distribution kernels, but is | ||
288 | broken. It does not correctly handle many things: | ||
289 | - IPV6 | ||
290 | - non-linear skb's | ||
291 | - network device RCU on removal | ||
292 | - input frames not correctly checked for protocol errors | ||
293 | It also adds allocation overhead even if not enabled. | ||
294 | It is not clear if anyone is still using it. | ||
295 | Who: Stephen Hemminger <shemminger@osdl.org> | ||
296 | |||
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 7947cede8712..87a17337c7f6 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
@@ -697,6 +697,12 @@ running once the system is up. | |||
697 | ips= [HW,SCSI] Adaptec / IBM ServeRAID controller | 697 | ips= [HW,SCSI] Adaptec / IBM ServeRAID controller |
698 | See header of drivers/scsi/ips.c. | 698 | See header of drivers/scsi/ips.c. |
699 | 699 | ||
700 | ports= [IP_VS_FTP] IPVS ftp helper module | ||
701 | Default is 21. | ||
702 | Up to 8 (IP_VS_APP_MAX_PORTS) ports | ||
703 | may be specified. | ||
704 | Format: <port>,<port>.... | ||
705 | |||
700 | irqfixup [HW] | 706 | irqfixup [HW] |
701 | When an interrupt is not handled search all handlers | 707 | When an interrupt is not handled search all handlers |
702 | for it. Intended to get systems with badly broken | 708 | for it. Intended to get systems with badly broken |
diff --git a/Documentation/networking/ip-sysctl.txt b/Documentation/networking/ip-sysctl.txt index 3e0c017e7877..90ed78110fd4 100644 --- a/Documentation/networking/ip-sysctl.txt +++ b/Documentation/networking/ip-sysctl.txt | |||
@@ -102,9 +102,15 @@ inet_peer_gc_maxtime - INTEGER | |||
102 | TCP variables: | 102 | TCP variables: |
103 | 103 | ||
104 | tcp_abc - INTEGER | 104 | tcp_abc - INTEGER |
105 | Controls Appropriate Byte Count defined in RFC3465. If set to | 105 | Controls Appropriate Byte Count (ABC) defined in RFC3465. |
106 | 0 then does congestion avoid once per ack. 1 is conservative | 106 | ABC is a way of increasing congestion window (cwnd) more slowly |
107 | value, and 2 is more agressive. | 107 | in response to partial acknowledgments. |
108 | Possible values are: | ||
109 | 0 increase cwnd once per acknowledgment (no ABC) | ||
110 | 1 increase cwnd once per acknowledgment of full sized segment | ||
111 | 2 allow increase cwnd by two if acknowledgment is | ||
112 | of two segments to compensate for delayed acknowledgments. | ||
113 | Default: 0 (off) | ||
108 | 114 | ||
109 | tcp_syn_retries - INTEGER | 115 | tcp_syn_retries - INTEGER |
110 | Number of times initial SYNs for an active TCP connection attempt | 116 | Number of times initial SYNs for an active TCP connection attempt |
diff --git a/MAINTAINERS b/MAINTAINERS index 25cd7073a20b..a34c53c08742 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
@@ -416,7 +416,7 @@ S: Supported | |||
416 | ATM | 416 | ATM |
417 | P: Chas Williams | 417 | P: Chas Williams |
418 | M: chas@cmf.nrl.navy.mil | 418 | M: chas@cmf.nrl.navy.mil |
419 | L: linux-atm-general@lists.sourceforge.net | 419 | L: linux-atm-general@lists.sourceforge.net (subscribers-only) |
420 | W: http://linux-atm.sourceforge.net | 420 | W: http://linux-atm.sourceforge.net |
421 | S: Maintained | 421 | S: Maintained |
422 | 422 | ||
@@ -2810,6 +2810,14 @@ M: hadi@cyberus.ca | |||
2810 | L: netdev@vger.kernel.org | 2810 | L: netdev@vger.kernel.org |
2811 | S: Maintained | 2811 | S: Maintained |
2812 | 2812 | ||
2813 | TCP LOW PRIORITY MODULE | ||
2814 | P: Wong Hoi Sing, Edison | ||
2815 | M: hswong3i@gmail.com | ||
2816 | P: Hung Hing Lun, Mike | ||
2817 | M: hlhung3i@gmail.com | ||
2818 | W: http://tcp-lp-mod.sourceforge.net/ | ||
2819 | S: Maintained | ||
2820 | |||
2813 | TI OMAP RANDOM NUMBER GENERATOR SUPPORT | 2821 | TI OMAP RANDOM NUMBER GENERATOR SUPPORT |
2814 | P: Deepak Saxena | 2822 | P: Deepak Saxena |
2815 | M: dsaxena@plexity.net | 2823 | M: dsaxena@plexity.net |
diff --git a/drivers/atm/he.c b/drivers/atm/he.c index d369130f4235..dd96123a2b7f 100644 --- a/drivers/atm/he.c +++ b/drivers/atm/he.c | |||
@@ -2282,6 +2282,8 @@ __enqueue_tpd(struct he_dev *he_dev, struct he_tpd *tpd, unsigned cid) | |||
2282 | TPDRQ_MASK(he_readl(he_dev, TPDRQ_B_H))); | 2282 | TPDRQ_MASK(he_readl(he_dev, TPDRQ_B_H))); |
2283 | 2283 | ||
2284 | if (new_tail == he_dev->tpdrq_head) { | 2284 | if (new_tail == he_dev->tpdrq_head) { |
2285 | int slot; | ||
2286 | |||
2285 | hprintk("tpdrq full (cid 0x%x)\n", cid); | 2287 | hprintk("tpdrq full (cid 0x%x)\n", cid); |
2286 | /* | 2288 | /* |
2287 | * FIXME | 2289 | * FIXME |
@@ -2289,6 +2291,13 @@ __enqueue_tpd(struct he_dev *he_dev, struct he_tpd *tpd, unsigned cid) | |||
2289 | * after service_tbrq, service the backlog | 2291 | * after service_tbrq, service the backlog |
2290 | * for now, we just drop the pdu | 2292 | * for now, we just drop the pdu |
2291 | */ | 2293 | */ |
2294 | for (slot = 0; slot < TPD_MAXIOV; ++slot) { | ||
2295 | if (tpd->iovec[slot].addr) | ||
2296 | pci_unmap_single(he_dev->pci_dev, | ||
2297 | tpd->iovec[slot].addr, | ||
2298 | tpd->iovec[slot].len & TPD_LEN_MASK, | ||
2299 | PCI_DMA_TODEVICE); | ||
2300 | } | ||
2292 | if (tpd->skb) { | 2301 | if (tpd->skb) { |
2293 | if (tpd->vcc->pop) | 2302 | if (tpd->vcc->pop) |
2294 | tpd->vcc->pop(tpd->vcc, tpd->skb); | 2303 | tpd->vcc->pop(tpd->vcc, tpd->skb); |
diff --git a/include/linux/netfilter/Kbuild b/include/linux/netfilter/Kbuild index d06311acd448..1d3a14e2da6e 100644 --- a/include/linux/netfilter/Kbuild +++ b/include/linux/netfilter/Kbuild | |||
@@ -5,7 +5,7 @@ header-y := nf_conntrack_sctp.h nf_conntrack_tuple_common.h \ | |||
5 | xt_helper.h xt_length.h xt_limit.h xt_mac.h xt_mark.h \ | 5 | xt_helper.h xt_length.h xt_limit.h xt_mac.h xt_mark.h \ |
6 | xt_MARK.h xt_multiport.h xt_NFQUEUE.h xt_pkttype.h \ | 6 | xt_MARK.h xt_multiport.h xt_NFQUEUE.h xt_pkttype.h \ |
7 | xt_policy.h xt_realm.h xt_sctp.h xt_state.h xt_string.h \ | 7 | xt_policy.h xt_realm.h xt_sctp.h xt_state.h xt_string.h \ |
8 | xt_tcpmss.h xt_tcpudp.h | 8 | xt_tcpmss.h xt_tcpudp.h xt_SECMARK.h xt_CONNSECMARK.h |
9 | 9 | ||
10 | unifdef-y := nf_conntrack_common.h nf_conntrack_ftp.h \ | 10 | unifdef-y := nf_conntrack_common.h nf_conntrack_ftp.h \ |
11 | nf_conntrack_tcp.h nfnetlink.h x_tables.h xt_physdev.h | 11 | nf_conntrack_tcp.h nfnetlink.h x_tables.h xt_physdev.h |
diff --git a/net/Kconfig b/net/Kconfig index c6cec5aa5486..4959a4e1e0fe 100644 --- a/net/Kconfig +++ b/net/Kconfig | |||
@@ -177,7 +177,7 @@ source "net/lapb/Kconfig" | |||
177 | 177 | ||
178 | config NET_DIVERT | 178 | config NET_DIVERT |
179 | bool "Frame Diverter (EXPERIMENTAL)" | 179 | bool "Frame Diverter (EXPERIMENTAL)" |
180 | depends on EXPERIMENTAL | 180 | depends on EXPERIMENTAL && BROKEN |
181 | ---help--- | 181 | ---help--- |
182 | The Frame Diverter allows you to divert packets from the | 182 | The Frame Diverter allows you to divert packets from the |
183 | network, that are not aimed at the interface receiving it (in | 183 | network, that are not aimed at the interface receiving it (in |
diff --git a/net/atm/clip.c b/net/atm/clip.c index 7ce7bfe3fbad..7af2c411da82 100644 --- a/net/atm/clip.c +++ b/net/atm/clip.c | |||
@@ -500,9 +500,11 @@ static int clip_mkip(struct atm_vcc *vcc, int timeout) | |||
500 | } else { | 500 | } else { |
501 | unsigned int len = skb->len; | 501 | unsigned int len = skb->len; |
502 | 502 | ||
503 | skb_get(skb); | ||
503 | clip_push(vcc, skb); | 504 | clip_push(vcc, skb); |
504 | PRIV(skb->dev)->stats.rx_packets--; | 505 | PRIV(skb->dev)->stats.rx_packets--; |
505 | PRIV(skb->dev)->stats.rx_bytes -= len; | 506 | PRIV(skb->dev)->stats.rx_bytes -= len; |
507 | kfree_skb(skb); | ||
506 | } | 508 | } |
507 | return 0; | 509 | return 0; |
508 | } | 510 | } |
diff --git a/net/bridge/br_stp_bpdu.c b/net/bridge/br_stp_bpdu.c index a7ba0cce0b46..068d8afbf0a7 100644 --- a/net/bridge/br_stp_bpdu.c +++ b/net/bridge/br_stp_bpdu.c | |||
@@ -121,7 +121,7 @@ void br_send_tcn_bpdu(struct net_bridge_port *p) | |||
121 | buf[1] = 0; | 121 | buf[1] = 0; |
122 | buf[2] = 0; | 122 | buf[2] = 0; |
123 | buf[3] = BPDU_TYPE_TCN; | 123 | buf[3] = BPDU_TYPE_TCN; |
124 | br_send_bpdu(p, buf, 7); | 124 | br_send_bpdu(p, buf, 4); |
125 | } | 125 | } |
126 | 126 | ||
127 | /* | 127 | /* |
diff --git a/net/core/neighbour.c b/net/core/neighbour.c index 5130d2efdbbe..fe2113f54e2b 100644 --- a/net/core/neighbour.c +++ b/net/core/neighbour.c | |||
@@ -1432,6 +1432,9 @@ int neigh_table_clear(struct neigh_table *tbl) | |||
1432 | kfree(tbl->phash_buckets); | 1432 | kfree(tbl->phash_buckets); |
1433 | tbl->phash_buckets = NULL; | 1433 | tbl->phash_buckets = NULL; |
1434 | 1434 | ||
1435 | free_percpu(tbl->stats); | ||
1436 | tbl->stats = NULL; | ||
1437 | |||
1435 | return 0; | 1438 | return 0; |
1436 | } | 1439 | } |
1437 | 1440 | ||
diff --git a/net/ipv4/ipvs/ip_vs_ftp.c b/net/ipv4/ipvs/ip_vs_ftp.c index a19a33ceb811..37fafb1fbcff 100644 --- a/net/ipv4/ipvs/ip_vs_ftp.c +++ b/net/ipv4/ipvs/ip_vs_ftp.c | |||
@@ -46,14 +46,7 @@ | |||
46 | */ | 46 | */ |
47 | static int ports[IP_VS_APP_MAX_PORTS] = {21, 0}; | 47 | static int ports[IP_VS_APP_MAX_PORTS] = {21, 0}; |
48 | module_param_array(ports, int, NULL, 0); | 48 | module_param_array(ports, int, NULL, 0); |
49 | 49 | MODULE_PARM_DESC(ports, "Ports to monitor for FTP control commands"); | |
50 | /* | ||
51 | * Debug level | ||
52 | */ | ||
53 | #ifdef CONFIG_IP_VS_DEBUG | ||
54 | static int debug=0; | ||
55 | module_param(debug, int, 0); | ||
56 | #endif | ||
57 | 50 | ||
58 | 51 | ||
59 | /* Dummy variable */ | 52 | /* Dummy variable */ |
@@ -177,7 +170,7 @@ static int ip_vs_ftp_out(struct ip_vs_app *app, struct ip_vs_conn *cp, | |||
177 | &start, &end) != 1) | 170 | &start, &end) != 1) |
178 | return 1; | 171 | return 1; |
179 | 172 | ||
180 | IP_VS_DBG(1-debug, "PASV response (%u.%u.%u.%u:%d) -> " | 173 | IP_VS_DBG(7, "PASV response (%u.%u.%u.%u:%d) -> " |
181 | "%u.%u.%u.%u:%d detected\n", | 174 | "%u.%u.%u.%u:%d detected\n", |
182 | NIPQUAD(from), ntohs(port), NIPQUAD(cp->caddr), 0); | 175 | NIPQUAD(from), ntohs(port), NIPQUAD(cp->caddr), 0); |
183 | 176 | ||
@@ -280,7 +273,7 @@ static int ip_vs_ftp_in(struct ip_vs_app *app, struct ip_vs_conn *cp, | |||
280 | while (data <= data_limit - 6) { | 273 | while (data <= data_limit - 6) { |
281 | if (strnicmp(data, "PASV\r\n", 6) == 0) { | 274 | if (strnicmp(data, "PASV\r\n", 6) == 0) { |
282 | /* Passive mode on */ | 275 | /* Passive mode on */ |
283 | IP_VS_DBG(1-debug, "got PASV at %zd of %zd\n", | 276 | IP_VS_DBG(7, "got PASV at %zd of %zd\n", |
284 | data - data_start, | 277 | data - data_start, |
285 | data_limit - data_start); | 278 | data_limit - data_start); |
286 | cp->app_data = &ip_vs_ftp_pasv; | 279 | 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, | |||
302 | &start, &end) != 1) | 295 | &start, &end) != 1) |
303 | return 1; | 296 | return 1; |
304 | 297 | ||
305 | IP_VS_DBG(1-debug, "PORT %u.%u.%u.%u:%d detected\n", | 298 | IP_VS_DBG(7, "PORT %u.%u.%u.%u:%d detected\n", |
306 | NIPQUAD(to), ntohs(port)); | 299 | NIPQUAD(to), ntohs(port)); |
307 | 300 | ||
308 | /* Passive mode off */ | 301 | /* Passive mode off */ |
@@ -311,7 +304,7 @@ static int ip_vs_ftp_in(struct ip_vs_app *app, struct ip_vs_conn *cp, | |||
311 | /* | 304 | /* |
312 | * Now update or create a connection entry for it | 305 | * Now update or create a connection entry for it |
313 | */ | 306 | */ |
314 | IP_VS_DBG(1-debug, "protocol %s %u.%u.%u.%u:%d %u.%u.%u.%u:%d\n", | 307 | IP_VS_DBG(7, "protocol %s %u.%u.%u.%u:%d %u.%u.%u.%u:%d\n", |
315 | ip_vs_proto_name(iph->protocol), | 308 | ip_vs_proto_name(iph->protocol), |
316 | NIPQUAD(to), ntohs(port), NIPQUAD(cp->vaddr), 0); | 309 | NIPQUAD(to), ntohs(port), NIPQUAD(cp->vaddr), 0); |
317 | 310 | ||
@@ -372,11 +365,17 @@ static int __init ip_vs_ftp_init(void) | |||
372 | for (i=0; i<IP_VS_APP_MAX_PORTS; i++) { | 365 | for (i=0; i<IP_VS_APP_MAX_PORTS; i++) { |
373 | if (!ports[i]) | 366 | if (!ports[i]) |
374 | continue; | 367 | continue; |
368 | if (ports[i] < 0 || ports[i] > 0xffff) { | ||
369 | IP_VS_WARNING("ip_vs_ftp: Ignoring invalid " | ||
370 | "configuration port[%d] = %d\n", | ||
371 | i, ports[i]); | ||
372 | continue; | ||
373 | } | ||
375 | ret = register_ip_vs_app_inc(app, app->protocol, ports[i]); | 374 | ret = register_ip_vs_app_inc(app, app->protocol, ports[i]); |
376 | if (ret) | 375 | if (ret) |
377 | break; | 376 | break; |
378 | IP_VS_DBG(1-debug, "%s: loaded support on port[%d] = %d\n", | 377 | IP_VS_INFO("%s: loaded support on port[%d] = %d\n", |
379 | app->name, i, ports[i]); | 378 | app->name, i, ports[i]); |
380 | } | 379 | } |
381 | 380 | ||
382 | if (ret) | 381 | if (ret) |
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 111ff39a08c5..159fa3f1ba67 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c | |||
@@ -89,7 +89,7 @@ int sysctl_tcp_frto; | |||
89 | int sysctl_tcp_nometrics_save; | 89 | int sysctl_tcp_nometrics_save; |
90 | 90 | ||
91 | int sysctl_tcp_moderate_rcvbuf = 1; | 91 | int sysctl_tcp_moderate_rcvbuf = 1; |
92 | int sysctl_tcp_abc = 1; | 92 | int sysctl_tcp_abc; |
93 | 93 | ||
94 | #define FLAG_DATA 0x01 /* Incoming frame contained data. */ | 94 | #define FLAG_DATA 0x01 /* Incoming frame contained data. */ |
95 | #define FLAG_WIN_UPDATE 0x02 /* Incoming ACK was a window update. */ | 95 | #define FLAG_WIN_UPDATE 0x02 /* Incoming ACK was a window update. */ |
diff --git a/net/ipv4/tcp_lp.c b/net/ipv4/tcp_lp.c index 1f977b6ee9a1..48f28d617ce6 100644 --- a/net/ipv4/tcp_lp.c +++ b/net/ipv4/tcp_lp.c | |||
@@ -3,13 +3,8 @@ | |||
3 | * | 3 | * |
4 | * TCP Low Priority is a distributed algorithm whose goal is to utilize only | 4 | * TCP Low Priority is a distributed algorithm whose goal is to utilize only |
5 | * the excess network bandwidth as compared to the ``fair share`` of | 5 | * the excess network bandwidth as compared to the ``fair share`` of |
6 | * bandwidth as targeted by TCP. Available from: | 6 | * bandwidth as targeted by TCP. |
7 | * http://www.ece.rice.edu/~akuzma/Doc/akuzma/TCP-LP.pdf | ||
8 | * | 7 | * |
9 | * Original Author: | ||
10 | * Aleksandar Kuzmanovic <akuzma@northwestern.edu> | ||
11 | * | ||
12 | * See http://www-ece.rice.edu/networks/TCP-LP/ for their implementation. | ||
13 | * As of 2.6.13, Linux supports pluggable congestion control algorithms. | 8 | * As of 2.6.13, Linux supports pluggable congestion control algorithms. |
14 | * Due to the limitation of the API, we take the following changes from | 9 | * Due to the limitation of the API, we take the following changes from |
15 | * the original TCP-LP implementation: | 10 | * the original TCP-LP implementation: |
@@ -24,11 +19,20 @@ | |||
24 | * o OWD is handled in relative format, where local time stamp will in | 19 | * o OWD is handled in relative format, where local time stamp will in |
25 | * tcp_time_stamp format. | 20 | * tcp_time_stamp format. |
26 | * | 21 | * |
27 | * Port from 2.4.19 to 2.6.16 as module by: | 22 | * Original Author: |
28 | * Wong Hoi Sing Edison <hswong3i@gmail.com> | 23 | * Aleksandar Kuzmanovic <akuzma@northwestern.edu> |
29 | * Hung Hing Lun <hlhung3i@gmail.com> | 24 | * Available from: |
25 | * http://www.ece.rice.edu/~akuzma/Doc/akuzma/TCP-LP.pdf | ||
26 | * Original implementation for 2.4.19: | ||
27 | * http://www-ece.rice.edu/networks/TCP-LP/ | ||
30 | * | 28 | * |
31 | * Version: $Id: tcp_lp.c,v 1.22 2006-05-02 18:18:19 hswong3i Exp $ | 29 | * 2.6.x module Authors: |
30 | * Wong Hoi Sing, Edison <hswong3i@gmail.com> | ||
31 | * Hung Hing Lun, Mike <hlhung3i@gmail.com> | ||
32 | * SourceForge project page: | ||
33 | * http://tcp-lp-mod.sourceforge.net/ | ||
34 | * | ||
35 | * Version: $Id: tcp_lp.c,v 1.24 2006/09/05 20:22:53 hswong3i Exp $ | ||
32 | */ | 36 | */ |
33 | 37 | ||
34 | #include <linux/config.h> | 38 | #include <linux/config.h> |
@@ -153,16 +157,19 @@ static u32 tcp_lp_remote_hz_estimator(struct sock *sk) | |||
153 | if (m < 0) | 157 | if (m < 0) |
154 | m = -m; | 158 | m = -m; |
155 | 159 | ||
156 | if (rhz != 0) { | 160 | if (rhz > 0) { |
157 | m -= rhz >> 6; /* m is now error in remote HZ est */ | 161 | m -= rhz >> 6; /* m is now error in remote HZ est */ |
158 | rhz += m; /* 63/64 old + 1/64 new */ | 162 | rhz += m; /* 63/64 old + 1/64 new */ |
159 | } else | 163 | } else |
160 | rhz = m << 6; | 164 | rhz = m << 6; |
161 | 165 | ||
166 | out: | ||
162 | /* record time for successful remote HZ calc */ | 167 | /* record time for successful remote HZ calc */ |
163 | lp->flag |= LP_VALID_RHZ; | 168 | if (rhz > 0) |
169 | lp->flag |= LP_VALID_RHZ; | ||
170 | else | ||
171 | lp->flag &= ~LP_VALID_RHZ; | ||
164 | 172 | ||
165 | out: | ||
166 | /* record reference time stamp */ | 173 | /* record reference time stamp */ |
167 | lp->remote_ref_time = tp->rx_opt.rcv_tsval; | 174 | lp->remote_ref_time = tp->rx_opt.rcv_tsval; |
168 | lp->local_ref_time = tp->rx_opt.rcv_tsecr; | 175 | lp->local_ref_time = tp->rx_opt.rcv_tsecr; |
@@ -333,6 +340,6 @@ static void __exit tcp_lp_unregister(void) | |||
333 | module_init(tcp_lp_register); | 340 | module_init(tcp_lp_register); |
334 | module_exit(tcp_lp_unregister); | 341 | module_exit(tcp_lp_unregister); |
335 | 342 | ||
336 | MODULE_AUTHOR("Wong Hoi Sing Edison, Hung Hing Lun"); | 343 | MODULE_AUTHOR("Wong Hoi Sing Edison, Hung Hing Lun Mike"); |
337 | MODULE_LICENSE("GPL"); | 344 | MODULE_LICENSE("GPL"); |
338 | MODULE_DESCRIPTION("TCP Low Priority"); | 345 | MODULE_DESCRIPTION("TCP Low Priority"); |
diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c index 99a6eb23378b..3b55b4c8e2d1 100644 --- a/net/ipv6/datagram.c +++ b/net/ipv6/datagram.c | |||
@@ -696,7 +696,7 @@ int datagram_send_ctl(struct msghdr *msg, struct flowi *fl, | |||
696 | } | 696 | } |
697 | 697 | ||
698 | tc = *(int *)CMSG_DATA(cmsg); | 698 | tc = *(int *)CMSG_DATA(cmsg); |
699 | if (tc < 0 || tc > 0xff) | 699 | if (tc < -1 || tc > 0xff) |
700 | goto exit_f; | 700 | goto exit_f; |
701 | 701 | ||
702 | err = 0; | 702 | err = 0; |
diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c index 3d6e9a351150..356a8a7ef22a 100644 --- a/net/ipv6/icmp.c +++ b/net/ipv6/icmp.c | |||
@@ -401,7 +401,7 @@ void icmpv6_send(struct sk_buff *skb, int type, int code, __u32 info, | |||
401 | if (hlimit < 0) | 401 | if (hlimit < 0) |
402 | hlimit = ipv6_get_hoplimit(dst->dev); | 402 | hlimit = ipv6_get_hoplimit(dst->dev); |
403 | 403 | ||
404 | tclass = np->cork.tclass; | 404 | tclass = np->tclass; |
405 | if (tclass < 0) | 405 | if (tclass < 0) |
406 | tclass = 0; | 406 | tclass = 0; |
407 | 407 | ||
@@ -497,7 +497,7 @@ static void icmpv6_echo_reply(struct sk_buff *skb) | |||
497 | if (hlimit < 0) | 497 | if (hlimit < 0) |
498 | hlimit = ipv6_get_hoplimit(dst->dev); | 498 | hlimit = ipv6_get_hoplimit(dst->dev); |
499 | 499 | ||
500 | tclass = np->cork.tclass; | 500 | tclass = np->tclass; |
501 | if (tclass < 0) | 501 | if (tclass < 0) |
502 | tclass = 0; | 502 | tclass = 0; |
503 | 503 | ||
diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c index 43327264e69c..a5eaaf693abf 100644 --- a/net/ipv6/ipv6_sockglue.c +++ b/net/ipv6/ipv6_sockglue.c | |||
@@ -362,7 +362,7 @@ static int do_ipv6_setsockopt(struct sock *sk, int level, int optname, | |||
362 | break; | 362 | break; |
363 | 363 | ||
364 | case IPV6_TCLASS: | 364 | case IPV6_TCLASS: |
365 | if (val < 0 || val > 0xff) | 365 | if (val < -1 || val > 0xff) |
366 | goto e_inval; | 366 | goto e_inval; |
367 | np->tclass = val; | 367 | np->tclass = val; |
368 | retv = 0; | 368 | retv = 0; |
@@ -947,6 +947,8 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname, | |||
947 | 947 | ||
948 | case IPV6_TCLASS: | 948 | case IPV6_TCLASS: |
949 | val = np->tclass; | 949 | val = np->tclass; |
950 | if (val < 0) | ||
951 | val = 0; | ||
950 | break; | 952 | break; |
951 | 953 | ||
952 | case IPV6_RECVTCLASS: | 954 | case IPV6_RECVTCLASS: |
diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c index d57e61ce4a7d..15b862d8acab 100644 --- a/net/ipv6/raw.c +++ b/net/ipv6/raw.c | |||
@@ -781,7 +781,7 @@ static int rawv6_sendmsg(struct kiocb *iocb, struct sock *sk, | |||
781 | } | 781 | } |
782 | 782 | ||
783 | if (tclass < 0) { | 783 | if (tclass < 0) { |
784 | tclass = np->cork.tclass; | 784 | tclass = np->tclass; |
785 | if (tclass < 0) | 785 | if (tclass < 0) |
786 | tclass = 0; | 786 | tclass = 0; |
787 | } | 787 | } |
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index f9cef3671593..4172a5235916 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c | |||
@@ -626,8 +626,6 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev, struct packe | |||
626 | if ((int)snaplen < 0) | 626 | if ((int)snaplen < 0) |
627 | snaplen = 0; | 627 | snaplen = 0; |
628 | } | 628 | } |
629 | if (snaplen > skb->len-skb->data_len) | ||
630 | snaplen = skb->len-skb->data_len; | ||
631 | 629 | ||
632 | spin_lock(&sk->sk_receive_queue.lock); | 630 | spin_lock(&sk->sk_receive_queue.lock); |
633 | h = (struct tpacket_hdr *)packet_lookup_frame(po, po->head); | 631 | 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 | |||
644 | status &= ~TP_STATUS_LOSING; | 642 | status &= ~TP_STATUS_LOSING; |
645 | spin_unlock(&sk->sk_receive_queue.lock); | 643 | spin_unlock(&sk->sk_receive_queue.lock); |
646 | 644 | ||
647 | memcpy((u8*)h + macoff, skb->data, snaplen); | 645 | skb_copy_bits(skb, 0, (u8*)h + macoff, snaplen); |
648 | 646 | ||
649 | h->tp_len = skb->len; | 647 | h->tp_len = skb->len; |
650 | h->tp_snaplen = snaplen; | 648 | h->tp_snaplen = snaplen; |
diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c index 0834c2ee9174..6f9151899795 100644 --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c | |||
@@ -238,9 +238,7 @@ void __netdev_watchdog_up(struct net_device *dev) | |||
238 | 238 | ||
239 | static void dev_watchdog_up(struct net_device *dev) | 239 | static void dev_watchdog_up(struct net_device *dev) |
240 | { | 240 | { |
241 | netif_tx_lock_bh(dev); | ||
242 | __netdev_watchdog_up(dev); | 241 | __netdev_watchdog_up(dev); |
243 | netif_tx_unlock_bh(dev); | ||
244 | } | 242 | } |
245 | 243 | ||
246 | static void dev_watchdog_down(struct net_device *dev) | 244 | static void dev_watchdog_down(struct net_device *dev) |