Commit a4d37b10 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 63f29ea2 bc5359b2
......@@ -141,7 +141,7 @@ DRIVERS-$(CONFIG_AGP) += drivers/char/agp/agp.o
DRIVERS-$(CONFIG_DRM) += drivers/char/drm/drm.o
DRIVERS-$(CONFIG_NUBUS) += drivers/nubus/nubus.a
DRIVERS-$(CONFIG_NET_FC) += drivers/net/fc/fc.o
DRIVERS-$(CONFIG_APPLETALK) += drivers/net/appletalk/appletalk.o
DRIVERS-$(CONFIG_DEV_APPLETALK) += drivers/net/appletalk/appletalk.o
DRIVERS-$(CONFIG_TR) += drivers/net/tokenring/tr.o
DRIVERS-$(CONFIG_WAN) += drivers/net/wan/wan.o
DRIVERS-$(CONFIG_ARCNET) += drivers/net/arcnet/arcnetdrv.o
......
......@@ -3,7 +3,6 @@
#
source drivers/net/arcnet/Config.in
source drivers/net/appletalk/Config.in
tristate 'Dummy net driver support' CONFIG_DUMMY
tristate 'Bonding driver support' CONFIG_BONDING
......
......@@ -41,7 +41,7 @@ subdir-$(CONFIG_TR) += tokenring
subdir-$(CONFIG_WAN) += wan
subdir-$(CONFIG_NET_FC) += fc
subdir-$(CONFIG_ARCNET) += arcnet
subdir-$(CONFIG_APPLETALK) += appletalk
subdir-$(CONFIG_DEV_APPLETALK) += appletalk
subdir-$(CONFIG_SK98LIN) += sk98lin
subdir-$(CONFIG_SKFP) += skfp
......
CONFIG_APPLETALK
AppleTalk is the way Apple computers speak to each other on a
network. If your Linux box is connected to such a network and you
want to join the conversation, say Y.
CONFIG_DEV_APPLETALK
AppleTalk is the protocol that Apple computers can use to communicate
on a network. If your Linux box is connected to such a network, and wish
to do IP over it, or you have a LocalTalk card and wish to use it to
connect to the AppleTalk network, say Y.
CONFIG_IPDDP
This allows IP networking for users who only have AppleTalk
networking available. This feature is experimental. With this
......
......@@ -2,22 +2,20 @@
# Appletalk driver configuration
#
if [ "$CONFIG_ATALK" != "n" ]; then
mainmenu_option next_comment
comment 'Appletalk devices'
bool 'Appletalk interfaces support' CONFIG_APPLETALK
if [ "$CONFIG_ATALK" != "n" ]; then
dep_tristate ' Apple/Farallon LocalTalk PC support' CONFIG_LTPC $CONFIG_DEV_APPLETALK
dep_tristate ' COPS LocalTalk PC support' CONFIG_COPS $CONFIG_DEV_APPLETALK
if [ "$CONFIG_COPS" != "n" ]; then
bool ' Dayna firmware support' CONFIG_COPS_DAYNA
bool ' Tangent firmware support' CONFIG_COPS_TANGENT
fi
dep_tristate ' Appletalk-IP driver support' CONFIG_IPDDP $CONFIG_DEV_APPLETALK
if [ "$CONFIG_IPDDP" != "n" ]; then
bool ' IP to Appletalk-IP Encapsulation support' CONFIG_IPDDP_ENCAP
bool ' Appletalk-IP to IP Decapsulation support' CONFIG_IPDDP_DECAP
fi
mainmenu_option next_comment
comment 'Appletalk devices'
dep_mbool 'Appletalk interfaces support' CONFIG_DEV_APPLETALK $CONFIG_ATALK
if [ "$CONFIG_DEV_APPLETALK" = "y" ]; then
tristate ' Apple/Farallon LocalTalk PC support' CONFIG_LTPC
tristate ' COPS LocalTalk PC support' CONFIG_COPS
if [ "$CONFIG_COPS" != "n" ]; then
bool ' Dayna firmware support' CONFIG_COPS_DAYNA $CONFIG_COPS
bool ' Tangent firmware support' CONFIG_COPS_TANGENT $CONFIG_COPS
fi
dep_tristate ' Appletalk-IP driver support' CONFIG_IPDDP $CONFIG_ATALK
if [ "$CONFIG_IPDDP" != "n" ]; then
bool ' IP to Appletalk-IP Encapsulation support' CONFIG_IPDDP_ENCAP $CONFIG_IPDDP
bool ' Appletalk-IP to IP Decapsulation support' CONFIG_IPDDP_DECAP $CONFIG_IPDDP
fi
endmenu
fi
endmenu
......@@ -52,8 +52,8 @@
#define DRV_MODULE_NAME "tg3"
#define PFX DRV_MODULE_NAME ": "
#define DRV_MODULE_VERSION "0.96"
#define DRV_MODULE_RELDATE "Mar 6, 2002"
#define DRV_MODULE_VERSION "0.98"
#define DRV_MODULE_RELDATE "Mar 28, 2002"
#define TG3_DEF_MAC_MODE 0
#define TG3_DEF_RX_MODE 0
......@@ -3206,12 +3206,19 @@ static int tg3_load_5701_a0_firmware_fix(struct tg3 *tp)
/* Now startup only the RX cpu. */
tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
tw32(RX_CPU_BASE + CPU_PC, TG3_FW_TEXT_ADDR);
/* Flush posted writes. */
tr32(RX_CPU_BASE + CPU_PC);
for (i = 0; i < 5; i++) {
if (tr32(RX_CPU_BASE + CPU_PC) == TG3_FW_TEXT_ADDR)
break;
tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
tw32(RX_CPU_BASE + CPU_MODE, CPU_MODE_HALT);
tw32(RX_CPU_BASE + CPU_PC, TG3_FW_TEXT_ADDR);
/* Flush posted writes. */
tr32(RX_CPU_BASE + CPU_PC);
udelay(1000);
}
if (i >= 5) {
......@@ -3224,6 +3231,9 @@ static int tg3_load_5701_a0_firmware_fix(struct tg3 *tp)
tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
tw32(RX_CPU_BASE + CPU_MODE, 0x00000000);
/* Flush posted writes. */
tr32(RX_CPU_BASE + CPU_MODE);
return 0;
}
......
......@@ -2680,18 +2680,20 @@ static void process_route (sdla_t *card)
printk(KERN_INFO "%s: Dynamic route failure.\n",card->devname);
if(card->u.c.slarp_timer) {
u32 addr_net = htonl(chdlc_priv_area->IP_address);
printk(KERN_INFO "%s: Bad IP address %s received\n",
printk(KERN_INFO "%s: Bad IP address %u.%u.%u.%u received\n",
card->devname,
in_ntoa(ntohl(chdlc_priv_area->IP_address)));
NIPQUAD(addr_net));
printk(KERN_INFO "%s: from remote station.\n",
card->devname);
}else{
u32 addr_net = htonl(chdlc_priv_area->IP_address);
printk(KERN_INFO "%s: Bad IP address %s issued\n",
card->devname,
in_ntoa(ntohl(chdlc_priv_area->IP_address)));
printk(KERN_INFO "%s: Bad IP address %u.%u.%u.%u issued\n",
card->devname,
NIPQUAD(addr_net));
printk(KERN_INFO "%s: to remote station. Local\n",
card->devname);
printk(KERN_INFO "%s: IP address must be A.B.C.1\n",
......@@ -2810,16 +2812,16 @@ static void process_route (sdla_t *card)
}
if(err) {
printk(KERN_INFO "%s: Add route %s failed (%d)\n",
card->devname, in_ntoa(remote_IP_addr), err);
printk(KERN_INFO "%s: Add route %u.%u.%u.%u failed (%d)\n",
card->devname, NIPQUAD(remote_IP_addr), err);
} else {
((chdlc_private_area_t *)dev->priv)->route_status = ROUTE_ADDED;
printk(KERN_INFO "%s: Dynamic route added.\n",
card->devname);
printk(KERN_INFO "%s: Local IP addr : %s\n",
card->devname, in_ntoa(local_IP_addr));
printk(KERN_INFO "%s: Remote IP addr: %s\n",
card->devname, in_ntoa(remote_IP_addr));
printk(KERN_INFO "%s: Local IP addr : %u.%u.%u.%u\n",
card->devname, NIPQUAD(local_IP_addr));
printk(KERN_INFO "%s: Remote IP addr: %u.%u.%u.%u\n",
card->devname, NIPQUAD(remote_IP_addr));
chdlc_priv_area->route_removed = 0;
}
break;
......@@ -2851,13 +2853,13 @@ static void process_route (sdla_t *card)
if(err) {
printk(KERN_INFO
"%s: Remove route %s failed, (err %d)\n",
card->devname, in_ntoa(remote_IP_addr),
card->devname, NIPQUAD(remote_IP_addr),
err);
} else {
((chdlc_private_area_t *)dev->priv)->route_status =
NO_ROUTE;
printk(KERN_INFO "%s: Dynamic route removed: %s\n",
card->devname, in_ntoa(local_IP_addr));
printk(KERN_INFO "%s: Dynamic route removed: %u.%u.%u.%u\n",
card->devname, NIPQUAD(local_IP_addr));
chdlc_priv_area->route_removed = 1;
}
break;
......
......@@ -152,7 +152,6 @@
#include <asm/io.h> /* for inb(), outb(), etc. */
#include <linux/time.h> /* for do_gettimeofday */
#include <linux/in.h> /* sockaddr_in */
#include <linux/inet.h> /* in_ntoa(), etc... */
#include <asm/errno.h>
#include <linux/ip.h>
......@@ -2809,16 +2808,15 @@ static void process_route (netdevice_t *dev)
set_fs(fs); /* restore old block */
if (err) {
printk(KERN_INFO
"%s: Route Add failed. Error: %d\n",
card->devname,err);
printk(KERN_INFO "%s: Address: %s\n",
chan->name, in_ntoa(chan->ip_remote));
printk(KERN_INFO "%s: Address: %u.%u.%u.%u\n",
chan->name, NIPQUAD(chan->ip_remote));
}else {
printk(KERN_INFO "%s: Route Added Successfully: %s\n",
card->devname,in_ntoa(chan->ip_remote));
printk(KERN_INFO "%s: Route Added Successfully: %u.%u.%u.%U\n",
card->devname,NIPQUAD(chan->ip_remote));
chan->route_flag = ROUTE_ADDED;
}
break;
......@@ -2841,17 +2839,15 @@ static void process_route (netdevice_t *dev)
set_fs(fs);
if (err) {
printk(KERN_INFO
"%s: Deleting of route failed. Error: %d\n",
card->devname,err);
printk(KERN_INFO "%s: Address: %s\n",
dev->name,in_ntoa(chan->ip_remote) );
printk(KERN_INFO "%s: Address: %u.%u.%u.%u\n",
dev->name,NIPQUAD(chan->ip_remote) );
} else {
printk(KERN_INFO "%s: Route Removed Sucessfuly: %s\n",
card->devname,in_ntoa(ip_tmp));
printk(KERN_INFO "%s: Route Removed Sucessfuly: %u.%u.%u.%u\n",
card->devname,NIPQUAD(ip_tmp));
chan->route_flag = NO_ROUTE;
}
break;
......@@ -2887,8 +2883,8 @@ static void process_route (netdevice_t *dev)
if (err) {
printk(KERN_INFO "%s: Adding of route failed. Error: %d\n",
card->devname,err);
printk(KERN_INFO "%s: Address: %s\n",
chan->name, in_ntoa(dev->pa_dstaddr) );
printk(KERN_INFO "%s: Address: %u.%u.%u.%u\n",
chan->name, NIPQUAD(dev->pa_dstaddr) );
}
else {
chan->route_flag = ROUTE_ADDED;
......@@ -2902,11 +2898,10 @@ static void process_route (netdevice_t *dev)
set_fs(fs); /* restore old block */
if (err) {
printk(KERN_INFO "%s: Deleting of route failed. Error: %d\n",
card->devname,err);
printk(KERN_INFO "%s: Address: %s\n",
dev->name,in_ntoa(dev->pa_dstaddr) );
printk(KERN_INFO "%s: Address: %u.%u.%u.%u\n",
dev->name,NIPQUAD(dev->pa_dstaddr) );
} else {
printk(KERN_INFO "%s: Removed route.\n",
......@@ -4337,8 +4332,8 @@ int process_ARP(arphdr_1490_t *ArpPacket, sdla_t *card, netdevice_t* dev)
case 0x08: // Inverse ARP request -- Send Reply, add route.
/* Check for valid Address */
printk(KERN_INFO "%s: Recvd PtP addr -InArp Req: %s\n",
card->devname, in_ntoa(arphdr->ar_sip));
printk(KERN_INFO "%s: Recvd PtP addr -InArp Req: %u.%u.%u.%u\n",
card->devname, NIPQUAD(arphdr->ar_sip));
/* Check that the network address is the same as ours, only
......@@ -4348,15 +4343,14 @@ int process_ARP(arphdr_1490_t *ArpPacket, sdla_t *card, netdevice_t* dev)
if (in_dev->ifa_list->ifa_mask != 0xFFFFFFFF &&
(in_dev->ifa_list->ifa_mask & arphdr->ar_sip) !=
(in_dev->ifa_list->ifa_mask & in_dev->ifa_list->ifa_local)){
printk(KERN_INFO
"%s: Invalid PtP address. %s InARP ignored.\n",
card->devname,in_ntoa(arphdr->ar_sip));
"%s: Invalid PtP address. %u.%u.%u.%u InARP ignored.\n",
card->devname,NIPQUAD(arphdr->ar_sip));
printk(KERN_INFO "%s: mask %s\n",
card->devname, in_ntoa(in_dev->ifa_list->ifa_mask));
printk(KERN_INFO "%s: local %s\n",
card->devname,in_ntoa(in_dev->ifa_list->ifa_local));
printk(KERN_INFO "%s: mask %u.%u.%u.%u\n",
card->devname, NIPQUAD(in_dev->ida_list->ifa_mask));
printk(KERN_INFO "%s: local %u.%u.%u.%u\n",
card->devname,NIPQUAD(in_dev->ida_list->ifa_local));
return -1;
}
......@@ -4401,8 +4395,8 @@ int process_ARP(arphdr_1490_t *ArpPacket, sdla_t *card, netdevice_t* dev)
case 0x09: // Inverse ARP reply
/* Check for valid Address */
printk(KERN_INFO "%s: Recvd PtP addr %s -InArp Reply\n",
card->devname, in_ntoa(arphdr->ar_sip));
printk(KERN_INFO "%s: Recvd PtP addr %u.%u.%u.%u -InArp Reply\n",
card->devname, NIPQUAD(arphdr->ar_sip));
/* Compare network addresses, only if network mask
......@@ -4450,8 +4444,8 @@ int process_ARP(arphdr_1490_t *ArpPacket, sdla_t *card, netdevice_t* dev)
case 0x08: // Inverse ARP request -- Send Reply, add route.
/* Check for valid Address */
printk(KERN_INFO "%s: Recvd PtP addr %s -InArp Req\n",
((fr_channel_t *)dev->priv)->name, in_ntoa(arphdr->ar_sip));
printk(KERN_INFO "%s: Recvd PtP addr %u.%u.%u.%u -InArp Req\n",
((fr_channel_t *)dev->priv)->name, NIPQUAD(arphdr->ar_sip));
if (dev->pa_mask != 0xFFFFFFFF){
......@@ -4492,8 +4486,8 @@ int process_ARP(arphdr_1490_t *ArpPacket, sdla_t *card, netdevice_t* dev)
case 0x09: // Inverse ARP reply
/* Check for valid Address */
printk(KERN_INFO "%s: Recvd PtP addr %s -InArp Reply\n",
((fr_channel_t *)dev->priv)->name, in_ntoa(arphdr->ar_sip));
printk(KERN_INFO "%s: Recvd PtP addr %u.%u.%u.%u -InArp Reply\n",
((fr_channel_t *)dev->priv)->name, NIPQUAD(arphdr->ar_sip));
if ((dev->pa_mask & arphdr->ar_sip) != (dev->pa_mask & dev->pa_addr)) {
printk(KERN_INFO "%s: Invalid PtP address. InARP ignored.\n",
......
......@@ -102,7 +102,6 @@
#include <linux/if_arp.h> /* ARPHRD_* defines */
#include <asm/byteorder.h> /* htons(), etc. */
#include <linux/in.h> /* sockaddr_in */
#include <linux/inet.h> /* in_aton(), in_ntoa() prototypes */
/* ---- 2.4.X KERNEL SUPPORT -----------------------*/
......@@ -2269,10 +2268,11 @@ static void process_route (sdla_t *card)
struct in_device *in_dev = dev->ip_ptr;
if (in_dev != NULL ) {
struct in_ifaddr *ifa = in_dev->ifa_list;
printk(KERN_INFO "%s: Assigned Lcl. Addr: %s\n",
card->devname, in_ntoa(ifa->ifa_local));
printk(KERN_INFO "%s: Assigned Rmt. Addr: %s\n",
card->devname, in_ntoa(ifa->ifa_address));
printk(KERN_INFO "%s: Assigned Lcl. Addr: %u.%u.%u.%u\n",
card->devname, NIPQUAD(ifa->ifa_local));
printk(KERN_INFO "%s: Assigned Rmt. Addr: %u.%u.%u.%u\n",
card->devname, NIPQUAD(ifa->ifa_address));
}else{
printk(KERN_INFO
"%s: Error: Failed to add a route for PPP interface %s\n",
......@@ -2294,10 +2294,10 @@ static void process_route (sdla_t *card)
"%s: An error occurred in IP assignment.\n",
card->devname);
} else {
printk(KERN_INFO "%s: Assigned Lcl. Addr: %s\n",
card->devname, in_ntoa(dev->pa_addr));
printk(KERN_INFO "%s: Assigned Rmt. Addr: %s\n",
card->devname, in_ntoa(dev->pa_dstaddr));
printk(KERN_INFO "%s: Assigned Lcl. Addr: %u.%u.%u.%u\n",
card->devname, NIPQUAD(dev->pa_addr));
printk(KERN_INFO "%s: Assigned Rmt. Addr: %u.%u.%u.%U\n",
card->devname, NIPQUAD(dev->pa_dstaddr));
}
}
......@@ -2408,16 +2408,8 @@ static int config508(netdevice_t *dev, sdla_t *card)
/* Debugging code used to check that IP addresses
* obtained from the kernel are correct */
{
char laddr[20];
char raddr[20];
strcpy(laddr,in_ntoa(cfg.ip_local));
strcpy(raddr,in_ntoa(cfg.ip_remote));
NEX_PRINTK(KERN_INFO "Local %s Remote %s Name %s\n",
laddr,raddr, dev->name);
}
NEX_PRINTK(KERN_INFO "Local %u.%u.%u.%u Remote %u.%u.%u.%u Name %s\n",
NIPQUAD(ip_local),NIPQUAD(ip_remote), dev->name);
break;
case WANOPT_PPP_HOST:
......@@ -2436,18 +2428,9 @@ static int config508(netdevice_t *dev, sdla_t *card)
/* Debugging code used to check that IP addresses
* obtained from the kernel are correct */
{
char laddr[20];
char raddr[20];
strcpy(laddr,in_ntoa(cfg.ip_local));
strcpy(raddr,in_ntoa(cfg.ip_remote));
NEX_PRINTK (KERN_INFO "Local %s Remote %s Name %s\n",
laddr,raddr, dev->name);
NEX_PRINTK (KERN_INFO "Local %u.%u.%u.%u Remote %u.%u.%u.%u Name %s\n",
NIPQUAD(ip_local),NIPQUAD(ip_remote), dev->name);
}
break;
case WANOPT_PPP_PEER:
......@@ -3130,10 +3113,10 @@ static int read_info( sdla_t *card )
if (err) {
printk (KERN_INFO "%s: Adding of route failed: %i\n",
card->devname,err);
printk (KERN_INFO "%s: Local : %s\n",
card->devname,in_ntoa(ppp_priv_area->ip_local));
printk (KERN_INFO "%s: Remote: %s\n",
card->devname,in_ntoa(ppp_priv_area->ip_remote));
printk (KERN_INFO "%s: Local : %u.%u.%u.%u\n",
card->devname,NIPQUAD(ppp_priv_area->ip_local));
printk (KERN_INFO "%s: Remote: %u.%u.%u.%u\n",
card->devname,NIPQUAD(ppp_priv_area->ip_remote));
}
return err;
}
......@@ -3212,8 +3195,8 @@ static void remove_route( sdla_t *card )
card->devname, err);
return;
}else{
printk (KERN_INFO "%s: PPP Deleting dynamic route %s successfuly\n",
card->devname, in_ntoa(ip_addr));
printk (KERN_INFO "%s: PPP Deleting dynamic route %u.%u.%u.%u successfuly\n",
card->devname, NIPQUAD(ip_addr));
}
return;
}
......
......@@ -13,7 +13,6 @@
#include <linux/uio.h>
#include <linux/net.h>
#include <linux/in.h>
#include <linux/inet.h>
#include <linux/sunrpc/clnt.h>
#include <linux/sunrpc/xprt.h>
#include <linux/sunrpc/sched.h>
......@@ -69,7 +68,7 @@ nfs_gen_mount(struct sockaddr_in *addr, char *path, struct nfs_fh *fh, int versi
dprintk("NFS: nfs_mount(%08x:%s)\n",
(unsigned)ntohl(addr->sin_addr.s_addr), path);
strcpy(hostname, in_ntoa(addr->sin_addr.s_addr));
sprintf(hostname, "%u.%u.%u.%u", NIPQUAD(addr->sin_addr.s_addr));
if (!(mnt_clnt = mnt_create(hostname, addr, version)))
return -EACCES;
......
......@@ -78,7 +78,6 @@
#include <linux/nfs_fs.h>
#include <linux/nfs_mount.h>
#include <linux/in.h>
#include <linux/inet.h>
#include <linux/major.h>
#include <linux/utsname.h>
#include <net/ipconfig.h>
......@@ -281,7 +280,8 @@ static int __init root_nfs_addr(void)
return -1;
}
strncpy(nfs_data.hostname, in_ntoa(servaddr), sizeof(nfs_data.hostname)-1);
snprintf(nfs_data.hostname, sizeof(nfs_data.hostname),
"%u.%u.%u.%u", NIPQUAD(servaddr));
return 0;
}
......
......@@ -47,7 +47,6 @@
#include <linux/net.h>
extern void inet_proto_init(struct net_proto *pro);
extern char *in_ntoa(__u32 in);
extern __u32 in_aton(const char *str);
#endif
......
......@@ -29,9 +29,6 @@ struct kernel_stat {
#if !defined(CONFIG_ARCH_S390)
unsigned int irqs[NR_CPUS][NR_IRQS];
#endif
unsigned int ipackets, opackets;
unsigned int ierrors, oerrors;
unsigned int collisions;
};
extern struct kernel_stat kstat;
......
......@@ -231,9 +231,9 @@ struct tcp_opt {
/* Data for direct copy to user */
struct {
struct sk_buff_head prequeue;
int memory;
struct task_struct *task;
struct iovec *iov;
int memory;
int len;
} ucopy;
......
......@@ -475,7 +475,6 @@ typedef struct wanif_conf
#include <linux/fs.h> /* support for device drivers */
#include <linux/proc_fs.h> /* proc filesystem pragmatics */
#include <linux/inet.h> /* in_aton(), in_ntoa() prototypes */
#include <linux/netdevice.h> /* support for network drivers */
/*----------------------------------------------------------------------------
* WAN device data space.
......
......@@ -828,6 +828,11 @@ extern int tcp_sync_mss(struct sock *sk, u32 pmtu);
extern const char timer_bug_msg[];
/* Read 'sendfile()'-style from a TCP socket */
typedef int (*sk_read_actor_t)(read_descriptor_t *, struct sk_buff *,
unsigned int, size_t);
extern int tcp_read_sock(struct sock *sk, read_descriptor_t *desc,
sk_read_actor_t recv_actor);
static inline void tcp_clear_xmit_timer(struct sock *sk, int what)
{
......
......@@ -190,11 +190,11 @@ CONFIG_DECNET
The module is called decnet.o.
CONFIG_ATALK
AppleTalk is the way Apple computers speak to each other on a
network. If your Linux box is connected to such a network and you
want to join the conversation, say Y. You will need to use the
netatalk package so that your Linux box can act as a print and file
server for Macs as well as access AppleTalk printers. Check out
AppleTalk is the protocol that Apple computers can use to communicate
on a network. If your Linux box is connected to such a network and you
wish to connect to it, say Y. You will need to use the netatalk package
so that your Linux box can act as a print and file server for Macs as
well as access AppleTalk printers. Check out
<http://www.zettabyte.net/netatalk/> on the WWW for details.
EtherTalk is the name used for AppleTalk over Ethernet and the
cheaper and slower LocalTalk is AppleTalk over a proprietary Apple
......
......@@ -52,7 +52,10 @@ tristate 'The IPX protocol' CONFIG_IPX
if [ "$CONFIG_IPX" != "n" ]; then
source net/ipx/Config.in
fi
tristate 'Appletalk protocol support' CONFIG_ATALK
source drivers/net/appletalk/Config.in
tristate 'DECnet Support' CONFIG_DECNET
if [ "$CONFIG_DECNET" != "n" ]; then
source net/decnet/Config.in
......@@ -68,10 +71,10 @@ if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
# fi
if [ "$CONFIG_INET" = "y" ]; then
tristate 'Acorn Econet/AUN protocols (EXPERIMENTAL)' CONFIG_ECONET
fi
if [ "$CONFIG_ECONET" != "n" ]; then
bool ' AUN over UDP' CONFIG_ECONET_AUNUDP
bool ' Native Econet' CONFIG_ECONET_NATIVE
if [ "$CONFIG_ECONET" != "n" ]; then
bool ' AUN over UDP' CONFIG_ECONET_AUNUDP
bool ' Native Econet' CONFIG_ECONET_NATIVE
fi
fi
tristate 'WAN router' CONFIG_WAN_ROUTER
bool 'Fast switching (read help!)' CONFIG_NET_FASTROUTE
......
......@@ -48,12 +48,8 @@ static int __br_forward_finish(struct sk_buff *skb)
static void __br_deliver(struct net_bridge_port *to, struct sk_buff *skb)
{
struct net_device *indev;
indev = skb->dev;
skb->dev = to->dev;
NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_OUT, skb, indev, skb->dev,
NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_OUT, skb, NULL, skb->dev,
__br_forward_finish);
}
......
......@@ -161,8 +161,10 @@ void br_handle_frame(struct sk_buff *skb)
handle_special_frame:
if (!dest[5]) {
br_stp_handle_bpdu(skb);
read_unlock(&br->lock);
return;
}
kfree_skb(skb);
read_unlock(&br->lock);
}
......@@ -83,8 +83,7 @@ void nf_unregister_hook(struct nf_hook_ops *reg)
/* Do exclusive ranges overlap? */
static inline int overlap(int min1, int max1, int min2, int max2)
{
return (min1 >= min2 && min1 < max2)
|| (max1 > min2 && max1 <= max2);
return max1 > min2 && min1 < max2;
}
/* Functions to register sockopt ranges (exclusive). */
......
......@@ -1158,8 +1158,8 @@ static int __init inet_init(void)
sizeof(struct raw_sock), 0,
SLAB_HWCACHE_ALIGN, 0, 0);
if (!tcp_sk_cachep || !udp_sk_cachep || !raw4_sk_cachep)
printk(KERN_CRIT __FUNCTION__
": Can't create protocol sock SLAB caches!\n");
printk(KERN_CRIT
"inet_init: Can't create protocol sock SLAB caches!\n");
/*
* Tell SOCKET that we are alive...
*/
......
......@@ -604,6 +604,11 @@ static int fib_netdev_event(struct notifier_block *this, unsigned long event, vo
struct net_device *dev = ptr;
struct in_device *in_dev = __in_dev_get(dev);
if (event == NETDEV_UNREGISTER) {
fib_disable_ip(dev, 2);
return NOTIFY_DONE;
}
if (!in_dev)
return NOTIFY_DONE;
......@@ -620,9 +625,6 @@ static int fib_netdev_event(struct notifier_block *this, unsigned long event, vo
case NETDEV_DOWN:
fib_disable_ip(dev, 0);
break;
case NETDEV_UNREGISTER:
fib_disable_ip(dev, 1);
break;
case NETDEV_CHANGEMTU:
case NETDEV_CHANGE:
rt_cache_flush(0);
......
......@@ -185,6 +185,7 @@ int ip_fib_check_default(u32 gw, struct net_device *dev)
continue;
for_nexthops(fi) {
if (nh->nh_dev == dev && nh->nh_gw == gw &&
nh->nh_scope == RT_SCOPE_LINK &&
!(nh->nh_flags&RTNH_F_DEAD)) {
read_unlock(&fib_info_lock);
return 0;
......@@ -379,15 +380,23 @@ static int fib_check_nh(const struct rtmsg *r, struct fib_info *fi, struct fib_n
/* It is not necessary, but requires a bit of thinking */
if (key.scope < RT_SCOPE_LINK)
key.scope = RT_SCOPE_LINK;
if ((err = fib_lookup(&key, &res)) != 0)
return err;
err = -EINVAL;
if (res.type != RTN_UNICAST && res.type != RTN_LOCAL)
goto out;
nh->nh_scope = res.scope;
nh->nh_oif = FIB_RES_OIF(res);
nh->nh_dev = FIB_RES_DEV(res);
if (nh->nh_dev)
atomic_inc(&nh->nh_dev->refcnt);
if ((nh->nh_dev = FIB_RES_DEV(res)) == NULL)
goto out;
atomic_inc(&nh->nh_dev->refcnt);
err = -ENETDOWN;
if (!(nh->nh_dev->flags & IFF_UP))
goto out;
err = 0;
out:
fib_res_put(&res);
return err;
} else {
struct in_device *in_dev;
......@@ -875,13 +884,15 @@ int fib_sync_down(u32 local, struct net_device *dev, int force)
fi->fib_power -= nh->nh_power;
nh->nh_power = 0;
spin_unlock_bh(&fib_multipath_lock);
if (force && nh->nh_dev) {
dev_put(nh->nh_dev);
nh->nh_dev = NULL;
}
#endif
dead++;
}
#ifdef CONFIG_IP_ROUTE_MULTIPATH
if (force > 1 && nh->nh_dev == dev) {
dead = fi->fib_nhs;
break;
}
#endif
} endfor_nexthops(fi)
if (dead == fi->fib_nhs) {
fi->fib_flags |= RTNH_F_DEAD;
......@@ -914,10 +925,6 @@ int fib_sync_up(struct net_device *dev)
alive++;
continue;
}
if (nh->nh_dev == NULL && nh->nh_oif == dev->ifindex) {
dev_hold(dev);
nh->nh_dev = dev;
}
if (nh->nh_dev == NULL || !(nh->nh_dev->flags&IFF_UP))
continue;
if (nh->nh_dev != dev || __in_dev_get(dev) == NULL)
......
......@@ -251,6 +251,7 @@
#include <linux/poll.h>
#include <linux/init.h>
#include <linux/smp_lock.h>
#include <linux/fs.h>
#include <net/icmp.h>
#include <net/tcp.h>
......@@ -1377,6 +1378,84 @@ static void tcp_prequeue_process(struct sock *sk)
tp->ucopy.memory = 0;
}
static inline
struct sk_buff *tcp_recv_skb(struct sock *sk, u32 seq, u32 *off)
{
struct sk_buff *skb;
u32 offset;
skb_queue_walk(&sk->receive_queue, skb) {
offset = seq - TCP_SKB_CB(skb)->seq;
if (skb->h.th->syn)
offset--;
if (offset < skb->len || skb->h.th->fin) {
*off = offset;
return skb;
}
}
return NULL;
}
/*
* This routine provides an alternative to tcp_recvmsg() for routines
* that would like to handle copying from skbuffs directly in 'sendfile'
* fashion.
* Note:
* - It is assumed that the socket was locked by the caller.
* - The routine does not block.
* - At present, there is no support for reading OOB data
* or for 'peeking' the socket using this routine
* (although both would be easy to implement).
*/
int tcp_read_sock(struct sock *sk, read_descriptor_t *desc,
sk_read_actor_t recv_actor)
{
struct sk_buff *skb;
struct tcp_opt *tp = tcp_sk(sk);
u32 seq = tp->copied_seq;
u32 offset;
int copied = 0;
if (sk->state == TCP_LISTEN)
return -ENOTCONN;
while ((skb = tcp_recv_skb(sk, seq, &offset)) != NULL) {
if (offset < skb->len) {
size_t used, len;
len = skb->len - offset;
/* Stop reading if we hit a patch of urgent data */
if (tp->urg_data) {
u32 urg_offset = tp->urg_seq - seq;
if (urg_offset < len)
len = urg_offset;
if (!len)
break;
}
used = recv_actor(desc, skb, offset, len);
if (used <= len) {
seq += used;
copied += used;
offset += used;
}
if (offset != skb->len)
break;
}
if (skb->h.th->fin) {
tcp_eat_skb(sk, skb);
++seq;
break;
}
tcp_eat_skb(sk, skb);
if (!desc->count)
break;
}
tp->copied_seq = seq;
/* Clean up data we have read: This will do ACK frames. */
if (copied)
cleanup_rbuf(sk, copied);
return copied;
}
/*
* This routine copies from a sock struct into the user buffer.
*
......
......@@ -42,21 +42,6 @@
#include <linux/skbuff.h>
/*
* Display an IP address in readable format.
*/
char *in_ntoa(__u32 in)
{
static char buff[18];
char *p;
p = (char *) &in;
sprintf(buff, "%d.%d.%d.%d",
(p[0] & 255), (p[1] & 255), (p[2] & 255), (p[3] & 255));
return(buff);
}
/*
* Convert an ASCII string to binary IP.
*/
......
......@@ -1833,7 +1833,7 @@ static void ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp)
break;
case RTM_DELADDR:
addrconf_leave_solict(ifp->idev->dev, &ifp->addr);
if (!ipv6_chk_addr(&ifp->addr, ifp->idev->dev))
if (!ipv6_chk_addr(&ifp->addr, NULL))
ip6_rt_addr_del(&ifp->addr, ifp->idev->dev);
break;
}
......
......@@ -110,7 +110,7 @@ static LIST_HEAD(ip6t_tables);
#define ADD_COUNTER(c,b,p) do { (c).bcnt += (b); (c).pcnt += (p); } while(0)
#ifdef CONFIG_SMP
#define TABLE_OFFSET(t,p) (SMP_ALIGN((t)->size)*cpu_number_map(p))
#define TABLE_OFFSET(t,p) (SMP_ALIGN((t)->size)*(p))
#else
#define TABLE_OFFSET(t,p) 0
#endif
......@@ -336,7 +336,8 @@ ip6t_do_table(struct sk_buff **pskb,
read_lock_bh(&table->lock);
IP_NF_ASSERT(table->valid_hooks & (1 << hook));
table_base = (void *)table->private->entries
+ TABLE_OFFSET(table->private, smp_processor_id());
+ TABLE_OFFSET(table->private,
cpu_number_map(smp_processor_id()));
e = get_entry(table_base, table->private->hook_entry[hook]);
#ifdef CONFIG_NETFILTER_DEBUG
......@@ -426,7 +427,7 @@ ip6t_do_table(struct sk_buff **pskb,
#endif
/* Target might have changed stuff. */
ipv6 = (*pskb)->nh.ipv6h;
protohdr = (u_int32_t *)ipv6 + IPV6_HDR_LEN;
protohdr = (u_int32_t *)((void *)ipv6 + IPV6_HDR_LEN);
datalen = (*pskb)->len - IPV6_HDR_LEN;
if (verdict == IP6T_CONTINUE)
......@@ -913,7 +914,7 @@ translate_table(const char *name,
/* And one copy for every other CPU */
for (i = 1; i < smp_num_cpus; i++) {
memcpy(newinfo->entries + SMP_ALIGN(newinfo->size*i),
memcpy(newinfo->entries + SMP_ALIGN(newinfo->size)*i,
newinfo->entries,
SMP_ALIGN(newinfo->size));
}
......@@ -1795,9 +1796,15 @@ static int __init init(void)
}
#ifdef CONFIG_PROC_FS
if (!proc_net_create("ip6_tables_names", 0, ip6t_get_tables)) {
nf_unregister_sockopt(&ip6t_sockopts);
return -ENOMEM;
{
struct proc_dir_entry *proc;
proc = proc_net_create("ip6_tables_names", 0,
ip6t_get_tables);
if (!proc) {
nf_unregister_sockopt(&ip6t_sockopts);
return -ENOMEM;
}
proc->owner = THIS_MODULE;
}
#endif
......
......@@ -34,8 +34,10 @@ ip6t_mac_checkentry(const char *tablename,
unsigned int hook_mask)
{
if (hook_mask
& ~((1 << NF_IP6_PRE_ROUTING) | (1 << NF_IP6_LOCAL_IN))) {
printk("ip6t_mac: only valid for PRE_ROUTING or LOCAL_IN.\n");
& ~((1 << NF_IP6_PRE_ROUTING) | (1 << NF_IP6_LOCAL_IN)
| (1 << NF_IP6_FORWARD))) {
printk("ip6t_mac: only valid for PRE_ROUTING, LOCAL_IN or"
" FORWARD\n");
return 0;
}
......@@ -60,3 +62,5 @@ static void __exit fini(void)
module_init(init);
module_exit(fini);
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("MAC address matching module for IPv6");
......@@ -281,6 +281,16 @@ void rawv6_err(struct sock *sk, struct sk_buff *skb,
static inline int rawv6_rcv_skb(struct sock * sk, struct sk_buff * skb)
{
#if defined(CONFIG_FILTER)
if (sk->filter && skb->ip_summed != CHECKSUM_UNNECESSARY) {
if ((unsigned short)csum_fold(skb_checksum(skb, 0, skb->len, skb->csum))) {
IP6_INC_STATS_BH(Ip6InDiscards);
kfree_skb(skb);
return 0;
}
skb->ip_summed = CHECKSUM_UNNECESSARY;
}
#endif
/* Charge it to the socket. */
if (sock_queue_rcv_skb(sk,skb)<0) {
IP6_INC_STATS_BH(Ip6InDiscards);
......@@ -302,10 +312,35 @@ static inline int rawv6_rcv_skb(struct sock * sk, struct sk_buff * skb)
int rawv6_rcv(struct sock *sk, struct sk_buff *skb)
{
struct inet_opt *inet = inet_sk(sk);
struct raw6_opt *raw_opt = raw6_sk(sk);
if (!raw_opt->checksum)
skb->ip_summed = CHECKSUM_UNNECESSARY;
if (skb->ip_summed != CHECKSUM_UNNECESSARY) {
if (skb->ip_summed == CHECKSUM_HW) {
skb->ip_summed = CHECKSUM_UNNECESSARY;
if (csum_ipv6_magic(&skb->nh.ipv6h->saddr,
&skb->nh.ipv6h->daddr,
skb->len, inet->num, skb->csum)) {
NETDEBUG(if (net_ratelimit()) printk(KERN_DEBUG "raw v6 hw csum failure.\n"));
skb->ip_summed = CHECKSUM_NONE;
}
}
if (skb->ip_summed == CHECKSUM_NONE)
skb->csum = ~csum_ipv6_magic(&skb->nh.ipv6h->saddr,
&skb->nh.ipv6h->daddr,
skb->len, inet->num, 0);
}
if (inet->hdrincl) {
__skb_push(skb, skb->nh.raw - skb->data);
skb->h.raw = skb->nh.raw;
if (skb->ip_summed != CHECKSUM_UNNECESSARY &&
(unsigned short)csum_fold(skb_checksum(skb, 0, skb->len, skb->csum))) {
IP6_INC_STATS_BH(Ip6InDiscards);
kfree_skb(skb);
return 0;
}
skb->ip_summed = CHECKSUM_UNNECESSARY;
}
rawv6_rcv_skb(sk, skb);
......@@ -345,7 +380,17 @@ int rawv6_recvmsg(struct sock *sk, struct msghdr *msg, int len,
msg->msg_flags |= MSG_TRUNC;
}
err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
if (skb->ip_summed==CHECKSUM_UNNECESSARY) {
err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
} else if (msg->msg_flags&MSG_TRUNC) {
if ((unsigned short)csum_fold(skb_checksum(skb, 0, skb->len, skb->csum)))
goto csum_copy_err;
err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
} else {
err = skb_copy_and_csum_datagram_iovec(skb, 0, msg->msg_iov);
if (err == -EINVAL)
goto csum_copy_err;
}
if (err)
goto out_free;
......@@ -372,6 +417,27 @@ int rawv6_recvmsg(struct sock *sk, struct msghdr *msg, int len,
skb_free_datagram(sk, skb);
out:
return err;
csum_copy_err:
/* Clear queue. */
if (flags&MSG_PEEK) {
int clear = 0;
spin_lock_irq(&sk->receive_queue.lock);
if (skb == skb_peek(&sk->receive_queue)) {
__skb_unlink(skb, &sk->receive_queue);
clear = 1;
}
spin_unlock_irq(&sk->receive_queue.lock);
if (clear)
kfree_skb(skb);
}
/* Error for blocking case is chosen to masquerade
as some normal condition.
*/
err = (flags&MSG_DONTWAIT) ? -EAGAIN : -EHOSTUNREACH;
IP6_INC_STATS_USER(Ip6InDiscards);
goto out_free;
}
/*
......
......@@ -64,7 +64,8 @@ static int ipip6_fb_tunnel_init(struct net_device *dev);
static int ipip6_tunnel_init(struct net_device *dev);
static struct net_device ipip6_fb_tunnel_dev = {
"sit0", 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, NULL, ipip6_fb_tunnel_init,
name: "sit0",
init: ipip6_fb_tunnel_init
};
static struct ip_tunnel ipip6_fb_tunnel = {
......
......@@ -508,7 +508,7 @@ static inline int udpv6_queue_rcv_skb(struct sock * sk, struct sk_buff *skb)
{
#if defined(CONFIG_FILTER)
if (sk->filter && skb->ip_summed != CHECKSUM_UNNECESSARY) {
if ((unsigned short)csum_fold(csum_partial(skb->h.raw, skb->len, skb->csum))) {
if ((unsigned short)csum_fold(skb_checksum(skb, 0, skb->len, skb->csum))) {
UDP6_INC_STATS_BH(UdpInErrors);
IP6_INC_STATS_BH(Ip6InDiscards);
kfree_skb(skb);
......
......@@ -408,6 +408,8 @@ EXPORT_SYMBOL(secure_ipv6_id);
#endif
EXPORT_SYMBOL(tcp_read_sock);
EXPORT_SYMBOL(netlink_set_err);
EXPORT_SYMBOL(netlink_broadcast);
EXPORT_SYMBOL(netlink_unicast);
......@@ -446,7 +448,6 @@ EXPORT_SYMBOL(ipv4_config);
EXPORT_SYMBOL(dev_open);
/* Used by other modules */
EXPORT_SYMBOL(in_ntoa);
EXPORT_SYMBOL(xrlim_allow);
EXPORT_SYMBOL(ip_rcv);
......
......@@ -280,7 +280,7 @@ pfifo_fast_enqueue(struct sk_buff *skb, struct Qdisc* qdisc)
list = ((struct sk_buff_head*)qdisc->data) +
prio2band[skb->priority&TC_PRIO_MAX];
if (list->qlen <= skb->dev->tx_queue_len) {
if (list->qlen <= qdisc->dev->tx_queue_len) {
__skb_queue_tail(list, skb);
qdisc->q.qlen++;
return 0;
......
......@@ -43,6 +43,9 @@
#define PRIV(sch) ((struct ingress_qdisc_data *) (sch)->data)
/* Thanks to Doron Oz for this hack
*/
static int nf_registered = 0;
struct ingress_qdisc_data {
struct Qdisc *q;
......@@ -147,15 +150,21 @@ static int ingress_enqueue(struct sk_buff *skb,struct Qdisc *sch)
#ifdef CONFIG_NET_CLS_POLICE
case TC_POLICE_SHOT:
result = NF_DROP;
sch->stats.drops++;
break;
case TC_POLICE_RECLASSIFY: /* DSCP remarking here ? */
case TC_POLICE_OK:
case TC_POLICE_UNSPEC:
default:
sch->stats.packets++;
sch->stats.bytes += skb->len;
result = NF_ACCEPT;
break;
}
#else
sch->stats.packets++;
sch->stats.bytes += skb->len;
#endif
};
skb->tc_index = TC_H_MIN(res.classid);
return result;
......@@ -236,22 +245,21 @@ int ingress_init(struct Qdisc *sch,struct rtattr *opt)
{
struct ingress_qdisc_data *p = PRIV(sch);
if (!nf_registered) {
if (nf_register_hook(&ing_ops) < 0) {
printk("ingress qdisc registration error \n");
goto error;
}
nf_registered++;
}
DPRINTK("ingress_init(sch %p,[qdisc %p],opt %p)\n",sch,p,opt);
memset(p, 0, sizeof(*p));
p->filter_list = NULL;
p->q = &noop_qdisc;
#ifndef MODULE
if (nf_register_hook(&ing_ops) < 0) {
printk("Unable to register ingress \n");
goto error;
}
#endif
DPRINTK("ingress_init: qdisc %p\n", sch);
MOD_INC_USE_COUNT;
return 0;
#ifndef MODULE
error:
#endif
return -EINVAL;
}
......@@ -295,12 +303,9 @@ static void ingress_destroy(struct Qdisc *sch)
/* for future use */
qdisc_destroy(p->q);
#endif
#ifndef MODULE
nf_unregister_hook(&ing_ops);
#endif
MOD_DEC_USE_COUNT;
}
......@@ -356,6 +361,7 @@ struct Qdisc_ops ingress_qdisc_ops =
ingress_dump, /* dump */
};
#ifdef MODULE
int init_module(void)
{
......@@ -366,20 +372,15 @@ int init_module(void)
return ret;
}
if (nf_register_hook(&ing_ops) < 0) {
printk("Unable to register ingress on hook \n");
unregister_qdisc(&ingress_qdisc_ops);
return 0;
}
return ret;
}
void cleanup_module(void)
{
nf_unregister_hook(&ing_ops);
unregister_qdisc(&ingress_qdisc_ops);
if (nf_registered)
nf_unregister_hook(&ing_ops);
}
#endif
MODULE_LICENSE("GPL");
......@@ -87,8 +87,6 @@ rpc_getport(struct rpc_task *task, struct rpc_clnt *clnt)
}
#ifdef CONFIG_ROOT_NFS
char *in_ntoa(__u32 in);
int
rpc_getport_external(struct sockaddr_in *sin, __u32 prog, __u32 vers, int prot)
{
......@@ -100,7 +98,7 @@ rpc_getport_external(struct sockaddr_in *sin, __u32 prog, __u32 vers, int prot)
dprintk("RPC: rpc_getport_external(%u.%u.%u.%u, %d, %d, %d)\n",
NIPQUAD(sin->sin_addr.s_addr), prog, vers, prot);
strcpy(hostname, in_ntoa(sin->sin_addr.s_addr));
sprintf(hostname, "%u.%u.%u.%u", NIPQUAD(sin->sin_addr.s_addr));
if (!(pmap_clnt = pmap_create(hostname, sin, prot)))
return -EACCES;
......
......@@ -1886,8 +1886,8 @@ static int __init af_unix_init(void)
sizeof(struct unix_sock), 0,
SLAB_HWCACHE_ALIGN, 0, 0);
if (!unix_sk_cachep)
printk(KERN_CRIT __FUNCTION__
": Cannot create unix_sock SLAB cache!\n");
printk(KERN_CRIT
"af_unix_init: Cannot create unix_sock SLAB cache!\n");
sock_register(&unix_family_ops);
#ifdef CONFIG_PROC_FS
......
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