Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 247715
b: refs/heads/master
c: 3fb72f1
h: refs/heads/master
i:
  247713: 3b45a4c
  247711: d4e7c25
v: v3
  • Loading branch information
Micha Nelissen authored and David S. Miller committed May 19, 2011
1 parent 0eb4d12 commit a41bb8f
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 14 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: c182f90bc1f22ce5039b8722e45621d5f96862c2
refs/heads/master: 3fb72f1e6e6165c5f495e8dc11c5bbd14c73385c
35 changes: 22 additions & 13 deletions trunk/net/ipv4/ipconfig.c
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,8 @@
#endif

/* Define the friendly delay before and after opening net devices */
#define CONF_PRE_OPEN 500 /* Before opening: 1/2 second */
#define CONF_POST_OPEN 1 /* After opening: 1 second */
#define CONF_POST_OPEN 10 /* After opening: 10 msecs */
#define CONF_CARRIER_TIMEOUT 120000 /* Wait for carrier timeout */

/* Define the timeout for waiting for a DHCP/BOOTP/RARP reply */
#define CONF_OPEN_RETRIES 2 /* (Re)open devices twice */
Expand Down Expand Up @@ -188,21 +188,22 @@ struct ic_device {
static struct ic_device *ic_first_dev __initdata = NULL;/* List of open device */
static struct net_device *ic_dev __initdata = NULL; /* Selected device */

static bool __init ic_device_match(struct net_device *dev)
static bool __init ic_is_init_dev(struct net_device *dev)
{
if (user_dev_name[0] ? !strcmp(dev->name, user_dev_name) :
if (dev->flags & IFF_LOOPBACK)
return false;
return user_dev_name[0] ? !strcmp(dev->name, user_dev_name) :
(!(dev->flags & IFF_LOOPBACK) &&
(dev->flags & (IFF_POINTOPOINT|IFF_BROADCAST)) &&
strncmp(dev->name, "dummy", 5)))
return true;
return false;
strncmp(dev->name, "dummy", 5));
}

static int __init ic_open_devs(void)
{
struct ic_device *d, **last;
struct net_device *dev;
unsigned short oflags;
unsigned long start;

last = &ic_first_dev;
rtnl_lock();
Expand All @@ -216,9 +217,7 @@ static int __init ic_open_devs(void)
}

for_each_netdev(&init_net, dev) {
if (dev->flags & IFF_LOOPBACK)
continue;
if (ic_device_match(dev)) {
if (ic_is_init_dev(dev)) {
int able = 0;
if (dev->mtu >= 364)
able |= IC_BOOTP;
Expand Down Expand Up @@ -252,6 +251,17 @@ static int __init ic_open_devs(void)
dev->name, able, d->xid));
}
}

/* wait for a carrier on at least one device */
start = jiffies;
while (jiffies - start < msecs_to_jiffies(CONF_CARRIER_TIMEOUT)) {
for_each_netdev(&init_net, dev)
if (ic_is_init_dev(dev) && netif_carrier_ok(dev))
goto have_carrier;

msleep(1);
}
have_carrier:
rtnl_unlock();

*last = NULL;
Expand Down Expand Up @@ -1324,14 +1334,13 @@ static int __init wait_for_devices(void)
{
int i;

msleep(CONF_PRE_OPEN);
for (i = 0; i < DEVICE_WAIT_MAX; i++) {
struct net_device *dev;
int found = 0;

rtnl_lock();
for_each_netdev(&init_net, dev) {
if (ic_device_match(dev)) {
if (ic_is_init_dev(dev)) {
found = 1;
break;
}
Expand Down Expand Up @@ -1378,7 +1387,7 @@ static int __init ip_auto_config(void)
return err;

/* Give drivers a chance to settle */
ssleep(CONF_POST_OPEN);
msleep(CONF_POST_OPEN);

/*
* If the config information is insufficient (e.g., our IP address or
Expand Down

0 comments on commit a41bb8f

Please sign in to comment.