Skip to content

Commit

Permalink
Set the broadcast flag for interfaces that say they need it.
Browse files Browse the repository at this point in the history
  • Loading branch information
rsmarples committed Mar 5, 2010
1 parent 9d1e81b commit 3bc21a1
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 0 deletions.
3 changes: 3 additions & 0 deletions dhcpcd.c
Expand Up @@ -765,6 +765,9 @@ configure_interface1(struct interface *iface)
uint8_t *duid;
size_t len = 0, ifl;

/* Do any platform specific configuration */
if_conf(iface);

if (iface->flags & IFF_POINTOPOINT && !(ifo->options & DHCPCD_INFORM))
ifo->options |= DHCPCD_STATIC;
if (iface->flags & IFF_NOARP ||
Expand Down
7 changes: 7 additions & 0 deletions if-bsd.c
Expand Up @@ -79,6 +79,13 @@ if_init(_unused struct interface *iface)
return 0;
}

int
if_conf(_unused struct interface *iface)
{
/* No extra checks needed on BSD */
return 0;
}

int
init_sockets(void)
{
Expand Down
20 changes: 20 additions & 0 deletions if-linux.c
Expand Up @@ -85,6 +85,26 @@ if_init(struct interface *iface)
return n == -1 ? -1 : 0;
}

int
if_conf(struct interface *iface)
{
char path[PATH_MAX], buf[1];
FILE *fp;

/* Some qeth setups require the use of the broadcast flag. */
snprintf(path, sizeof(path),
"/sys/class/net/%s/device/layer2",
iface->name);

fp = fopen(path, "r");
if (fp == NULL)
return errno == ENOENT ? 0 : -1;
if (fgets(buf, sizeof(buf), fp) != NULL && buf[0] == '0')
iface->state->options->options |= DHCPCD_BROADCAST;
fclose(fp);
return 0;
}

static int
_open_link_socket(struct sockaddr_nl *nl)
{
Expand Down
1 change: 1 addition & 0 deletions net.h
Expand Up @@ -105,6 +105,7 @@ int inet_ntocidr(struct in_addr);
int inet_cidrtoaddr(int, struct in_addr *);

int up_interface(struct interface *);
int if_conf(struct interface *);
int if_init(struct interface *);

int do_address(const char *,
Expand Down

0 comments on commit 3bc21a1

Please sign in to comment.