mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-10-30 18:07:52 +00:00
wifi-5624: Fix eth port VLAN Access in wifi6
Fix ethernet port vlan access mode in wifi6 Create a vlan bridge and attach wan vlan interface and eth port in the vlan bridge. Signed-off-by: Chaitanya Godavarthi <chaitanya.kiran@netexperience.com>
This commit is contained in:
committed by
Arif
parent
da9e6919af
commit
e8483f021b
@@ -1187,7 +1187,6 @@ void apc_init()
|
|||||||
cloud_disconn_mon();
|
cloud_disconn_mon();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void apply_config_handler(struct timeout *timeout)
|
static void apply_config_handler(struct timeout *timeout)
|
||||||
{
|
{
|
||||||
radius_proxy_fixup();
|
radius_proxy_fixup();
|
||||||
|
|||||||
@@ -317,6 +317,15 @@ static void vlan_trunk_set(struct blob_buf *b, struct blob_buf *del,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void reload_vlan_trunk(struct schema_Wifi_Inet_Config *iconf)
|
||||||
|
{
|
||||||
|
char buf[128] = {0};
|
||||||
|
|
||||||
|
snprintf(buf, sizeof(buf), "ACTION=ifup INTERFACE=%s /sbin/hotplug-call iface",iconf->if_name);
|
||||||
|
|
||||||
|
system(buf);
|
||||||
|
}
|
||||||
|
|
||||||
static int wifi_inet_conf_add(struct schema_Wifi_Inet_Config *iconf)
|
static int wifi_inet_conf_add(struct schema_Wifi_Inet_Config *iconf)
|
||||||
{
|
{
|
||||||
const char *lease_time = SCHEMA_FIND_KEY(iconf->dhcpd, "lease_time");
|
const char *lease_time = SCHEMA_FIND_KEY(iconf->dhcpd, "lease_time");
|
||||||
@@ -324,6 +333,7 @@ static int wifi_inet_conf_add(struct schema_Wifi_Inet_Config *iconf)
|
|||||||
const char *dhcp_stop = SCHEMA_FIND_KEY(iconf->dhcpd, "stop");
|
const char *dhcp_stop = SCHEMA_FIND_KEY(iconf->dhcpd, "stop");
|
||||||
int len = strlen(iconf->if_name);
|
int len = strlen(iconf->if_name);
|
||||||
int is_ipv6 = 0;
|
int is_ipv6 = 0;
|
||||||
|
int reload_trunk = 0;
|
||||||
|
|
||||||
if (len && iconf->if_name[len - 1] == '6')
|
if (len && iconf->if_name[len - 1] == '6')
|
||||||
is_ipv6 = 1;
|
is_ipv6 = 1;
|
||||||
@@ -428,6 +438,7 @@ static int wifi_inet_conf_add(struct schema_Wifi_Inet_Config *iconf)
|
|||||||
vlan_trunk_set(&b, &del, iconf);
|
vlan_trunk_set(&b, &del, iconf);
|
||||||
blobmsg_add_string(&b, "ifname", iconf->parent_ifname);
|
blobmsg_add_string(&b, "ifname", iconf->parent_ifname);
|
||||||
blobmsg_add_bool(&b, "vlan_trunk", 1);
|
blobmsg_add_bool(&b, "vlan_trunk", 1);
|
||||||
|
reload_trunk = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
blob_to_uci_section(uci, "network", iconf->if_name, "interface", b.head, &network_param, del.head);
|
blob_to_uci_section(uci, "network", iconf->if_name, "interface", b.head, &network_param, del.head);
|
||||||
@@ -445,6 +456,10 @@ static int wifi_inet_conf_add(struct schema_Wifi_Inet_Config *iconf)
|
|||||||
|
|
||||||
uci_commit_all(uci);
|
uci_commit_all(uci);
|
||||||
|
|
||||||
|
/*workaround, trunk interface doesnt reload in reload_config */
|
||||||
|
if(reload_trunk)
|
||||||
|
reload_vlan_trunk(iconf);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -304,15 +304,14 @@ static void update_eth_ports_states(struct schema_Wifi_Inet_State *state)
|
|||||||
}
|
}
|
||||||
for (i = 0; i < MAX_ETH_PORTS && lanport[i].ifname != NULL; i++) {
|
for (i = 0; i < MAX_ETH_PORTS && lanport[i].ifname != NULL; i++) {
|
||||||
if (strcmp(lanport[i].bridge, brname) == 0) {
|
if (strcmp(lanport[i].bridge, brname) == 0) {
|
||||||
STRSCPY(state->eth_ports_keys[cnt+i], lanport[i].ifname);
|
STRSCPY(state->eth_ports_keys[state->eth_ports_len], lanport[i].ifname);
|
||||||
memset(port_status, '\0', sizeof(port_status));
|
memset(port_status, '\0', sizeof(port_status));
|
||||||
snprintf(port_status, sizeof(port_status), "%s lan %sMbps %s",
|
snprintf(port_status, sizeof(port_status), "%s lan %sMbps %s",
|
||||||
lanport[i].state, lanport[i].speed, lanport[i].duplex);
|
lanport[i].state, lanport[i].speed, lanport[i].duplex);
|
||||||
|
|
||||||
STRSCPY(state->eth_ports[cnt+i], port_status);
|
STRSCPY(state->eth_ports[state->eth_ports_len], port_status);
|
||||||
state->eth_ports_len++;
|
state->eth_ports_len++;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!strncmp(state->if_name, "eth", 3)) {
|
if (!strncmp(state->if_name, "eth", 3)) {
|
||||||
|
|||||||
@@ -14,19 +14,41 @@ json_select ..
|
|||||||
ifname=$(uci get network.wan.ifname)
|
ifname=$(uci get network.wan.ifname)
|
||||||
ifname=${ifname%% *}
|
ifname=${ifname%% *}
|
||||||
}
|
}
|
||||||
|
|
||||||
if [ "$ACTION" = ifup -o "$ACTION" = ifupdate ]; then
|
if [ "$ACTION" = ifup -o "$ACTION" = ifupdate ]; then
|
||||||
trunk=$(uci get network.${INTERFACE}.vlan_trunk)
|
trunk=$(uci get network.${INTERFACE}.vlan_trunk)
|
||||||
if [ "$trunk" = 1 ]; then
|
if [ "$trunk" = 1 ]; then
|
||||||
net=$(uci get network.${INTERFACE}.ifname)
|
net=$(uci get network.${INTERFACE}.ifname)
|
||||||
allowed_vlans=$(uci get network.${INTERFACE}.allowed_vlans)
|
allowed_vlans=$(uci get network.${INTERFACE}.allowed_vlans)
|
||||||
pvid=$(uci get network.${INTERFACE}.pvid)
|
pvid=$(uci get network.${INTERFACE}.pvid)
|
||||||
|
brctl addif br-wan $net
|
||||||
|
|
||||||
[ -z "$allowed_vlans" ] || {
|
[ -z "$allowed_vlans" ] || {
|
||||||
|
stale_allowed_vlans=`cat /etc/allowed_vlans_$INTERFACE`
|
||||||
|
for vid in $stale_allowed_vlans
|
||||||
|
do
|
||||||
|
echo "stale: $vid" >> /root/hello
|
||||||
|
brctl delif vlan-$vid $net.$vid
|
||||||
|
ip link set dev $net.$vid down
|
||||||
|
ip link del link $net name $net.$vid
|
||||||
|
bridge vlan del vid $vid dev $net
|
||||||
|
bridge vlan del vid $vid dev br-lan self
|
||||||
|
bridge vlan del vid $vid dev br-wan self
|
||||||
|
done
|
||||||
|
|
||||||
echo $allowed_vlans > /etc/allowed_vlans_$INTERFACE
|
echo $allowed_vlans > /etc/allowed_vlans_$INTERFACE
|
||||||
echo $pvid > /etc/pvid_$INTERFACE
|
|
||||||
for vid in $allowed_vlans
|
for vid in $allowed_vlans
|
||||||
do
|
do
|
||||||
|
ip link add link $ifname name $ifname.$vid type vlan id $vid
|
||||||
|
ip link set dev $ifname.$vid up
|
||||||
|
|
||||||
|
ip link add link $net name $net.$vid type vlan id $vid
|
||||||
|
ip link set dev $net.$vid up
|
||||||
|
|
||||||
|
brctl addbr vlan-$vid
|
||||||
|
brctl addif vlan-$vid $ifname.$vid
|
||||||
|
brctl addif vlan-$vid $net.$vid
|
||||||
|
ifconfig vlan-$vid up
|
||||||
|
|
||||||
bridge vlan add vid $vid dev br-lan self
|
bridge vlan add vid $vid dev br-lan self
|
||||||
bridge vlan add vid $vid dev br-wan self
|
bridge vlan add vid $vid dev br-wan self
|
||||||
bridge vlan add vid $vid dev $ifname
|
bridge vlan add vid $vid dev $ifname
|
||||||
@@ -34,16 +56,25 @@ if [ "$ACTION" = ifup -o "$ACTION" = ifupdate ]; then
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
[ -z "$pvid" ] || {
|
[ -z "$pvid" ] || {
|
||||||
bridge vlan add vid $pvid dev br-lan self
|
echo $pvid > /etc/pvid_$INTERFACE
|
||||||
bridge vlan add vid $pvid dev br-wan self
|
|
||||||
bridge vlan add vid $pvid dev $ifname
|
|
||||||
bridge vlan add pvid $pvid vid $pvid dev $net untagged
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
vid=$(uci get network.${INTERFACE}.vid)
|
vid=$(uci get network.${INTERFACE}.vid)
|
||||||
net=$(uci get network.${INTERFACE}.ifname)
|
net=$(uci get network.${INTERFACE}.ifname)
|
||||||
|
|
||||||
[ -z "$net" -o -z "$vid" -o "$vid" = 0 ] && exit 0
|
[ -z "$net" -o -z "$vid" -o "$vid" = 0 ] && exit 0
|
||||||
|
$oldvid=`cat /etc/vid_$INTERFACE`
|
||||||
|
echo $vid > /etc/vid_$INTERFACE
|
||||||
|
|
||||||
|
ip link add link $ifname name $ifname.$vid type vlan id $vid
|
||||||
|
ip link set dev $ifname.$vid up
|
||||||
|
brctl addbr vlan-$vid
|
||||||
|
brctl addif vlan-$vid $ifname.$vid
|
||||||
|
brctl delif br-wan $net
|
||||||
|
brctl delif br-lan $net
|
||||||
|
brctl delif vlan-$oldvid $net
|
||||||
|
brctl addif vlan-$vid $net
|
||||||
|
ifconfig vlan-$vid up
|
||||||
|
|
||||||
bridge vlan add vid $vid dev br-lan self
|
bridge vlan add vid $vid dev br-lan self
|
||||||
bridge vlan add vid $vid dev br-wan self
|
bridge vlan add vid $vid dev br-wan self
|
||||||
@@ -62,6 +93,9 @@ else
|
|||||||
for vid in $allowed_vlans
|
for vid in $allowed_vlans
|
||||||
do
|
do
|
||||||
bridge vlan del vid $vid dev $net
|
bridge vlan del vid $vid dev $net
|
||||||
|
brctl delif vlan-$vid $net.$vid
|
||||||
|
ip link set dev $net.$vid down
|
||||||
|
ip link del link $net name $net.$vid
|
||||||
done
|
done
|
||||||
|
|
||||||
pvid=`cat /etc/pvid_$INTERFACE`
|
pvid=`cat /etc/pvid_$INTERFACE`
|
||||||
@@ -73,6 +107,7 @@ else
|
|||||||
bridge vlan del pvid $vid vid $vid dev $net untagged
|
bridge vlan del pvid $vid vid $vid dev $net untagged
|
||||||
|
|
||||||
bridge vlan add pvid 1 vid 1 dev $net untagged
|
bridge vlan add pvid 1 vid 1 dev $net untagged
|
||||||
|
brctl delif vlan-$vid $net
|
||||||
fi
|
fi
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user