Commit 587f241d authored by Linus Torvalds's avatar Linus Torvalds

Import 2.3.35pre3

parent 412da72d
# $Id: config.in,v 1.78 1999/12/20 05:01:36 davem Exp $
# $Id: config.in,v 1.79 1999/12/23 01:46:00 davem Exp $
# For a description of the syntax of this configuration file,
# see the Configure script.
#
......@@ -143,7 +143,7 @@ if [ "$CONFIG_SCSI" != "n" ]; then
mainmenu_option next_comment
comment 'SCSI low-level drivers'
bool 'Sparc ESP Scsi Driver' CONFIG_SCSI_SUNESP $CONFIG_SCSI
tristate 'Sparc ESP Scsi Driver' CONFIG_SCSI_SUNESP $CONFIG_SCSI
tristate 'PTI Qlogic,ISP Driver' CONFIG_SCSI_QLOGICPTI $CONFIG_SCSI
endmenu
fi
......
/* $Id: srmmu.c,v 1.198 1999/11/14 06:15:14 zaitcev Exp $
/* $Id: srmmu.c,v 1.199 1999/12/23 02:00:51 davem Exp $
* srmmu.c: SRMMU specific routines for memory management.
*
* Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
......@@ -1560,7 +1560,8 @@ static unsigned long __init map_spbank(unsigned long vbase, int sp_entry)
srmmu_map[srmmu_bank].vbase = vbase;
srmmu_map[srmmu_bank].pbase = sp_banks[sp_entry].base_addr;
srmmu_map[srmmu_bank].size = sp_banks[sp_entry].num_bytes;
srmmu_bank++;
if (srmmu_map[srmmu_bank].size)
srmmu_bank++;
map_spbank_last_pa = pstart - SRMMU_PGDIR_SIZE;
return vstart;
}
......
# $Id: config.in,v 1.85 1999/12/20 05:01:56 davem Exp $
# $Id: config.in,v 1.86 1999/12/23 01:46:09 davem Exp $
# For a description of the syntax of this configuration file,
# see the Configure script.
#
......@@ -145,7 +145,7 @@ if [ "$CONFIG_SCSI" != "n" ]; then
mainmenu_option next_comment
comment 'SCSI low-level drivers'
bool 'Sparc ESP Scsi Driver' CONFIG_SCSI_SUNESP $CONFIG_SCSI
tristate 'Sparc ESP Scsi Driver' CONFIG_SCSI_SUNESP $CONFIG_SCSI
tristate 'PTI Qlogic, ISP Driver' CONFIG_SCSI_QLOGICPTI $CONFIG_SCSI
if [ "$CONFIG_PCI" != "n" ]; then
......
......@@ -30,6 +30,7 @@
static struct pci_simple_probe_entry controller_list[] = {
{ PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1225, 0, 0, &yenta_operations },
{ 0x1180, 0x0475, 0, 0, &yenta_operations },
{ 0, 0, 0, 0, NULL }
};
......
......@@ -23,10 +23,10 @@
static int yenta_inquire(pci_socket_t *socket, socket_cap_t *cap)
{
cap->features = SS_CAP_PAGE_REGS | SS_CAP_PCCARD | SS_CAP_CARDBUS;
cap->irq_mask = 0;
cap->map_size = 0;
cap->irq_mask = 0xdeb8; /* irq 15,14,12,11,10,9,7,5,4,3 */
cap->map_size = 0x1000;
cap->pci_irq = socket->irq;
cap->cardbus = 1;
cap->cardbus = 0;
cap->cb_bus = NULL;
cap->bus = NULL;
......@@ -36,7 +36,7 @@ printk("yenta_inquire()\n");
}
/*
* Silly interface. We convert the cardbus status to a internal status,
* Silly interface. We convert the cardbus status to a internal status,
* and we probably really should keep it in cardbus status form and
* only convert for old-style 16-bit PCMCIA cards..
*/
......@@ -265,7 +265,7 @@ static int yenta_get_mem_map(pci_socket_t *socket, struct pccard_mem_map *mem)
mem->speed = (stop & I365_MEM_WS0) ? 1 : 0;
mem->speed += (stop & I365_MEM_WS1) ? 2 : 0;
mem->speed = to_ns(mem->speed);
stop = ((u_long)(stop & 0x0fff) << 12) + 0x0fff;
stop = ((stop & 0x0fff) << 12) + 0x0fff;
offset = exca_readw(socket, I365_MEM(map) + I365_W_OFF);
mem->flags |= (offset & I365_MEM_WRPROT) ? MAP_WRPROT : 0;
......@@ -353,13 +353,31 @@ static void yenta_proc_setup(pci_socket_t *socket, struct proc_dir_entry *base)
static void yenta_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
pci_socket_t *sock = (pci_socket_t *) dev_id;
u32 event = readl(sock->base + CB_SOCKET_EVENT);
u8 csc;
u32 cb_event;
unsigned int events;
pci_socket_t *socket = (pci_socket_t *) dev_id;
/* Clear interrupt status for the event */
writel(event, sock->base +CB_SOCKET_EVENT);
cb_event = cb_readl(socket, CB_SOCKET_EVENT);
cb_writel(socket, CB_SOCKET_EVENT, cb_event);
printk("Socket interrupt event %08x\n", event);
csc = exca_readb(socket, I365_CSC);
events = (cb_event & (CB_CD1EVENT | CB_CD2EVENT)) ? SS_DETECT : 0 ;
events |= (csc & I365_CSC_DETECT) ? SS_DETECT : 0;
if (exca_readb(socket, I365_INTCTL) & I365_PC_IOCARD) {
events |= (csc & I365_CSC_STSCHG) ? SS_STSCHG : 0;
} else {
events |= (csc & I365_CSC_BVD1) ? SS_BATDEAD : 0;
events |= (csc & I365_CSC_BVD2) ? SS_BATWARN : 0;
events |= (csc & I365_CSC_READY) ? SS_READY : 0;
}
printk("Socket interrupt event %08x (%08x %02x)\n", events, cb_event, csc);
if (events && socket->handler)
socket->handler(socket->info, events);
}
/*
......
/* $Id: esp.c,v 1.88 1999/12/21 02:38:07 davem Exp $
/* $Id: esp.c,v 1.89 1999/12/23 01:46:14 davem Exp $
* esp.c: EnhancedScsiProcessor Sun SCSI driver code.
*
* Copyright (C) 1995, 1998 David S. Miller (davem@caip.rutgers.edu)
......@@ -40,6 +40,8 @@
#include <asm/irq.h>
#include <asm/idprom.h>
#include <linux/module.h>
#define DEBUG_ESP
/* #define DEBUG_ESP_HME */
/* #define DEBUG_ESP_DATA */
......@@ -4337,3 +4339,11 @@ static void esp_intr(int irq, void *dev_id, struct pt_regs *pregs)
}
spin_unlock_irqrestore(&esp->lock, flags);
}
#ifdef MODULE
Scsi_Host_Template driver_template = SCSI_SPARC_ESP;
#include "scsi_module.c"
EXPORT_NO_SYMBOLS;
#endif /* MODULE */
......@@ -18,20 +18,20 @@
*/
struct qnx4_inode_info {
char i_reserved[16]; /* 16 */
off_t i_size; /* 4 */
_xtnt_t i_first_xtnt; /* 8 */
qnx4_off_t i_size; /* 4 */
qnx4_xtnt_t i_first_xtnt; /* 8 */
long i_xblk; /* 4 */
time_t i_ftime; /* 4 */
time_t i_mtime; /* 4 */
time_t i_atime; /* 4 */
time_t i_ctime; /* 4 */
_nxtnt_t i_num_xtnts; /* 2 */
qnx4_nxtnt_t i_num_xtnts; /* 2 */
mode_t i_mode; /* 2 */
muid_t i_uid; /* 2 */
mgid_t i_gid; /* 2 */
nlink_t i_nlink; /* 2 */
qnx4_muid_t i_uid; /* 2 */
qnx4_mgid_t i_gid; /* 2 */
qnx4_nlink_t i_nlink; /* 2 */
char i_zero[4]; /* 4 */
_ftype_t i_type; /* 1 */
qnx4_ftype_t i_type; /* 1 */
unsigned char i_status; /* 1 */
};
......
......@@ -11,7 +11,7 @@
#ifndef _QNX4_FS_SB
#define _QNX4_FS_SB
#include <linux/qnxtypes.h>
#include <linux/qnx4_fs.h>
/*
* qnx4 super-block data in memory
......
......@@ -12,17 +12,17 @@
#ifndef _QNX4TYPES_H
#define _QNX4TYPES_H
typedef unsigned short _nxtnt_t;
typedef unsigned char _ftype_t;
typedef unsigned short qnx4_nxtnt_t;
typedef unsigned char qnx4_ftype_t;
typedef struct {
long xtnt_blk;
long xtnt_size;
} _xtnt_t;
} qnx4_xtnt_t;
typedef unsigned short muid_t;
typedef unsigned short mgid_t;
typedef unsigned long qnx_off_t;
typedef unsigned short qnx_nlink_t;
typedef unsigned short qnx4_muid_t;
typedef unsigned short qnx4_mgid_t;
typedef unsigned long qnx4_off_t;
typedef unsigned short qnx4_nlink_t;
#endif
......@@ -168,19 +168,25 @@ extern struct sk_buff * alloc_skb(unsigned int size, int priority);
extern struct sk_buff * dev_alloc_skb(unsigned int size);
extern void kfree_skbmem(struct sk_buff *skb);
extern struct sk_buff * skb_clone(struct sk_buff *skb, int priority);
extern struct sk_buff * skb_copy(struct sk_buff *skb, int priority);
extern struct sk_buff * skb_realloc_headroom(struct sk_buff *skb, int newheadroom);
extern struct sk_buff * skb_copy(const struct sk_buff *skb, int priority);
extern struct sk_buff * skb_copy_expand(const struct sk_buff *skb,
int newheadroom,
int newtailroom,
int priority);
#define dev_kfree_skb(a) kfree_skb(a)
extern unsigned char * skb_put(struct sk_buff *skb, unsigned int len);
extern unsigned char * skb_push(struct sk_buff *skb, unsigned int len);
extern unsigned char * skb_pull(struct sk_buff *skb, unsigned int len);
extern int skb_headroom(struct sk_buff *skb);
extern int skb_tailroom(struct sk_buff *skb);
extern int skb_headroom(const struct sk_buff *skb);
extern int skb_tailroom(const struct sk_buff *skb);
extern void skb_reserve(struct sk_buff *skb, unsigned int len);
extern void skb_trim(struct sk_buff *skb, unsigned int len);
extern void skb_over_panic(struct sk_buff *skb, int len, void *here);
extern void skb_under_panic(struct sk_buff *skb, int len, void *here);
/* Backwards compatibility */
#define skb_realloc_headroom(skb, nhr) skb_copy_expand(skb, nhr, skb_tailroom(skb), GFP_ATOMIC)
/* Internal */
extern __inline__ atomic_t *skb_datarefp(struct sk_buff *skb)
{
......@@ -534,12 +540,12 @@ extern __inline__ unsigned char * skb_pull(struct sk_buff *skb, unsigned int len
return __skb_pull(skb,len);
}
extern __inline__ int skb_headroom(struct sk_buff *skb)
extern __inline__ int skb_headroom(const struct sk_buff *skb)
{
return skb->data-skb->head;
}
extern __inline__ int skb_tailroom(struct sk_buff *skb)
extern __inline__ int skb_tailroom(const struct sk_buff *skb)
{
return skb->end-skb->tail;
}
......
......@@ -55,7 +55,7 @@
* Adam Sulmicki : Bug Fix : Network Device Unload
* A network device unload needs to purge
* the backlog queue.
* Paul Rusty Russel : SIOCSIFNAME
* Paul Rusty Russell : SIOCSIFNAME
*/
#include <asm/uaccess.h>
......
......@@ -4,7 +4,7 @@
* Authors: Alan Cox <iiitac@pyr.swan.ac.uk>
* Florian La Roche <rzsfl@rz.uni-sb.de>
*
* Version: $Id: skbuff.c,v 1.60 1999/08/23 07:02:01 davem Exp $
* Version: $Id: skbuff.c,v 1.62 1999/12/23 02:13:42 davem Exp $
*
* Fixes:
* Alan Cox : Fixed the worst of the load balancer bugs.
......@@ -275,14 +275,48 @@ struct sk_buff *skb_clone(struct sk_buff *skb, int gfp_mask)
return n;
}
static void copy_skb_header(struct sk_buff *new, const struct sk_buff *old)
{
/*
* Shift between the two data areas in bytes
*/
unsigned long offset = new->data - old->data;
new->list=NULL;
new->sk=NULL;
new->dev=old->dev;
new->rx_dev=NULL;
new->priority=old->priority;
new->protocol=old->protocol;
new->dst=dst_clone(old->dst);
new->h.raw=old->h.raw+offset;
new->nh.raw=old->nh.raw+offset;
new->mac.raw=old->mac.raw+offset;
memcpy(new->cb, old->cb, sizeof(old->cb));
new->used=old->used;
new->is_clone=0;
atomic_set(&new->users, 1);
new->pkt_type=old->pkt_type;
new->stamp=old->stamp;
new->destructor = NULL;
new->security=old->security;
#ifdef CONFIG_NETFILTER
new->nfmark=old->nfmark;
new->nfreason=old->nfreason;
new->nfcache=old->nfcache;
#ifdef CONFIG_NETFILTER_DEBUG
new->nf_debug=old->nf_debug;
#endif
#endif
}
/*
* This is slower, and copies the whole data area
*/
struct sk_buff *skb_copy(struct sk_buff *skb, int gfp_mask)
struct sk_buff *skb_copy(const struct sk_buff *skb, int gfp_mask)
{
struct sk_buff *n;
unsigned long offset;
/*
* Allocate the copy buffer
......@@ -292,12 +326,6 @@ struct sk_buff *skb_copy(struct sk_buff *skb, int gfp_mask)
if(n==NULL)
return NULL;
/*
* Shift between the two data areas in bytes
*/
offset=n->head-skb->head;
/* Set the data pointer */
skb_reserve(n,skb->data-skb->head);
/* Set the tail pointer and length */
......@@ -305,86 +333,35 @@ struct sk_buff *skb_copy(struct sk_buff *skb, int gfp_mask)
/* Copy the bytes */
memcpy(n->head,skb->head,skb->end-skb->head);
n->csum = skb->csum;
n->list=NULL;
n->sk=NULL;
n->dev=skb->dev;
n->rx_dev=NULL;
n->priority=skb->priority;
n->protocol=skb->protocol;
n->dst=dst_clone(skb->dst);
n->h.raw=skb->h.raw+offset;
n->nh.raw=skb->nh.raw+offset;
n->mac.raw=skb->mac.raw+offset;
memcpy(n->cb, skb->cb, sizeof(skb->cb));
n->used=skb->used;
n->is_clone=0;
atomic_set(&n->users, 1);
n->pkt_type=skb->pkt_type;
n->stamp=skb->stamp;
n->destructor = NULL;
n->security=skb->security;
#ifdef CONFIG_NETFILTER
n->nfmark=skb->nfmark;
n->nfreason=skb->nfreason;
n->nfcache=skb->nfcache;
#ifdef CONFIG_NETFILTER_DEBUG
n->nf_debug=skb->nf_debug;
#endif
#endif
copy_skb_header(n, skb);
return n;
}
struct sk_buff *skb_realloc_headroom(struct sk_buff *skb, int newheadroom)
struct sk_buff *skb_copy_expand(const struct sk_buff *skb,
int newheadroom,
int newtailroom,
int gfp_mask)
{
struct sk_buff *n;
unsigned long offset;
/*
* Allocate the copy buffer
*/
n=alloc_skb((skb->end-skb->data)+newheadroom, GFP_ATOMIC);
n=alloc_skb(newheadroom + (skb->tail - skb->data) + newtailroom,
gfp_mask);
if(n==NULL)
return NULL;
skb_reserve(n,newheadroom);
/*
* Shift between the two data areas in bytes
*/
offset=n->data-skb->data;
/* Set the tail pointer and length */
skb_put(n,skb->len);
/* Copy the bytes */
memcpy(n->data,skb->data,skb->len);
n->list=NULL;
n->sk=NULL;
n->priority=skb->priority;
n->protocol=skb->protocol;
n->dev=skb->dev;
n->rx_dev=NULL;
n->dst=dst_clone(skb->dst);
n->h.raw=skb->h.raw+offset;
n->nh.raw=skb->nh.raw+offset;
n->mac.raw=skb->mac.raw+offset;
memcpy(n->cb, skb->cb, sizeof(skb->cb));
n->used=skb->used;
n->is_clone=0;
atomic_set(&n->users, 1);
n->pkt_type=skb->pkt_type;
n->stamp=skb->stamp;
n->destructor = NULL;
n->security=skb->security;
#ifdef CONFIG_NETFILTER
n->nfmark=skb->nfmark;
n->nfreason=skb->nfreason;
n->nfcache=skb->nfcache;
#ifdef CONFIG_NETFILTER_DEBUG
n->nf_debug=skb->nf_debug;
#endif
#endif
/* Copy the bytes: data pointers must point to same data. */
memcpy(n->data - skb_headroom(skb), skb->head, skb->end-skb->head);
copy_skb_header(n, skb);
return n;
}
......
......@@ -7,7 +7,7 @@
* handler for protocols to use and generic option handler.
*
*
* Version: $Id: sock.c,v 1.86 1999/09/01 08:11:49 davem Exp $
* Version: $Id: sock.c,v 1.87 1999/11/23 08:56:59 davem Exp $
*
* Authors: Ross Biro, <bir7@leland.Stanford.Edu>
* Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
......
......@@ -5,7 +5,7 @@
*
* PF_INET protocol family socket handler.
*
* Version: $Id: af_inet.c,v 1.97 1999/09/08 03:46:46 davem Exp $
* Version: $Id: af_inet.c,v 1.100 1999/12/21 04:05:02 davem Exp $
*
* Authors: Ross Biro, <bir7@leland.Stanford.Edu>
* Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
......
/* linux/net/inet/arp.c
*
* Version: $Id: arp.c,v 1.81 1999/08/30 10:17:05 davem Exp $
* Version: $Id: arp.c,v 1.83 1999/12/15 22:39:03 davem Exp $
*
* Copyright (C) 1994 by Florian La Roche
*
......
......@@ -5,7 +5,7 @@
*
* IPv4 Forwarding Information Base: FIB frontend.
*
* Version: $Id: fib_frontend.c,v 1.19 1999/08/31 07:03:23 davem Exp $
* Version: $Id: fib_frontend.c,v 1.21 1999/12/15 22:39:07 davem Exp $
*
* Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
*
......
......@@ -3,7 +3,7 @@
*
* Alan Cox, <alan@redhat.com>
*
* Version: $Id: icmp.c,v 1.61 1999/08/31 07:03:33 davem Exp $
* Version: $Id: icmp.c,v 1.62 1999/12/23 01:43:37 davem Exp $
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
......@@ -483,7 +483,7 @@ static int icmp_glue_bits(const void *p, char *to, unsigned int offset, unsigned
unsigned long csum;
if (offset) {
icmp_param->csum=csum_partial_copy(icmp_param->data_ptr+offset-sizeof(struct icmphdr),
icmp_param->csum=csum_partial_copy_nocheck(icmp_param->data_ptr+offset-sizeof(struct icmphdr),
to, fraglen,icmp_param->csum);
return 0;
}
......@@ -493,10 +493,10 @@ static int icmp_glue_bits(const void *p, char *to, unsigned int offset, unsigned
* the other fragments first, so that we get the checksum
* for the whole packet here.
*/
csum = csum_partial_copy((void *)&icmp_param->icmph,
csum = csum_partial_copy_nocheck((void *)&icmp_param->icmph,
to, sizeof(struct icmphdr),
icmp_param->csum);
csum = csum_partial_copy(icmp_param->data_ptr,
csum = csum_partial_copy_nocheck(icmp_param->data_ptr,
to+sizeof(struct icmphdr),
fraglen-sizeof(struct icmphdr), csum);
icmph=(struct icmphdr *)to;
......
......@@ -8,7 +8,7 @@
* the older version didn't come out right using gcc 2.5.8, the newer one
* seems to fall out with gcc 2.6.2.
*
* Version: $Id: igmp.c,v 1.34 1999/08/20 11:05:12 davem Exp $
* Version: $Id: igmp.c,v 1.35 1999/12/15 22:39:10 davem Exp $
*
* Authors:
* Alan Cox <Alan.Cox@linux.org>
......
......@@ -5,7 +5,7 @@
*
* The Internet Protocol (IP) output module.
*
* Version: $Id: ip_output.c,v 1.72 1999/09/07 02:31:15 davem Exp $
* Version: $Id: ip_output.c,v 1.75 1999/12/21 04:05:04 davem Exp $
*
* Authors: Ross Biro, <bir7@leland.Stanford.Edu>
* Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
......
......@@ -9,7 +9,7 @@
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*
* Version: $Id: ipmr.c,v 1.46 1999/08/31 07:03:44 davem Exp $
* Version: $Id: ipmr.c,v 1.48 1999/12/15 22:39:16 davem Exp $
*
* Fixes:
* Michael Chastain : Incorrect size of copying.
......
......@@ -7,7 +7,7 @@
* PROC file system. It is mainly used for debugging and
* statistics.
*
* Version: $Id: proc.c,v 1.36 1999/07/02 11:26:34 davem Exp $
* Version: $Id: proc.c,v 1.37 1999/12/15 22:39:19 davem Exp $
*
* Authors: Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
* Gerald J. Heim, <heim@peanuts.informatik.uni-tuebingen.de>
......
......@@ -5,7 +5,7 @@
*
* RAW - implementation of IP "raw" sockets.
*
* Version: $Id: raw.c,v 1.43 1999/08/20 11:05:57 davem Exp $
* Version: $Id: raw.c,v 1.44 1999/12/15 22:39:21 davem Exp $
*
* Authors: Ross Biro, <bir7@leland.Stanford.Edu>
* Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
......
......@@ -5,7 +5,7 @@
*
* ROUTE - implementation of the IP router.
*
* Version: $Id: route.c,v 1.72 1999/08/30 10:17:12 davem Exp $
* Version: $Id: route.c,v 1.75 1999/12/23 01:41:44 davem Exp $
*
* Authors: Ross Biro, <bir7@leland.Stanford.Edu>
* Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
......@@ -736,7 +736,7 @@ void ip_rt_redirect(u32 old_gw, u32 daddr, u32 new_gw,
goto do_next;
}
rt_del(hash, rt);
rt_del(hash, rth);
if (!rt_intern_hash(hash, rt, &rt))
ip_rt_put(rt);
goto do_next;
......
......@@ -5,7 +5,7 @@
*
* Implementation of the Transmission Control Protocol(TCP).
*
* Version: $Id: tcp.c,v 1.151 1999/09/07 02:31:21 davem Exp $
* Version: $Id: tcp.c,v 1.152 1999/11/23 08:57:03 davem Exp $
*
* Authors: Ross Biro, <bir7@leland.Stanford.Edu>
* Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
......
......@@ -5,7 +5,7 @@
*
* Implementation of the Transmission Control Protocol(TCP).
*
* Version: $Id: tcp_input.c,v 1.173 1999/09/07 02:31:27 davem Exp $
* Version: $Id: tcp_input.c,v 1.176 1999/12/20 05:19:46 davem Exp $
*
* Authors: Ross Biro, <bir7@leland.Stanford.Edu>
* Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
......
......@@ -5,7 +5,7 @@
*
* Implementation of the Transmission Control Protocol(TCP).
*
* Version: $Id: tcp_ipv4.c,v 1.189 1999/09/07 02:31:33 davem Exp $
* Version: $Id: tcp_ipv4.c,v 1.192 1999/12/23 02:04:50 davem Exp $
*
* IPv4 specific functions
*
......@@ -528,7 +528,10 @@ __inline__ struct sock *tcp_v4_lookup_listener(u32 daddr, unsigned short hnum, i
read_lock(&tcp_lhash_lock);
sk = tcp_listening_hash[tcp_lhashfn(hnum)];
if (sk) {
if (sk->num == hnum && sk->next == NULL)
if (sk->num == hnum &&
sk->next == NULL &&
(!sk->rcv_saddr || sk->rcv_saddr == daddr) &&
!sk->bound_dev_if)
goto sherry_cache;
sk = __tcp_v4_lookup_listener(sk, daddr, hnum, dif);
}
......
......@@ -5,7 +5,7 @@
*
* The User Datagram Protocol (UDP).
*
* Version: $Id: udp.c,v 1.74 1999/08/20 11:06:12 davem Exp $
* Version: $Id: udp.c,v 1.75 1999/12/15 22:39:34 davem Exp $
*
* Authors: Ross Biro, <bir7@leland.Stanford.Edu>
* Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
......
......@@ -6,7 +6,7 @@
* Pedro Roque <roque@di.fc.ul.pt>
* Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
*
* $Id: addrconf.c,v 1.53 1999/08/31 07:03:54 davem Exp $
* $Id: addrconf.c,v 1.55 1999/12/15 22:39:40 davem Exp $
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
......
......@@ -7,7 +7,7 @@
*
* Adapted from linux/net/ipv4/af_inet.c
*
* $Id: af_inet6.c,v 1.47 1999/08/31 07:03:58 davem Exp $
* $Id: af_inet6.c,v 1.49 1999/12/15 22:39:43 davem Exp $
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
......
......@@ -5,7 +5,7 @@
* Authors:
* Pedro Roque <roque@di.fc.ul.pt>
*
* $Id: mcast.c,v 1.26 1999/08/31 07:04:08 davem Exp $
* $Id: mcast.c,v 1.27 1999/12/09 00:52:49 davem Exp $
*
* Based on linux/ipv4/igmp.c and linux/ipv4/ip_sockglue.c
*
......
......@@ -7,7 +7,7 @@
* PROC file system. This is very similar to the IPv4 version,
* except it reports the sockets in the INET6 address family.
*
* Version: $Id: proc.c,v 1.11 1999/07/02 11:26:45 davem Exp $
* Version: $Id: proc.c,v 1.12 1999/12/15 22:39:48 davem Exp $
*
* Authors: David S. Miller (davem@caip.rutgers.edu)
*
......
......@@ -7,7 +7,7 @@
*
* Adapted from linux/net/ipv4/raw.c
*
* $Id: raw.c,v 1.29 1999/08/20 11:06:26 davem Exp $
* $Id: raw.c,v 1.30 1999/12/15 22:39:51 davem Exp $
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
......
......@@ -5,7 +5,7 @@
* Authors:
* Pedro Roque <roque@di.fc.ul.pt>
*
* $Id: route.c,v 1.40 1999/08/31 07:04:13 davem Exp $
* $Id: route.c,v 1.42 1999/12/15 22:39:53 davem Exp $
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
......
......@@ -5,7 +5,7 @@
* Authors:
* Pedro Roque <roque@di.fc.ul.pt>
*
* $Id: tcp_ipv6.c,v 1.112 1999/08/31 07:04:19 davem Exp $
* $Id: tcp_ipv6.c,v 1.113 1999/12/15 22:39:58 davem Exp $
*
* Based on:
* linux/net/ipv4/tcp.c
......
......@@ -7,7 +7,7 @@
*
* Based on linux/ipv4/udp.c
*
* $Id: udp.c,v 1.45 1999/08/20 11:06:32 davem Exp $
* $Id: udp.c,v 1.46 1999/12/15 22:40:03 davem Exp $
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
......
......@@ -150,7 +150,7 @@ EXPORT_SYMBOL(skb_recv_datagram);
EXPORT_SYMBOL(skb_free_datagram);
EXPORT_SYMBOL(skb_copy_datagram);
EXPORT_SYMBOL(skb_copy_datagram_iovec);
EXPORT_SYMBOL(skb_realloc_headroom);
EXPORT_SYMBOL(skb_copy_expand);
EXPORT_SYMBOL(datagram_poll);
EXPORT_SYMBOL(put_cmsg);
EXPORT_SYMBOL(sock_kmalloc);
......
......@@ -5,7 +5,7 @@
*
* PACKET - implements raw packet sockets.
*
* Version: $Id: af_packet.c,v 1.24 1999/08/30 12:14:52 davem Exp $
* Version: $Id: af_packet.c,v 1.26 1999/12/20 05:20:02 davem Exp $
*
* Authors: Ross Biro, <bir7@leland.Stanford.Edu>
* Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
......
......@@ -8,7 +8,7 @@
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*
* Version: $Id: af_unix.c,v 1.84 1999/09/08 03:47:18 davem Exp $
* Version: $Id: af_unix.c,v 1.87 1999/12/09 00:54:25 davem Exp $
*
* Fixes:
* Linus Torvalds : Assorted bug cures.
......
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