function fbwifi.instate_client_rule()

in fbwifi/files/fbwifi/usr/lib/lua/fbwifi.lua [62:97]


function fbwifi.instate_client_rule( token, client_mac )

    log.syslog(log.LOG_INFO, "[fbwifi] Validating client "..client_mac)

    state = uci.cursor("/var/state", "/tmp/fbwifi")
    state_name = "token_" .. token

    RULE_COND="iptables -w -L FBWIFI_CLIENT_TO_INTERNET -t mangle | grep -i -q \"%s\""
    RULE_FMT="iptables -w -t mangle -%s FBWIFI_CLIENT_TO_INTERNET -m mac --mac-source \"%s\" -j MARK --set-mark 0xfb"
    local RULE

    log.syslog(log.LOG_INFO, string.format("[fbwifi] Cleaning DB for MAC %s", client_mac) )
    mac_to_purge = client_mac
    state:foreach("fbwifi", "client", remove_client_by_mac)
    
        
    log.syslog(log.LOG_INFO, string.format("[fbwifi] Adding DB entry %s for MAC %s", state_name, client_mac) )
    state:set("fbwifi", state_name, "client")
    state:set("fbwifi", state_name, "token", token)
    state:set("fbwifi", state_name, "mac", client_mac)
    state:set("fbwifi", state_name, "authenticated", "true")
                
    
    
    RULE=string.format(RULE_COND.." || "..RULE_FMT, client_mac, "A", client_mac)

    log.syslog(log.LOG_INFO, string.format( "[fbwifi] Opening iptables for %s", client_mac ) )
    res = os.execute(RULE)
    if res ~= 0 then 
        log.syslog(log.LOG_WARNING, string.format( "[fbwifi] Failed to update iptables (%s)", res ) )
    end
    log.syslog(log.LOG_INFO, "[fbwifi] "..RULE)

    state:save('fbwifi')
    state:commit('fbwifi')
end