mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-20 21:51:05 +00:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6: (1815 commits) mac80211: fix reorder buffer release iwmc3200wifi: Enable wimax core through module parameter iwmc3200wifi: Add wifi-wimax coexistence mode as a module parameter iwmc3200wifi: Coex table command does not expect a response iwmc3200wifi: Update wiwi priority table iwlwifi: driver version track kernel version iwlwifi: indicate uCode type when fail dump error/event log iwl3945: remove duplicated event logging code b43: fix two warnings ipw2100: fix rebooting hang with driver loaded cfg80211: indent regulatory messages with spaces iwmc3200wifi: fix NULL pointer dereference in pmkid update mac80211: Fix TX status reporting for injected data frames ath9k: enable 2GHz band only if the device supports it airo: Fix integer overflow warning rt2x00: Fix padding bug on L2PAD devices. WE: Fix set events not propagated b43legacy: avoid PPC fault during resume b43: avoid PPC fault during resume tcp: fix a timewait refcnt race ... Fix up conflicts due to sysctl cleanups (dead sysctl_check code and CTL_UNNUMBERED removed) in kernel/sysctl_check.c net/ipv4/sysctl_net_ipv4.c net/ipv6/addrconf.c net/sctp/sysctl.c
This commit is contained in:
commit
d7fc02c7ba
1394 changed files with 113401 additions and 70636 deletions
|
@ -513,43 +513,42 @@ static const struct file_operations rt_cpu_seq_fops = {
|
|||
};
|
||||
|
||||
#ifdef CONFIG_NET_CLS_ROUTE
|
||||
static int ip_rt_acct_read(char *buffer, char **start, off_t offset,
|
||||
int length, int *eof, void *data)
|
||||
static int rt_acct_proc_show(struct seq_file *m, void *v)
|
||||
{
|
||||
unsigned int i;
|
||||
struct ip_rt_acct *dst, *src;
|
||||
unsigned int i, j;
|
||||
|
||||
if ((offset & 3) || (length & 3))
|
||||
return -EIO;
|
||||
dst = kcalloc(256, sizeof(struct ip_rt_acct), GFP_KERNEL);
|
||||
if (!dst)
|
||||
return -ENOMEM;
|
||||
|
||||
if (offset >= sizeof(struct ip_rt_acct) * 256) {
|
||||
*eof = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (offset + length >= sizeof(struct ip_rt_acct) * 256) {
|
||||
length = sizeof(struct ip_rt_acct) * 256 - offset;
|
||||
*eof = 1;
|
||||
}
|
||||
|
||||
offset /= sizeof(u32);
|
||||
|
||||
if (length > 0) {
|
||||
u32 *dst = (u32 *) buffer;
|
||||
|
||||
*start = buffer;
|
||||
memset(dst, 0, length);
|
||||
|
||||
for_each_possible_cpu(i) {
|
||||
unsigned int j;
|
||||
u32 *src;
|
||||
|
||||
src = ((u32 *) per_cpu_ptr(ip_rt_acct, i)) + offset;
|
||||
for (j = 0; j < length/4; j++)
|
||||
dst[j] += src[j];
|
||||
for_each_possible_cpu(i) {
|
||||
src = (struct ip_rt_acct *)per_cpu_ptr(ip_rt_acct, i);
|
||||
for (j = 0; j < 256; j++) {
|
||||
dst[j].o_bytes += src[j].o_bytes;
|
||||
dst[j].o_packets += src[j].o_packets;
|
||||
dst[j].i_bytes += src[j].i_bytes;
|
||||
dst[j].i_packets += src[j].i_packets;
|
||||
}
|
||||
}
|
||||
return length;
|
||||
|
||||
seq_write(m, dst, 256 * sizeof(struct ip_rt_acct));
|
||||
kfree(dst);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int rt_acct_proc_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
return single_open(file, rt_acct_proc_show, NULL);
|
||||
}
|
||||
|
||||
static const struct file_operations rt_acct_proc_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = rt_acct_proc_open,
|
||||
.read = seq_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = single_release,
|
||||
};
|
||||
#endif
|
||||
|
||||
static int __net_init ip_rt_do_proc_init(struct net *net)
|
||||
|
@ -567,8 +566,7 @@ static int __net_init ip_rt_do_proc_init(struct net *net)
|
|||
goto err2;
|
||||
|
||||
#ifdef CONFIG_NET_CLS_ROUTE
|
||||
pde = create_proc_read_entry("rt_acct", 0, net->proc_net,
|
||||
ip_rt_acct_read, NULL);
|
||||
pde = proc_create("rt_acct", 0, net->proc_net, &rt_acct_proc_fops);
|
||||
if (!pde)
|
||||
goto err3;
|
||||
#endif
|
||||
|
@ -703,7 +701,7 @@ static inline int compare_keys(struct flowi *fl1, struct flowi *fl2)
|
|||
|
||||
static inline int compare_netns(struct rtable *rt1, struct rtable *rt2)
|
||||
{
|
||||
return dev_net(rt1->u.dst.dev) == dev_net(rt2->u.dst.dev);
|
||||
return net_eq(dev_net(rt1->u.dst.dev), dev_net(rt2->u.dst.dev));
|
||||
}
|
||||
|
||||
static inline int rt_is_expired(struct rtable *rth)
|
||||
|
@ -902,6 +900,12 @@ void rt_cache_flush(struct net *net, int delay)
|
|||
rt_do_flush(!in_softirq());
|
||||
}
|
||||
|
||||
/* Flush previous cache invalidated entries from the cache */
|
||||
void rt_cache_flush_batch(void)
|
||||
{
|
||||
rt_do_flush(!in_softirq());
|
||||
}
|
||||
|
||||
/*
|
||||
* We change rt_genid and let gc do the cleanup
|
||||
*/
|
||||
|
@ -1346,9 +1350,9 @@ void ip_rt_redirect(__be32 old_gw, __be32 daddr, __be32 new_gw,
|
|||
return;
|
||||
|
||||
net = dev_net(dev);
|
||||
if (new_gw == old_gw || !IN_DEV_RX_REDIRECTS(in_dev)
|
||||
|| ipv4_is_multicast(new_gw) || ipv4_is_lbcast(new_gw)
|
||||
|| ipv4_is_zeronet(new_gw))
|
||||
if (new_gw == old_gw || !IN_DEV_RX_REDIRECTS(in_dev) ||
|
||||
ipv4_is_multicast(new_gw) || ipv4_is_lbcast(new_gw) ||
|
||||
ipv4_is_zeronet(new_gw))
|
||||
goto reject_redirect;
|
||||
|
||||
if (!rt_caching(net))
|
||||
|
@ -1628,9 +1632,6 @@ unsigned short ip_rt_frag_needed(struct net *net, struct iphdr *iph,
|
|||
__be32 daddr = iph->daddr;
|
||||
unsigned short est_mtu = 0;
|
||||
|
||||
if (ipv4_config.no_pmtu_disc)
|
||||
return 0;
|
||||
|
||||
for (k = 0; k < 2; k++) {
|
||||
for (i = 0; i < 2; i++) {
|
||||
unsigned hash = rt_hash(daddr, skeys[i], ikeys[k],
|
||||
|
@ -2314,10 +2315,11 @@ skip_cache:
|
|||
ip_hdr(skb)->protocol);
|
||||
if (our
|
||||
#ifdef CONFIG_IP_MROUTE
|
||||
|| (!ipv4_is_local_multicast(daddr) &&
|
||||
IN_DEV_MFORWARD(in_dev))
|
||||
||
|
||||
(!ipv4_is_local_multicast(daddr) &&
|
||||
IN_DEV_MFORWARD(in_dev))
|
||||
#endif
|
||||
) {
|
||||
) {
|
||||
rcu_read_unlock();
|
||||
return ip_route_input_mc(skb, daddr, saddr,
|
||||
tos, dev, our);
|
||||
|
@ -2514,9 +2516,9 @@ static int ip_route_output_slow(struct net *net, struct rtable **rp,
|
|||
of another iface. --ANK
|
||||
*/
|
||||
|
||||
if (oldflp->oif == 0
|
||||
&& (ipv4_is_multicast(oldflp->fl4_dst) ||
|
||||
oldflp->fl4_dst == htonl(0xFFFFFFFF))) {
|
||||
if (oldflp->oif == 0 &&
|
||||
(ipv4_is_multicast(oldflp->fl4_dst) ||
|
||||
oldflp->fl4_dst == htonl(0xFFFFFFFF))) {
|
||||
/* It is equivalent to inet_addr_type(saddr) == RTN_LOCAL */
|
||||
dev_out = ip_dev_find(net, oldflp->fl4_src);
|
||||
if (dev_out == NULL)
|
||||
|
@ -2855,7 +2857,7 @@ static int rt_fill_info(struct net *net,
|
|||
error = rt->u.dst.error;
|
||||
expires = rt->u.dst.expires ? rt->u.dst.expires - jiffies : 0;
|
||||
if (rt->peer) {
|
||||
id = rt->peer->ip_id_count;
|
||||
id = atomic_read(&rt->peer->ip_id_count) & 0xffff;
|
||||
if (rt->peer->tcp_ts_stamp) {
|
||||
ts = rt->peer->tcp_ts;
|
||||
tsage = get_seconds() - rt->peer->tcp_ts_stamp;
|
||||
|
@ -3257,7 +3259,7 @@ static __net_init int sysctl_route_net_init(struct net *net)
|
|||
struct ctl_table *tbl;
|
||||
|
||||
tbl = ipv4_route_flush_table;
|
||||
if (net != &init_net) {
|
||||
if (!net_eq(net, &init_net)) {
|
||||
tbl = kmemdup(tbl, sizeof(ipv4_route_flush_table), GFP_KERNEL);
|
||||
if (tbl == NULL)
|
||||
goto err_dup;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue