|
@@ -481,6 +481,7 @@ static void vlan_newlink(char *ifname, struct hostapd_data *hapd)
|
|
|
char br_name[IFNAMSIZ];
|
|
|
struct hostapd_vlan *vlan = hapd->conf->vlan;
|
|
|
char *tagged_interface = hapd->conf->ssid.vlan_tagged_interface;
|
|
|
+ int vlan_naming = hapd->conf->ssid.vlan_naming;
|
|
|
|
|
|
wpa_printf(MSG_DEBUG, "VLAN: vlan_newlink(%s)", ifname);
|
|
|
|
|
@@ -496,13 +497,21 @@ static void vlan_newlink(char *ifname, struct hostapd_data *hapd)
|
|
|
ifconfig_up(br_name);
|
|
|
|
|
|
if (tagged_interface) {
|
|
|
-
|
|
|
+ if (vlan_naming ==
|
|
|
+ DYNAMIC_VLAN_NAMING_WITH_DEVICE)
|
|
|
+ os_snprintf(vlan_ifname,
|
|
|
+ sizeof(vlan_ifname),
|
|
|
+ "%s.%d", tagged_interface,
|
|
|
+ vlan->vlan_id);
|
|
|
+ else
|
|
|
+ os_snprintf(vlan_ifname,
|
|
|
+ sizeof(vlan_ifname),
|
|
|
+ "vlan%d", vlan->vlan_id);
|
|
|
+
|
|
|
+ ifconfig_up(tagged_interface);
|
|
|
if (!vlan_add(tagged_interface, vlan->vlan_id))
|
|
|
vlan->clean |= DVLAN_CLEAN_VLAN;
|
|
|
|
|
|
- os_snprintf(vlan_ifname, sizeof(vlan_ifname),
|
|
|
- "vlan%d", vlan->vlan_id);
|
|
|
-
|
|
|
if (!br_addif(br_name, vlan_ifname))
|
|
|
vlan->clean |= DVLAN_CLEAN_VLAN_PORT;
|
|
|
|
|
@@ -527,6 +536,7 @@ static void vlan_dellink(char *ifname, struct hostapd_data *hapd)
|
|
|
char br_name[IFNAMSIZ];
|
|
|
struct hostapd_vlan *first, *prev, *vlan = hapd->conf->vlan;
|
|
|
char *tagged_interface = hapd->conf->ssid.vlan_tagged_interface;
|
|
|
+ int vlan_naming = hapd->conf->ssid.vlan_naming;
|
|
|
|
|
|
wpa_printf(MSG_DEBUG, "VLAN: vlan_dellink(%s)", ifname);
|
|
|
|
|
@@ -541,8 +551,16 @@ static void vlan_dellink(char *ifname, struct hostapd_data *hapd)
|
|
|
br_delif(br_name, vlan->ifname);
|
|
|
|
|
|
if (tagged_interface) {
|
|
|
- os_snprintf(vlan_ifname, sizeof(vlan_ifname),
|
|
|
- "vlan%d", vlan->vlan_id);
|
|
|
+ if (vlan_naming ==
|
|
|
+ DYNAMIC_VLAN_NAMING_WITH_DEVICE)
|
|
|
+ os_snprintf(vlan_ifname,
|
|
|
+ sizeof(vlan_ifname),
|
|
|
+ "%s.%d", tagged_interface,
|
|
|
+ vlan->vlan_id);
|
|
|
+ else
|
|
|
+ os_snprintf(vlan_ifname,
|
|
|
+ sizeof(vlan_ifname),
|
|
|
+ "vlan%d", vlan->vlan_id);
|
|
|
if (vlan->clean & DVLAN_CLEAN_VLAN_PORT)
|
|
|
br_delif(br_name, vlan_ifname);
|
|
|
ifconfig_down(vlan_ifname);
|
|
@@ -682,7 +700,10 @@ full_dynamic_vlan_init(struct hostapd_data *hapd)
|
|
|
if (priv == NULL)
|
|
|
return NULL;
|
|
|
|
|
|
- vlan_set_name_type(VLAN_NAME_TYPE_PLUS_VID_NO_PAD);
|
|
|
+ vlan_set_name_type(hapd->conf->ssid.vlan_naming ==
|
|
|
+ DYNAMIC_VLAN_NAMING_WITH_DEVICE ?
|
|
|
+ VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD :
|
|
|
+ VLAN_NAME_TYPE_PLUS_VID_NO_PAD);
|
|
|
|
|
|
priv->s = socket(PF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
|
|
|
if (priv->s < 0) {
|