Commit fa8d24b9 authored by Linus Torvalds's avatar Linus Torvalds

Merge master.kernel.org:/home/davem/BK/net-2.5

into home.transmeta.com:/home/torvalds/v2.5/linux
parents 50da7d0e 15fea123
...@@ -2779,6 +2779,10 @@ N: Christopher Smith ...@@ -2779,6 +2779,10 @@ N: Christopher Smith
E: x@xman.org E: x@xman.org
D: Tulip net driver hacker D: Tulip net driver hacker
N: Mark Smith
E: mark.smith@comdev.cc
D: Multicast support in bonding driver
N: Miquel van Smoorenburg N: Miquel van Smoorenburg
E: miquels@cistron.nl E: miquels@cistron.nl
D: Kernel and net hacker. Sysvinit, minicom. doing Debian stuff. D: Kernel and net hacker. Sysvinit, minicom. doing Debian stuff.
......
This diff is collapsed.
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
#define BOND_STATE_ACTIVE 0 /* link is active */ #define BOND_STATE_ACTIVE 0 /* link is active */
#define BOND_STATE_BACKUP 1 /* link is backup */ #define BOND_STATE_BACKUP 1 /* link is backup */
#define MAX_BONDS 1 /* Maximum number of devices to support */ #define BOND_DEFAULT_MAX_BONDS 1 /* Default maximum number of devices to support */
typedef struct ifbond { typedef struct ifbond {
__s32 bond_mode; __s32 bond_mode;
...@@ -76,6 +76,7 @@ typedef struct slave { ...@@ -76,6 +76,7 @@ typedef struct slave {
short delay; short delay;
char link; /* one of BOND_LINK_XXXX */ char link; /* one of BOND_LINK_XXXX */
char state; /* one of BOND_STATE_XXXX */ char state; /* one of BOND_STATE_XXXX */
unsigned short original_flags;
u32 link_failure_count; u32 link_failure_count;
} slave_t; } slave_t;
...@@ -104,6 +105,8 @@ typedef struct bonding { ...@@ -104,6 +105,8 @@ typedef struct bonding {
#endif /* CONFIG_PROC_FS */ #endif /* CONFIG_PROC_FS */
struct bonding *next_bond; struct bonding *next_bond;
struct net_device *device; struct net_device *device;
struct dev_mc_list *mc_list;
unsigned short flags;
} bonding_t; } bonding_t;
#endif /* __KERNEL__ */ #endif /* __KERNEL__ */
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#define PSCHED_CLOCK_SOURCE PSCHED_JIFFIES #define PSCHED_CLOCK_SOURCE PSCHED_JIFFIES
#include <linux/config.h> #include <linux/config.h>
#include <linux/types.h>
#include <linux/pkt_sched.h> #include <linux/pkt_sched.h>
#include <net/pkt_cls.h> #include <net/pkt_cls.h>
...@@ -221,7 +222,7 @@ extern psched_time_t psched_time_base; ...@@ -221,7 +222,7 @@ extern psched_time_t psched_time_base;
#define PSCHED_EXPORTLIST_2 #define PSCHED_EXPORTLIST_2
#if ~0UL == 0xFFFFFFFF #if BITS_PER_LONG <= 32
#define PSCHED_WATCHER unsigned long #define PSCHED_WATCHER unsigned long
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
* *
* Fixes: * Fixes:
* Hideaki YOSHIFUJI : sin6_scope_id support * Hideaki YOSHIFUJI : sin6_scope_id support
* YOSHIFUJI,H.@USAGI : raw checksum (RFC2292(bis) compliance)
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
...@@ -487,11 +488,18 @@ static int rawv6_frag_cksum(const void *data, struct in6_addr *addr, ...@@ -487,11 +488,18 @@ static int rawv6_frag_cksum(const void *data, struct in6_addr *addr,
hdr->cksum = csum_ipv6_magic(addr, daddr, hdr->len, hdr->cksum = csum_ipv6_magic(addr, daddr, hdr->len,
hdr->proto, hdr->cksum); hdr->proto, hdr->cksum);
if (opt->offset < len) { if (opt->offset + 1 < len) {
__u16 *csum; __u16 *csum;
csum = (__u16 *) (buff + opt->offset); csum = (__u16 *) (buff + opt->offset);
*csum = hdr->cksum; if (*csum) {
/* in case cksum was not initialized */
__u32 sum = hdr->cksum;
sum += *csum;
*csum = hdr->cksum = (sum + (sum>>16));
} else {
*csum = hdr->cksum;
}
} else { } else {
if (net_ratelimit()) if (net_ratelimit())
printk(KERN_DEBUG "icmp: cksum offset too big\n"); printk(KERN_DEBUG "icmp: cksum offset too big\n");
...@@ -720,6 +728,10 @@ static int rawv6_setsockopt(struct sock *sk, int level, int optname, ...@@ -720,6 +728,10 @@ static int rawv6_setsockopt(struct sock *sk, int level, int optname,
switch (optname) { switch (optname) {
case IPV6_CHECKSUM: case IPV6_CHECKSUM:
/* You may get strange result with a positive odd offset;
RFC2292bis agrees with me. */
if (val > 0 && (val&1))
return(-EINVAL);
if (val < 0) { if (val < 0) {
opt->checksum = 0; opt->checksum = 0;
} else { } else {
...@@ -817,6 +829,11 @@ static void rawv6_close(struct sock *sk, long timeout) ...@@ -817,6 +829,11 @@ static void rawv6_close(struct sock *sk, long timeout)
static int rawv6_init_sk(struct sock *sk) static int rawv6_init_sk(struct sock *sk)
{ {
if (inet_sk(sk)->num == IPPROTO_ICMPV6) {
struct raw6_opt *opt = raw6_sk(sk);
opt->checksum = 1;
opt->offset = 2;
}
return(0); return(0);
} }
......
...@@ -1117,7 +1117,7 @@ static void psched_tick(unsigned long dummy) ...@@ -1117,7 +1117,7 @@ static void psched_tick(unsigned long dummy)
psched_timer.expires = jiffies + 1*HZ; psched_timer.expires = jiffies + 1*HZ;
#else #else
unsigned long now = jiffies; unsigned long now = jiffies;
psched_time_base = ((u64)now)<<PSCHED_JSCALE; psched_time_base += ((u64)(now-psched_time_mark))<<PSCHED_JSCALE;
psched_time_mark = now; psched_time_mark = now;
psched_timer.expires = now + 60*60*HZ; psched_timer.expires = now + 60*60*HZ;
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment