summaryrefslogtreecommitdiffstats
path: root/net/core
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>2000-02-24 00:12:35 +0000
committerRalf Baechle <ralf@linux-mips.org>2000-02-24 00:12:35 +0000
commit482368b1a8e45430672c58c9a42e7d2004367126 (patch)
treece2a1a567d4d62dee7c2e71a46a99cf72cf1d606 /net/core
parente4d0251c6f56ab2e191afb70f80f382793e23f74 (diff)
Merge with 2.3.47. Guys, this is buggy as shit. You've been warned.
Diffstat (limited to 'net/core')
-rw-r--r--net/core/dev.c287
-rw-r--r--net/core/dev_mcast.c81
-rw-r--r--net/core/profile.c6
-rw-r--r--net/core/rtnetlink.c2
-rw-r--r--net/core/skbuff.c4
5 files changed, 190 insertions, 190 deletions
diff --git a/net/core/dev.c b/net/core/dev.c
index 00d5caa2a..d2ed4f523 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -81,7 +81,7 @@
#include <net/slhc.h>
#include <linux/proc_fs.h>
#include <linux/stat.h>
-#include <net/br.h>
+#include <linux/if_bridge.h>
#include <net/dst.h>
#include <net/pkt_sched.h>
#include <net/profile.h>
@@ -190,14 +190,11 @@ void dev_add_pack(struct packet_type *pt)
dev_clear_fastroute(pt->dev);
}
#endif
- if(pt->type==htons(ETH_P_ALL))
- {
+ if (pt->type == htons(ETH_P_ALL)) {
netdev_nit++;
pt->next=ptype_all;
ptype_all=pt;
- }
- else
- {
+ } else {
hash=ntohs(pt->type)&15;
pt->next = ptype_base[hash];
ptype_base[hash] = pt;
@@ -216,19 +213,16 @@ void dev_remove_pack(struct packet_type *pt)
write_lock_bh(&ptype_lock);
- if(pt->type==htons(ETH_P_ALL))
- {
+ if (pt->type == htons(ETH_P_ALL)) {
netdev_nit--;
pt1=&ptype_all;
- }
- else
+ } else {
pt1=&ptype_base[ntohs(pt->type)&15];
+ }
- for(; (*pt1)!=NULL; pt1=&((*pt1)->next))
- {
- if(pt==(*pt1))
- {
- *pt1=pt->next;
+ for (; (*pt1) != NULL; pt1 = &((*pt1)->next)) {
+ if (pt == (*pt1)) {
+ *pt1 = pt->next;
#ifdef CONFIG_NET_FASTROUTE
if (pt->data)
netdev_fastroute_obstacles--;
@@ -357,14 +351,13 @@ int dev_alloc_name(struct net_device *dev, const char *name)
{
int i;
char buf[32];
+
/*
* If you need over 100 please also fix the algorithm...
*/
- for(i=0;i<100;i++)
- {
+ for (i = 0; i < 100; i++) {
sprintf(buf,name,i);
- if(__dev_get_by_name(buf)==NULL)
- {
+ if (__dev_get_by_name(buf) == NULL) {
strcpy(dev->name, buf);
return i;
}
@@ -375,16 +368,14 @@ int dev_alloc_name(struct net_device *dev, const char *name)
struct net_device *dev_alloc(const char *name, int *err)
{
struct net_device *dev=kmalloc(sizeof(struct net_device)+16, GFP_KERNEL);
- if(dev==NULL)
- {
- *err=-ENOBUFS;
+ if (dev == NULL) {
+ *err = -ENOBUFS;
return NULL;
}
memset(dev, 0, sizeof(struct net_device));
- dev->name=(char *)(dev+1); /* Name string space */
- *err=dev_alloc_name(dev,name);
- if(*err<0)
- {
+ dev->name = (char *)(dev + 1); /* Name string space */
+ *err = dev_alloc_name(dev, name);
+ if (*err < 0) {
kfree(dev);
return NULL;
}
@@ -408,7 +399,7 @@ void netdev_state_change(struct net_device *dev)
void dev_load(const char *name)
{
- if(!__dev_get_by_name(name) && capable(CAP_SYS_MODULE))
+ if (!__dev_get_by_name(name) && capable(CAP_SYS_MODULE))
request_module(name);
}
@@ -441,6 +432,12 @@ int dev_open(struct net_device *dev)
return 0;
/*
+ * Is it even present?
+ */
+ if (!netif_device_present(dev))
+ return -ENODEV;
+
+ /*
* Call device private open method
*/
@@ -458,7 +455,7 @@ int dev_open(struct net_device *dev)
*/
dev->flags |= IFF_UP;
- set_bit(LINK_STATE_START, &dev->state);
+ set_bit(__LINK_STATE_START, &dev->state);
/*
* Initialize multicasting status
@@ -528,11 +525,14 @@ int dev_close(struct net_device *dev)
dev_deactivate(dev);
- clear_bit(LINK_STATE_START, &dev->state);
+ clear_bit(__LINK_STATE_START, &dev->state);
/*
* Call the device specific close. This cannot fail.
* Only if device is UP
+ *
+ * We allow it to be called even after a DETACH hot-plug
+ * event.
*/
if (dev->stop)
@@ -673,7 +673,7 @@ int dev_queue_xmit(struct sk_buff *skb)
spin_lock(&dev->xmit_lock);
dev->xmit_lock_owner = cpu;
- if (!test_bit(LINK_STATE_XOFF, &dev->state)) {
+ if (!netif_queue_stopped(dev)) {
if (netdev_nit)
dev_queue_xmit_nit(skb,dev);
@@ -781,7 +781,7 @@ void netif_rx(struct sk_buff *skb)
struct softnet_data *queue;
unsigned long flags;
- if(skb->stamp.tv_sec==0)
+ if (skb->stamp.tv_sec == 0)
get_fast_time(&skb->stamp);
/* The code is rearranged so that the path is the most
@@ -833,37 +833,6 @@ drop:
kfree_skb(skb);
}
-#ifdef CONFIG_BRIDGE
-static inline void handle_bridge(struct sk_buff *skb, unsigned short type)
-{
- /*
- * The br_stats.flags is checked here to save the expense of a
- * function call.
- */
- if ((br_stats.flags & BR_UP) && br_call_bridge(skb, type))
- {
- /*
- * We pass the bridge a complete frame. This means
- * recovering the MAC header first.
- */
-
- int offset;
-
- skb=skb_clone(skb, GFP_ATOMIC);
- if(skb==NULL)
- return;
-
- offset=skb->data-skb->mac.raw;
- skb_push(skb,offset); /* Put header back on for bridge */
-
- if(br_receive_frame(skb))
- return;
- kfree_skb(skb);
- }
- return;
-}
-#endif
-
/* Deliver skb to an old protocol, which is not threaded well
or which do not understand shared skbs.
*/
@@ -911,15 +880,14 @@ static __inline__ void skb_bond(struct sk_buff *skb)
static void net_tx_action(struct softirq_action *h)
{
int cpu = smp_processor_id();
- unsigned long flags;
if (softnet_data[cpu].completion_queue) {
struct sk_buff *clist;
- local_irq_save(flags);
+ local_irq_disable();
clist = softnet_data[cpu].completion_queue;
softnet_data[cpu].completion_queue = NULL;
- local_irq_restore(flags);
+ local_irq_enable();
while (clist != NULL) {
struct sk_buff *skb = clist;
@@ -933,16 +901,16 @@ static void net_tx_action(struct softirq_action *h)
if (softnet_data[cpu].output_queue) {
struct net_device *head;
- local_irq_save(flags);
+ local_irq_disable();
head = softnet_data[cpu].output_queue;
softnet_data[cpu].output_queue = NULL;
- local_irq_restore(flags);
+ local_irq_enable();
while (head != NULL) {
struct net_device *dev = head;
head = head->next_sched;
- clear_bit(LINK_STATE_SCHED, &dev->state);
+ clear_bit(__LINK_STATE_SCHED, &dev->state);
if (spin_trylock(&dev->queue_lock)) {
qdisc_run(dev);
@@ -954,6 +922,32 @@ static void net_tx_action(struct softirq_action *h)
}
}
+void net_call_rx_atomic(void (*fn)(void))
+{
+ write_lock_bh(&ptype_lock);
+ fn();
+ write_unlock_bh(&ptype_lock);
+}
+
+#if defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE)
+void (*br_handle_frame_hook)(struct sk_buff *skb) = NULL;
+#endif
+
+#define HANDLE_BRIDGE(SKB, PT_PREV) \
+do { \
+ if ((SKB)->dev->br_port != NULL && \
+ br_handle_frame_hook != NULL) { \
+ if (PT_PREV) \
+ if (!(PT_PREV->data)) \
+ deliver_to_old_ones(PT_PREV, SKB, 1); \
+ else \
+ pt_prev->func(SKB, SKB->dev, PT_PREV); \
+ \
+ br_handle_frame_hook(SKB); \
+ continue; \
+ } \
+} while(0)
+
static void net_rx_action(struct softirq_action *h)
{
int this_cpu = smp_processor_id();
@@ -986,9 +980,7 @@ static void net_rx_action(struct softirq_action *h)
{
struct packet_type *ptype, *pt_prev;
unsigned short type = skb->protocol;
-#ifdef CONFIG_BRIDGE
- handle_bridge(skb, type);
-#endif
+
pt_prev = NULL;
for (ptype = ptype_all; ptype; ptype = ptype->next) {
if (!ptype->dev || ptype->dev == skb->dev) {
@@ -1005,6 +997,11 @@ static void net_rx_action(struct softirq_action *h)
pt_prev = ptype;
}
}
+
+#if defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE)
+ HANDLE_BRIDGE(skb, pt_prev);
+#endif
+
for (ptype=ptype_base[ntohs(type)&15];ptype;ptype=ptype->next) {
if (ptype->type == type &&
(!ptype->dev || ptype->dev == skb->dev)) {
@@ -1021,6 +1018,7 @@ static void net_rx_action(struct softirq_action *h)
pt_prev = ptype;
}
}
+
if (pt_prev) {
if (!pt_prev->data)
deliver_to_old_ones(pt_prev, skb, 1);
@@ -1213,11 +1211,10 @@ static int sprintf_stats(char *buffer, struct net_device *dev)
static int dev_get_info(char *buffer, char **start, off_t offset, int length)
{
- int len=0;
- off_t begin=0;
- off_t pos=0;
+ int len = 0;
+ off_t begin = 0;
+ off_t pos = 0;
int size;
-
struct net_device *dev;
@@ -1225,31 +1222,31 @@ static int dev_get_info(char *buffer, char **start, off_t offset, int length)
"Inter-| Receive | Transmit\n"
" face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed\n");
- pos+=size;
- len+=size;
+ pos += size;
+ len += size;
read_lock(&dev_base_lock);
for (dev = dev_base; dev != NULL; dev = dev->next) {
size = sprintf_stats(buffer+len, dev);
- len+=size;
- pos=begin+len;
+ len += size;
+ pos = begin + len;
- if(pos<offset) {
- len=0;
- begin=pos;
+ if (pos < offset) {
+ len = 0;
+ begin = pos;
}
- if(pos>offset+length)
+ if (pos > offset + length)
break;
}
read_unlock(&dev_base_lock);
- *start=buffer+(offset-begin); /* Start of wanted data */
- len-=(offset-begin); /* Start slop */
- if(len>length)
- len=length; /* Ending slop */
- if (len<0)
- len=0;
+ *start = buffer + (offset - begin); /* Start of wanted data */
+ len -= (offset - begin); /* Start slop */
+ if (len > length)
+ len = length; /* Ending slop */
+ if (len < 0)
+ len = 0;
return len;
}
@@ -1281,7 +1278,7 @@ static int dev_proc_stats(char *buffer, char **start, off_t offset,
if (len > length)
len = length;
- if(len < 0)
+ if (len < 0)
len = 0;
*start = buffer + offset;
@@ -1308,8 +1305,7 @@ static int sprintf_wireless_stats(char *buffer, struct net_device *dev)
(struct iw_statistics *) NULL);
int size;
- if(stats != (struct iw_statistics *) NULL)
- {
+ if (stats != (struct iw_statistics *) NULL) {
size = sprintf(buffer,
"%6s: %04x %3d%c %3d%c %3d%c %6d %6d %6d\n",
dev->name,
@@ -1350,30 +1346,30 @@ static int dev_get_wireless_info(char * buffer, char **start, off_t offset,
" face | tus | link level noise | nwid crypt misc\n"
);
- pos+=size;
- len+=size;
+ pos += size;
+ len += size;
read_lock(&dev_base_lock);
- for(dev = dev_base; dev != NULL; dev = dev->next) {
- size = sprintf_wireless_stats(buffer+len, dev);
- len+=size;
- pos=begin+len;
-
- if(pos < offset) {
- len=0;
- begin=pos;
+ for (dev = dev_base; dev != NULL; dev = dev->next) {
+ size = sprintf_wireless_stats(buffer + len, dev);
+ len += size;
+ pos = begin + len;
+
+ if (pos < offset) {
+ len = 0;
+ begin = pos;
}
- if(pos > offset + length)
+ if (pos > offset + length)
break;
}
read_unlock(&dev_base_lock);
*start = buffer + (offset - begin); /* Start of wanted data */
len -= (offset - begin); /* Start slop */
- if(len > length)
- len = length; /* Ending slop */
- if (len<0)
- len=0;
+ if (len > length)
+ len = length; /* Ending slop */
+ if (len < 0)
+ len = 0;
return len;
}
@@ -1517,7 +1513,7 @@ static int dev_ifsioc(struct ifreq *ifr, unsigned int cmd)
case SIOCGIFFLAGS: /* Get interface flags */
ifr->ifr_flags = (dev->flags&~(IFF_PROMISC|IFF_ALLMULTI|IFF_RUNNING))
|(dev->gflags&(IFF_PROMISC|IFF_ALLMULTI));
- if (!test_bit(LINK_STATE_DOWN, &dev->state))
+ if (netif_running(dev))
ifr->ifr_flags |= IFF_RUNNING;
return 0;
@@ -1546,6 +1542,9 @@ static int dev_ifsioc(struct ifreq *ifr, unsigned int cmd)
if (ifr->ifr_mtu<0)
return -EINVAL;
+ if (!netif_device_present(dev))
+ return -ENODEV;
+
if (dev->change_mtu)
err = dev->change_mtu(dev, ifr->ifr_mtu);
else {
@@ -1562,17 +1561,19 @@ static int dev_ifsioc(struct ifreq *ifr, unsigned int cmd)
return 0;
case SIOCSIFHWADDR:
- if(dev->set_mac_address==NULL)
+ if (dev->set_mac_address == NULL)
return -EOPNOTSUPP;
- if(ifr->ifr_hwaddr.sa_family!=dev->type)
+ if (ifr->ifr_hwaddr.sa_family!=dev->type)
return -EINVAL;
- err=dev->set_mac_address(dev,&ifr->ifr_hwaddr);
+ if (!netif_device_present(dev))
+ return -ENODEV;
+ err = dev->set_mac_address(dev, &ifr->ifr_hwaddr);
if (!err)
notifier_call_chain(&netdev_chain, NETDEV_CHANGEADDR, dev);
return err;
case SIOCSIFHWBROADCAST:
- if(ifr->ifr_hwaddr.sa_family!=dev->type)
+ if (ifr->ifr_hwaddr.sa_family!=dev->type)
return -EINVAL;
memcpy(dev->broadcast, ifr->ifr_hwaddr.sa_data, MAX_ADDR_LEN);
notifier_call_chain(&netdev_chain, NETDEV_CHANGEADDR, dev);
@@ -1588,21 +1589,28 @@ static int dev_ifsioc(struct ifreq *ifr, unsigned int cmd)
return 0;
case SIOCSIFMAP:
- if (dev->set_config)
+ if (dev->set_config) {
+ if (!netif_device_present(dev))
+ return -ENODEV;
return dev->set_config(dev,&ifr->ifr_map);
+ }
return -EOPNOTSUPP;
case SIOCADDMULTI:
- if(dev->set_multicast_list==NULL ||
- ifr->ifr_hwaddr.sa_family!=AF_UNSPEC)
+ if (dev->set_multicast_list == NULL ||
+ ifr->ifr_hwaddr.sa_family != AF_UNSPEC)
return -EINVAL;
+ if (!netif_device_present(dev))
+ return -ENODEV;
dev_mc_add(dev,ifr->ifr_hwaddr.sa_data, dev->addr_len, 1);
return 0;
case SIOCDELMULTI:
- if(dev->set_multicast_list==NULL ||
- ifr->ifr_hwaddr.sa_family!=AF_UNSPEC)
+ if (dev->set_multicast_list == NULL ||
+ ifr->ifr_hwaddr.sa_family!=AF_UNSPEC)
return -EINVAL;
+ if (!netif_device_present(dev))
+ return -ENODEV;
dev_mc_delete(dev,ifr->ifr_hwaddr.sa_data,dev->addr_len, 1);
return 0;
@@ -1615,7 +1623,7 @@ static int dev_ifsioc(struct ifreq *ifr, unsigned int cmd)
return 0;
case SIOCSIFTXQLEN:
- if(ifr->ifr_qlen<0)
+ if (ifr->ifr_qlen<0)
return -EINVAL;
dev->tx_queue_len = ifr->ifr_qlen;
return 0;
@@ -1635,17 +1643,23 @@ static int dev_ifsioc(struct ifreq *ifr, unsigned int cmd)
*/
default:
- if(cmd >= SIOCDEVPRIVATE &&
- cmd <= SIOCDEVPRIVATE + 15) {
- if (dev->do_ioctl)
+ if (cmd >= SIOCDEVPRIVATE &&
+ cmd <= SIOCDEVPRIVATE + 15) {
+ if (dev->do_ioctl) {
+ if (!netif_device_present(dev))
+ return -ENODEV;
return dev->do_ioctl(dev, ifr, cmd);
+ }
return -EOPNOTSUPP;
}
#ifdef WIRELESS_EXT
- if(cmd >= SIOCIWFIRST && cmd <= SIOCIWLAST) {
- if (dev->do_ioctl)
+ if (cmd >= SIOCIWFIRST && cmd <= SIOCIWLAST) {
+ if (dev->do_ioctl) {
+ if (!netif_device_present(dev))
+ return -ENODEV;
return dev->do_ioctl(dev, ifr, cmd);
+ }
return -EOPNOTSUPP;
}
#endif /* WIRELESS_EXT */
@@ -1869,6 +1883,13 @@ int register_netdevice(struct net_device *dev)
if (dev->rebuild_header == NULL)
dev->rebuild_header = default_rebuild_header;
+ /*
+ * Default initial state at registry is that the
+ * device is present.
+ */
+
+ set_bit(__LINK_STATE_PRESENT, &dev->state);
+
dev->next = NULL;
dev_init_scheduler(dev);
write_lock_bh(&dev_base_lock);
@@ -2049,15 +2070,6 @@ int __init net_dev_init(void)
queue->completion_queue = NULL;
}
- /*
- * The bridge has to be up before the devices
- */
-
-#ifdef CONFIG_BRIDGE
- br_init();
-#endif
-
-
#ifdef CONFIG_NET_PROFILE
net_profile_init();
NET_PROFILE_REGISTER(dev_queue_xmit);
@@ -2125,22 +2137,11 @@ int __init net_dev_init(void)
dst_init();
dev_mcast_init();
-#ifdef CONFIG_BRIDGE
- /*
- * Register any statically linked ethernet devices with the bridge
- */
- br_spacedevice_register();
-#endif
-
/*
* Initialise network devices
*/
net_device_init();
-#ifdef CONFIG_IP_PNP
- ip_auto_config();
-#endif
-
return 0;
}
diff --git a/net/core/dev_mcast.c b/net/core/dev_mcast.c
index 2facf1bc1..0dcedb142 100644
--- a/net/core/dev_mcast.c
+++ b/net/core/dev_mcast.c
@@ -71,17 +71,20 @@ static rwlock_t dev_mc_lock = RW_LOCK_UNLOCKED;
void dev_mc_upload(struct net_device *dev)
{
/* Don't do anything till we up the interface
- [dev_open will call this function so the list will
- stay sane] */
+ * [dev_open will call this function so the list will
+ * stay sane]
+ */
- if(!(dev->flags&IFF_UP))
+ if (!(dev->flags&IFF_UP))
return;
/*
- * Devices with no set multicast don't get set
+ * Devices with no set multicast or which have been
+ * detached don't get set.
*/
- if(dev->set_multicast_list==NULL)
+ if (dev->set_multicast_list == NULL ||
+ !netif_device_present(dev))
return;
read_lock_bh(&dev_mc_lock);
@@ -103,19 +106,20 @@ int dev_mc_delete(struct net_device *dev, void *addr, int alen, int glbl)
struct dev_mc_list *dmi, **dmip;
write_lock_bh(&dev_mc_lock);
- for (dmip=&dev->mc_list; (dmi=*dmip)!=NULL; dmip=&dmi->next) {
+ for (dmip = &dev->mc_list; (dmi = *dmip) != NULL; dmip = &dmi->next) {
/*
* Find the entry we want to delete. The device could
* have variable length entries so check these too.
*/
- if (memcmp(dmi->dmi_addr,addr,dmi->dmi_addrlen)==0 && alen==dmi->dmi_addrlen) {
+ if (memcmp(dmi->dmi_addr, addr, dmi->dmi_addrlen) == 0 &&
+ alen == dmi->dmi_addrlen) {
if (glbl) {
int old_glbl = dmi->dmi_gusers;
dmi->dmi_gusers = 0;
if (old_glbl == 0)
break;
}
- if(--dmi->dmi_users)
+ if (--dmi->dmi_users)
goto done;
/*
@@ -125,7 +129,7 @@ int dev_mc_delete(struct net_device *dev, void *addr, int alen, int glbl)
dev->mc_count--;
write_unlock_bh(&dev_mc_lock);
- kfree_s(dmi,sizeof(*dmi));
+ kfree_s(dmi, sizeof(*dmi));
/*
* We have altered the list, so the card
@@ -153,8 +157,9 @@ int dev_mc_add(struct net_device *dev, void *addr, int alen, int glbl)
dmi1 = (struct dev_mc_list *)kmalloc(sizeof(*dmi), GFP_ATOMIC);
write_lock_bh(&dev_mc_lock);
- for(dmi=dev->mc_list; dmi!=NULL; dmi=dmi->next) {
- if (memcmp(dmi->dmi_addr,addr,dmi->dmi_addrlen)==0 && dmi->dmi_addrlen==alen) {
+ for (dmi = dev->mc_list; dmi != NULL; dmi = dmi->next) {
+ if (memcmp(dmi->dmi_addr, addr, dmi->dmi_addrlen) == 0 &&
+ dmi->dmi_addrlen == alen) {
if (glbl) {
int old_glbl = dmi->dmi_gusers;
dmi->dmi_gusers = 1;
@@ -166,16 +171,16 @@ int dev_mc_add(struct net_device *dev, void *addr, int alen, int glbl)
}
}
- if ((dmi=dmi1)==NULL) {
+ if ((dmi = dmi1) == NULL) {
write_unlock_bh(&dev_mc_lock);
return -ENOMEM;
}
memcpy(dmi->dmi_addr, addr, alen);
- dmi->dmi_addrlen=alen;
- dmi->next=dev->mc_list;
- dmi->dmi_users=1;
- dmi->dmi_gusers=glbl ? 1 : 0;
- dev->mc_list=dmi;
+ dmi->dmi_addrlen = alen;
+ dmi->next = dev->mc_list;
+ dmi->dmi_users = 1;
+ dmi->dmi_gusers = glbl ? 1 : 0;
+ dev->mc_list = dmi;
dev->mc_count++;
write_unlock_bh(&dev_mc_lock);
dev_mc_upload(dev);
@@ -195,14 +200,14 @@ done:
void dev_mc_discard(struct net_device *dev)
{
write_lock_bh(&dev_mc_lock);
- while (dev->mc_list!=NULL) {
- struct dev_mc_list *tmp=dev->mc_list;
- dev->mc_list=tmp->next;
+ while (dev->mc_list != NULL) {
+ struct dev_mc_list *tmp = dev->mc_list;
+ dev->mc_list = tmp->next;
if (tmp->dmi_users > tmp->dmi_gusers)
printk("dev_mc_discard: multicast leakage! dmi_users=%d\n", tmp->dmi_users);
- kfree_s(tmp,sizeof(*tmp));
+ kfree_s(tmp, sizeof(*tmp));
}
- dev->mc_count=0;
+ dev->mc_count = 0;
write_unlock_bh(&dev_mc_lock);
}
@@ -210,9 +215,9 @@ void dev_mc_discard(struct net_device *dev)
static int dev_mc_read_proc(char *buffer, char **start, off_t offset,
int length, int *eof, void *data)
{
- off_t pos=0, begin=0;
+ off_t pos = 0, begin = 0;
struct dev_mc_list *m;
- int len=0;
+ int len = 0;
struct net_device *dev;
read_lock(&dev_base_lock);
@@ -221,20 +226,20 @@ static int dev_mc_read_proc(char *buffer, char **start, off_t offset,
for (m = dev->mc_list; m; m = m->next) {
int i;
- len += sprintf(buffer+len,"%-4d %-15s %-5d %-5d ", dev->ifindex, dev->name,
- m->dmi_users, m->dmi_gusers);
+ len += sprintf(buffer+len,"%-4d %-15s %-5d %-5d ", dev->ifindex,
+ dev->name, m->dmi_users, m->dmi_gusers);
- for (i=0; i<m->dmi_addrlen; i++)
+ for (i = 0; i < m->dmi_addrlen; i++)
len += sprintf(buffer+len, "%02x", m->dmi_addr[i]);
- len+=sprintf(buffer+len, "\n");
+ len += sprintf(buffer+len, "\n");
- pos=begin+len;
+ pos = begin + len;
if (pos < offset) {
- len=0;
- begin=pos;
+ len = 0;
+ begin = pos;
}
- if (pos > offset+length) {
+ if (pos > offset + length) {
read_unlock_bh(&dev_mc_lock);
goto done;
}
@@ -245,12 +250,12 @@ static int dev_mc_read_proc(char *buffer, char **start, off_t offset,
done:
read_unlock(&dev_base_lock);
- *start=buffer+(offset-begin);
- len-=(offset-begin);
- if(len>length)
- len=length;
- if(len<0)
- len=0;
+ *start = buffer + (offset - begin);
+ len -= (offset - begin);
+ if (len > length)
+ len = length;
+ if (len < 0)
+ len = 0;
return len;
}
#endif
diff --git a/net/core/profile.c b/net/core/profile.c
index 8b2616c50..0408447cb 100644
--- a/net/core/profile.c
+++ b/net/core/profile.c
@@ -271,12 +271,6 @@ int __init net_profile_init(void)
register_netdevice(&whitehole_dev);
printk("Evaluating net profiler cost ...");
-#if CPU == 586 || CPU == 686
- if (!(boot_cpu_data.x86_capability & X86_FEATURE_TSC)) {
- printk(KERN_ERR "Sorry, your CPU does not support TSC. Net profiler disabled.\n");
- return -1;
- }
-#endif
#ifdef __alpha__
alpha_tick(0);
#endif
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index 9cdc290bf..c549162a9 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -171,7 +171,7 @@ static int rtnetlink_fill_ifinfo(struct sk_buff *skb, struct net_device *dev,
r->ifi_flags = dev->flags;
r->ifi_change = change;
- if (test_bit(LINK_STATE_DOWN, &dev->state))
+ if (! netif_running(dev))
r->ifi_flags &= ~IFF_RUNNING;
else
r->ifi_flags |= IFF_RUNNING;
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index 95e4d8e17..30aa1f6bb 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -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.66 2000/02/09 21:11:30 davem Exp $
+ * Version: $Id: skbuff.c,v 1.68 2000/02/18 16:47:18 davem Exp $
*
* Fixes:
* Alan Cox : Fixed the worst of the load balancer bugs.
@@ -49,6 +49,7 @@
#include <linux/string.h>
#include <linux/skbuff.h>
#include <linux/slab.h>
+#include <linux/cache.h>
#include <linux/init.h>
#include <net/ip.h>
@@ -193,7 +194,6 @@ static inline void skb_headerinit(void *p, kmem_cache_t *cache,
skb->destructor = NULL;
skb->pkt_type = PACKET_HOST; /* Default type */
- skb->pkt_bridged = 0; /* Not bridged */
skb->prev = skb->next = NULL;
skb->list = NULL;
skb->sk = NULL;