mirror of
https://github.com/rsmarples/dhcpcd.git
synced 2024-11-28 04:25:19 +08:00
Skip Virtual Interface Masters.
Currently this only applies to FreeBSD VAP masters as dhcpcd should only work on wlandev created clones.
This commit is contained in:
parent
5979b60841
commit
ddfe5016ba
34
net.c
34
net.c
@ -186,6 +186,33 @@ carrier_status(struct interface *iface)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* FreeBSD allows for Virtual Access Points
|
||||
* We need to check if the interface is a Virtual Interface Master
|
||||
* and if so, don't use it.
|
||||
*/
|
||||
static int
|
||||
vi_master(const char *ifname)
|
||||
{
|
||||
#ifdef SIOCGIFMEDIA
|
||||
struct ifmediareq ifmr;
|
||||
char ssid[IF_SSIDSIZE];
|
||||
|
||||
memset(&ifmr, 0, sizeof(ifmr));
|
||||
strlcpy(ifmr.ifm_name, ifname, sizeof(ifmr.ifm_name));
|
||||
if (ioctl(socket_afnet, SIOCGIFMEDIA, &ifmr) == -1)
|
||||
return -1;
|
||||
if (ifmr.ifm_status & IFM_AVALID &&
|
||||
IFM_TYPE(ifmr.ifm_active) == IFM_IEEE80211)
|
||||
{
|
||||
if (getifssid(ifname, ssid) == -1)
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
up_interface(struct interface *iface)
|
||||
{
|
||||
@ -318,6 +345,13 @@ discover_interfaces(int argc, char * const *argv)
|
||||
if (ifac && i == ifac)
|
||||
continue;
|
||||
|
||||
if (vi_master(ifa->ifa_name) == 1) {
|
||||
syslog(LOG_DEBUG,
|
||||
"%s: is a Virtual Interface Master, skipping",
|
||||
ifa->ifa_name);
|
||||
continue;
|
||||
}
|
||||
|
||||
ifp = calloc(1, sizeof(*ifp));
|
||||
if (ifp == NULL)
|
||||
return NULL;
|
||||
|
Loading…
Reference in New Issue
Block a user