probing.c, probing.h, dhcp.c: code fixes, use black list.

+ probing.h/free_net_devices():
  - New function declared;
+ probing.c/free_net_devices():
  - Reverse for get_net_devices() to avoid memory leaks;
+ probing.c/net_dev_black_list:
  - Wireless interfaces "wlan*" added to black list;
+ dhcp.c/perform_dhcp():
  - No more restrict by interface name;
This commit is contained in:
Leonid Krivoshein 2018-04-22 15:48:10 +03:00
parent da664f7f9e
commit 485839e4cc
3 changed files with 33 additions and 9 deletions

2
dhcp.c
View File

@ -520,10 +520,12 @@ enum return_type perform_dhcp(struct interface_info * intf)
int num_options;
char requested_options[50];
/* Now used net_dev_black_list[], see get_net_devices() in probing.c
if (strncmp(intf->device, "en", 2) & strncmp(intf->device, "eth", 3)) {
stg1_info_message("DHCP available only for Ethernet networking.");
return RETURN_ERROR;
}
*/
s = socket(AF_INET, SOCK_DGRAM, 0);
if (s < 0) {

View File

@ -60,6 +60,7 @@ struct net_description_elem
char * intf_name;
char * intf_description;
};
static char * net_dev_black_list[] = {"lo", "wlan", /* add what you need here! */ NULL};
static struct net_description_elem net_descriptions[50];
static int net_descr_number = 0;
static char * intf_descr_for_discover = NULL;
@ -292,21 +293,41 @@ static int net_device_available(char * device)
char ** get_net_devices(void)
{
DIR * sys_net;
char * tmp[50];
char * tmp[50] = {NULL};
struct dirent * ent;
int i = 0;
sys_net = opendir("/sys/class/net");
if (sys_net == NULL) return(strdup("\0"));
int drop, j, i = 0;
while ( ent = readdir(sys_net)){
if( !strcmp("lo", ent->d_name))continue;
if (net_device_available(ent->d_name)){
sys_net = opendir("/sys/class/net");
if (sys_net == NULL)
return memdup(tmp, sizeof(tmp[0]));
while ((ent = readdir(sys_net)) != NULL)
{
/* check interface name in black list */
for (drop=j=0; net_dev_black_list[j] != NULL; j++)
if (strncmp(ent->d_name, net_dev_black_list[j], strlen(net_dev_black_list[j])) == 0) {
drop = -1;
break;
}
if (!drop && net_device_available(ent->d_name)) {
tmp[i++] = strdup(ent->d_name);
}
}
tmp[i++] = NULL;
closedir(sys_net);
return memdup(tmp, sizeof(char *) * i);
return memdup(tmp, sizeof(tmp[0]) * i);
}
/* reverse for get_net_devices() to avoid memory leaks */
void free_net_devices(char ** list)
{
char ** item;
for (item = list; *item; item++) {
free(*item);
*item = NULL;
}
free(list);
}
#endif /* DISABLE_NETWORK */

View File

@ -27,6 +27,7 @@ enum media_type { CDROM, DISK, FLOPPY, TAPE, UNKNOWN_MEDIA };
void get_medias(enum media_type media, char *** names, char *** models);
void probe_hiddev();
char ** get_net_devices(void);
void free_net_devices(char ** list);
void net_discovered_interface(char * intf_name);
char * get_net_intf_description(char * intf_name);