#!/bin/sh

. /lib/functions.sh
. /usr/share/libubox/jshn.sh

detect_missing_options() {
	local fallback_vlan accept_vlan guest_vlan reject_vlan
	config_get fallback_vlan "$1" fallback_vlan ""
	config_get accept_vlan "$1" accept_vlan ""
	config_get guest_vlan "$1" guest_vlan ""
	config_get reject_vlan "$1" reject_vlan ""
	[ -z "$fallback_vlan" ] && [ -z "$accept_vlan" ] && [ -z "$guest_vlan" ] && [ -z "$reject_vlan" ] ||  exit 0
}
config_load "port_security"
config_foreach "detect_missing_options" "port"

fix_ports() {
	local sid="$2"
	local port="$1"
	[ "${port: -2}" = ":u" ] && {
		config_get vid "$sid" "vlan"
		port_sid="${port::-2}" 
		uci_set "port_security" "$port_sid" "accept_vlan" "$vid"
		policy=$(uci_get "port_security" "$port_sid" "aaa_fail_policy")
		fallback_vlan="disabled"
		[ "$policy" = "ACCEPT" ] && fallback_vlan="$vid"
		uci_set "port_security" "$port_sid" "fallback_vlan" "$fallback_vlan"
		uci_set "port_security" "$port_sid" "reject_vlan" "disabled"
		uci_set "port_security" "$port_sid" "guest_vlan" "disabled"
	}
}

load_vlans() {
	config_list_foreach "$1" "ports" "fix_ports" "$1"
}
config_load "network"
config_foreach "load_vlans" "bridge-vlan"
uci_commit "port_security"
