Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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:
[BNX2]: Fix occasional NETDEV WATCHDOG on 5709.
[IPV6]: Disallow RH0 by default.
[XFRM]: beet: fix pseudo header length value
[TCP]: Congestion control initialization.

+79 -20
+9
Documentation/networking/ip-sysctl.txt
··· 851 851 Functional default: enabled if local forwarding is disabled. 852 852 disabled if local forwarding is enabled. 853 853 854 + accept_source_route - INTEGER 855 + Accept source routing (routing extension header). 856 + 857 + > 0: Accept routing header. 858 + = 0: Accept only routing header type 2. 859 + < 0: Do not accept routing header. 860 + 861 + Default: 0 862 + 854 863 autoconf - BOOLEAN 855 864 Autoconfigure addresses using Prefix Information in Router 856 865 Advertisements.
+5 -2
drivers/net/bnx2.c
··· 54 54 55 55 #define DRV_MODULE_NAME "bnx2" 56 56 #define PFX DRV_MODULE_NAME ": " 57 - #define DRV_MODULE_VERSION "1.5.7" 58 - #define DRV_MODULE_RELDATE "March 29, 2007" 57 + #define DRV_MODULE_VERSION "1.5.8" 58 + #define DRV_MODULE_RELDATE "April 24, 2007" 59 59 60 60 #define RUN_AT(x) (jiffies + (x)) 61 61 ··· 3421 3421 val = REG_RD(bp, BNX2_MQ_CONFIG); 3422 3422 val &= ~BNX2_MQ_CONFIG_KNL_BYP_BLK_SIZE; 3423 3423 val |= BNX2_MQ_CONFIG_KNL_BYP_BLK_SIZE_256; 3424 + if (CHIP_ID(bp) == CHIP_ID_5709_A0 || CHIP_ID(bp) == CHIP_ID_5709_A1) 3425 + val |= BNX2_MQ_CONFIG_HALT_DIS; 3426 + 3424 3427 REG_WR(bp, BNX2_MQ_CONFIG, val); 3425 3428 3426 3429 val = 0x10000 + (MAX_CID_CNT * MB_KERNEL_CTX_SIZE);
+1
drivers/net/bnx2.h
··· 6518 6518 #define CHIP_ID_5708_B0 0x57081000 6519 6519 #define CHIP_ID_5708_B1 0x57081010 6520 6520 #define CHIP_ID_5709_A0 0x57090000 6521 + #define CHIP_ID_5709_A1 0x57090010 6521 6522 6522 6523 #define CHIP_BOND_ID(bp) (((bp)->chip_id) & 0xf) 6523 6524
+3
include/linux/ipv6.h
··· 177 177 #endif 178 178 #endif 179 179 __s32 proxy_ndp; 180 + __s32 accept_source_route; 180 181 void *sysctl; 181 182 }; 182 183 ··· 206 205 DEVCONF_RTR_PROBE_INTERVAL, 207 206 DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN, 208 207 DEVCONF_PROXY_NDP, 208 + __DEVCONF_OPTIMISTIC_DAD, 209 + DEVCONF_ACCEPT_SOURCE_ROUTE, 209 210 DEVCONF_MAX 210 211 }; 211 212
+1
include/linux/sysctl.h
··· 580 580 NET_IPV6_RTR_PROBE_INTERVAL=21, 581 581 NET_IPV6_ACCEPT_RA_RT_INFO_MAX_PLEN=22, 582 582 NET_IPV6_PROXY_NDP=23, 583 + NET_IPV6_ACCEPT_SOURCE_ROUTE=25, 583 584 __NET_IPV6_MAX 584 585 }; 585 586
+13 -10
net/ipv4/tcp_cong.c
··· 77 77 struct inet_connection_sock *icsk = inet_csk(sk); 78 78 struct tcp_congestion_ops *ca; 79 79 80 - if (icsk->icsk_ca_ops != &tcp_init_congestion_ops) 81 - return; 80 + /* if no choice made yet assign the current value set as default */ 81 + if (icsk->icsk_ca_ops == &tcp_init_congestion_ops) { 82 + rcu_read_lock(); 83 + list_for_each_entry_rcu(ca, &tcp_cong_list, list) { 84 + if (try_module_get(ca->owner)) { 85 + icsk->icsk_ca_ops = ca; 86 + break; 87 + } 82 88 83 - rcu_read_lock(); 84 - list_for_each_entry_rcu(ca, &tcp_cong_list, list) { 85 - if (try_module_get(ca->owner)) { 86 - icsk->icsk_ca_ops = ca; 87 - break; 89 + /* fallback to next available */ 88 90 } 89 - 91 + rcu_read_unlock(); 90 92 } 91 - rcu_read_unlock(); 92 93 93 94 if (icsk->icsk_ca_ops->init) 94 95 icsk->icsk_ca_ops->init(sk); ··· 237 236 238 237 rcu_read_lock(); 239 238 ca = tcp_ca_find(name); 239 + 240 240 /* no change asking for existing value */ 241 241 if (ca == icsk->icsk_ca_ops) 242 242 goto out; ··· 263 261 else { 264 262 tcp_cleanup_congestion_control(sk); 265 263 icsk->icsk_ca_ops = ca; 266 - if (icsk->icsk_ca_ops->init) 264 + 265 + if (sk->sk_state != TCP_CLOSE && icsk->icsk_ca_ops->init) 267 266 icsk->icsk_ca_ops->init(sk); 268 267 } 269 268 out:
+2 -2
net/ipv4/xfrm4_mode_beet.c
··· 52 52 53 53 ph = (struct ip_beet_phdr *)skb->h.raw; 54 54 ph->padlen = 4 - (optlen & 4); 55 - ph->hdrlen = (optlen + ph->padlen + sizeof(*ph)) / 8; 55 + ph->hdrlen = optlen / 8; 56 56 ph->nexthdr = top_iph->protocol; 57 57 if (ph->padlen) 58 58 memset(ph + 1, IPOPT_NOP, ph->padlen); ··· 85 85 ph = (struct ip_beet_phdr *)(skb->h.ipiph + 1); 86 86 87 87 phlen = sizeof(*ph) + ph->padlen; 88 - optlen = ph->hdrlen * 8 - phlen; 88 + optlen = ph->hdrlen * 8 + (IPV4_BEET_PHMAXLEN - phlen); 89 89 if (optlen < 0 || optlen & 3 || optlen > 250) 90 90 goto out; 91 91
+11
net/ipv6/addrconf.c
··· 172 172 #endif 173 173 #endif 174 174 .proxy_ndp = 0, 175 + .accept_source_route = 0, /* we do not accept RH0 by default. */ 175 176 }; 176 177 177 178 static struct ipv6_devconf ipv6_devconf_dflt __read_mostly = { ··· 204 203 #endif 205 204 #endif 206 205 .proxy_ndp = 0, 206 + .accept_source_route = 0, /* we do not accept RH0 by default. */ 207 207 }; 208 208 209 209 /* IPv6 Wildcard Address and Loopback Address defined by RFC2553 */ ··· 3358 3356 #endif 3359 3357 #endif 3360 3358 array[DEVCONF_PROXY_NDP] = cnf->proxy_ndp; 3359 + array[DEVCONF_ACCEPT_SOURCE_ROUTE] = cnf->accept_source_route; 3361 3360 } 3362 3361 3363 3362 static inline size_t inet6_if_nlmsg_size(void) ··· 3882 3879 .ctl_name = NET_IPV6_PROXY_NDP, 3883 3880 .procname = "proxy_ndp", 3884 3881 .data = &ipv6_devconf.proxy_ndp, 3882 + .maxlen = sizeof(int), 3883 + .mode = 0644, 3884 + .proc_handler = &proc_dointvec, 3885 + }, 3886 + { 3887 + .ctl_name = NET_IPV6_ACCEPT_SOURCE_ROUTE, 3888 + .procname = "accept_source_route", 3889 + .data = &ipv6_devconf.accept_source_route, 3885 3890 .maxlen = sizeof(int), 3886 3891 .mode = 0644, 3887 3892 .proc_handler = &proc_dointvec,
+34 -6
net/ipv6/exthdrs.c
··· 362 362 struct inet6_skb_parm *opt = IP6CB(skb); 363 363 struct in6_addr *addr = NULL; 364 364 struct in6_addr daddr; 365 + struct inet6_dev *idev; 365 366 int n, i; 366 - 367 367 struct ipv6_rt_hdr *hdr; 368 368 struct rt0_hdr *rthdr; 369 + int accept_source_route = ipv6_devconf.accept_source_route; 370 + 371 + if (accept_source_route < 0 || 372 + ((idev = in6_dev_get(skb->dev)) == NULL)) { 373 + kfree_skb(skb); 374 + return -1; 375 + } 376 + if (idev->cnf.accept_source_route < 0) { 377 + in6_dev_put(idev); 378 + kfree_skb(skb); 379 + return -1; 380 + } 381 + 382 + if (accept_source_route > idev->cnf.accept_source_route) 383 + accept_source_route = idev->cnf.accept_source_route; 384 + 385 + in6_dev_put(idev); 369 386 370 387 if (!pskb_may_pull(skb, (skb->h.raw-skb->data)+8) || 371 388 !pskb_may_pull(skb, (skb->h.raw-skb->data)+((skb->h.raw[1]+1)<<3))) { ··· 393 376 } 394 377 395 378 hdr = (struct ipv6_rt_hdr *) skb->h.raw; 379 + 380 + switch (hdr->type) { 381 + #ifdef CONFIG_IPV6_MIP6 382 + break; 383 + #endif 384 + case IPV6_SRCRT_TYPE_0: 385 + if (accept_source_route <= 0) 386 + break; 387 + kfree_skb(skb); 388 + return -1; 389 + default: 390 + IP6_INC_STATS_BH(ip6_dst_idev(skb->dst), 391 + IPSTATS_MIB_INHDRERRORS); 392 + icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, (&hdr->type) - skb->nh.raw); 393 + return -1; 394 + } 396 395 397 396 if (ipv6_addr_is_multicast(&skb->nh.ipv6h->daddr) || 398 397 skb->pkt_type != PACKET_HOST) { ··· 467 434 } 468 435 break; 469 436 #endif 470 - default: 471 - IP6_INC_STATS_BH(ip6_dst_idev(skb->dst), 472 - IPSTATS_MIB_INHDRERRORS); 473 - icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, (&hdr->type) - skb->nh.raw); 474 - return -1; 475 437 } 476 438 477 439 /*