diff options
Diffstat (limited to 'target/linux/ramips/base-files/usr/bin/dat2uci')
-rwxr-xr-x | target/linux/ramips/base-files/usr/bin/dat2uci | 218 |
1 files changed, 218 insertions, 0 deletions
diff --git a/target/linux/ramips/base-files/usr/bin/dat2uci b/target/linux/ramips/base-files/usr/bin/dat2uci new file mode 100755 index 0000000..88cb695 --- /dev/null +++ b/target/linux/ramips/base-files/usr/bin/dat2uci @@ -0,0 +1,218 @@ +#!/usr/bin/env lua + +--[[ + * A tool to translate ralink driver config (*.dat) into OpenWrt + * UCI files (/etc/config/wireless). + * --- Hua Shao <nossiac@163.com> + * + * For UCI: http://wiki.openwrt.org/doc/techref/uci + * http://wiki.openwrt.org/doc/uci + * + * Copyright (C) 2015 Mediatek CO.,LTD. All rights reserved. + * +]] + +require "shuci" + +T={} + +if #arg < 1 then + io.stderr:write("usage: dat2uci <datfile> [ucifile] \n") + return false +end + +local i,j = string.find(arg[1], ".dat") +if i then + datfile = arg[1] + ucifile = arg[2] or "/etc/config/wireless" +else + ucifile = arg[1] + datfile = arg[2] +end +print("ucifile="..ucifile) +print("datfile="..datfile) + +_,_,device = string.find(datfile, "(%w+).dat") +print("device="..device) + +local _2g_name = {"7601","7602","7603","7620","7623","7628","7688"} +for i=1, #_2g_name do + if string.find(device, _2g_name[i]) then band = "2.4G" break else band = "5G" end +end + +print("band="..band) + + +for line in io.lines(datfile) do + -- print(line) + i,j = string.find(line, "([^%s])") + if i and j then + ch = string.sub(line,i,j) + + if ch == "#" then + -- print("<comment> "..line) + else + _,_,k,v = string.find(line, "%s*([%w_]+)%s*=%s*([^#]*)%s*") + if k then + -- print("<k-v> ",k,v) + local t = {} + T[k] = v + end + end + end +end + +uci = UCI:new() +uci:load(ucifile) + + +--[[ Device related configurations ]] + + +uci:set("wifi-device", device) +uci:set(device, "type", device) +uci:set(device, "vendor", "ralink") +uci:set(device, "band", band) + +if T.AutoChannelSelect ~= 0 then + uci:set(device, "channel", "0") + uci:set(device, "autoch", T.AutoChannelSelect or "nil") +else + uci:set(device, "channel", T.Channel or "nil") + uci:set(device, "autoch", "0") +end +uci:set(device, "radio", T.RadioOn or "nil") +uci:set(device, "wifimode", T.WirelessMode or "nil") +-- bandwidth +if T.BW == 1 and T.VHT_BW == 1 then + uci:set(device, "bw", "2") +elseif T.BW == 0 and T.VHT_BW == 0 then + uci:set(device, "bw", "0") +else + uci:set(device, "bw", "1") +end +uci:set(device, "country", T.CountryCode or "TW") +uci:set(device, "region", T.CountryRegion or "1") +uci:set(device, "bgprotect", T.BGProtection or "0") +uci:set(device, "beacon", T.BeaconPeriod or "100") +uci:set(device, "dtim", T.DtimPeriod or "1") +uci:set(device, "fragthres", T.FragThreshold or "2346") +uci:set(device, "rtsthres", T.RTSThreshold or "2347") +uci:set(device, "txpower", T.TxPower or "100") +uci:set(device, "txpreamble", T.TxPreamble or "0") +uci:set(device, "shortslot", T.ShortSlot or "1") +uci:set(device, "txburst", T.TxBurst or "1") +uci:set(device, "pktaggre", T.PktAggregate or "0") +uci:set(device, "ieee80211h", T.IEEE80211H or "0") +uci:set(device, "ht_bsscoexist", T.HT_BSSCoexistence or "0") +uci:set(device, "ht_extcha", T.HT_EXTCHA or "0") +uci:set(device, "ht_opmode", T.HT_OpMode or "0") +uci:set(device, "ht_gi", T.HT_GI or "1") +uci:set(device, "ht_rdg", T.HT_RDG or "0") +uci:set(device, "ht_stbc", T.HT_STBC or "0") +uci:set(device, "ht_amsdu", T.HT_AMSDU or "0") +uci:set(device, "ht_autoba", T.HT_AutoBA or "1") +uci:set(device, "ht_badec", T.HT_BADecline or "0") +uci:set(device, "ht_distkip", T.HT_DisallowTKIP or "0") +uci:set(device, "ht_ldpc", T.HT_LDPC or "1") +uci:set(device, "ht_txstream", T.HT_TxStream or "1") +uci:set(device, "ht_txstream", T.HT_RxStream or "1") +if band == "5G" then + uci:set(device, "aregion", T.CountryRegionABand or "7") -- 5G + uci:set(device, "vht_stbc", T.VHT_STBC or "0") -- 5G + uci:set(device, "vht_sgi", T.VHT_SGI or "1") -- 5G + uci:set(device, "vht_bw_sig", T.VHT_BW_SIGNAL or "0") -- 5G + uci:set(device, "vht_ldpc", T.VHT_LDPC or "1") -- 5G + uci:set(device, "vht_disnonvht", T.VHT_DisallowNonVHT or "0") -- 5G +end + +--uci:dump() +--[[ Interface related configurations. ]] + +function split(inputstr, delimiter) + if delimiter == nil then + delimiter = "%s" + end + local t={} ; i=1 + for str in string.gmatch(inputstr, "([^"..delimiter.."]+)") do + t[i] = str + i = i + 1 + end + return t +end + + +local i = 0 -- index of wifi-iface +local j = 0 -- index of wifi-iface with give devname + +while j < tonumber(T.BssidNum) do + if not uci:get("wifi-iface["..i.."]", "device") then + if band == "2.4G" then + uci:set("wifi-iface["..i.."]", "ra"..j) + uci:set("wifi-iface["..i.."]", "ifname", "ra"..j) + else + uci:set("wifi-iface["..i.."]", "rai"..j) + uci:set("wifi-iface["..i.."]", "ifname", "rai"..j) + end + uci:set("wifi-iface["..i.."]", "device", device) + end + if device == uci:get("wifi-iface["..i.."]", "device") then + uci:set("wifi-iface["..i.."]", "ssid", loadstring("return T.SSID"..(j+1))()) + uci:set("wifi-iface["..i.."]", "hidden", T.HideSSID or "0") + -- openwrt specific + uci:set("wifi-iface["..i.."]", "mode", "ap") + uci:set("wifi-iface["..i.."]", "network", "lan") + + -- encryption + authmode = split(T.AuthMode, ";") + if authmode[j+1] == "OPEN" then + uci:set("wifi-iface["..i.."]", "encryption", "none") + elseif authmode[j+1] == "WPAPSK" then + uci:set("wifi-iface["..i.."]", "encryption", "psk") + uci:set("wifi-iface["..i.."]", "key", loadstring("return T.WPAPSK"..(j+1))()) + elseif authmode[j+1] == "WPA2PSK" then + uci:set("wifi-iface["..i.."]", "encryption", "psk2") + uci:set("wifi-iface["..i.."]", "key", loadstring("return T.WPAPSK"..(j+1))()) + elseif authmode[j+1] == "WPA" then + uci:set("wifi-iface["..i.."]", "encryption", "wpa") + elseif authmode[j+1] == "WPA2" then + uci:set("wifi-iface["..i.."]", "encryption", "wpa2") + elseif authmode[j+1] == "WPA1WPA2" then + uci:set("wifi-iface["..i.."]", "encryption", "wpa+wpa2") + else + uci:set("wifi-iface["..i.."]", "encryption", "open") + end + + -- cipher + --[[ + cipher = split(T.EncrypType, ";") + if authmode[j+1] == "OPEN" then + uci:set("wifi-iface["..i.."]", "cipher", "none") + elseif cipher[j+1] == "AES" then + uci:set("wifi-iface["..i.."]", "cipher", "ccmp") + elseif cipher[j+1] == "TKIP" then + uci:set("wifi-iface["..i.."]", "cipher", "tkip") + elseif cipher[j+1] == "TKIPAES" then + uci:set("wifi-iface["..i.."]", "cipher", "tkip+ccmp") + else + uci:set("wifi-iface["..i.."]", "cipher", "none") + end ]] + + --uci:set("wifi-iface["..i.."]", "wepkey", "xx") + if T.IEEE8021X == 1 then + uci:set("wifi-iface["..i.."]", "auth_server", T.RADIUS_Server or "nil") + uci:set("wifi-iface["..i.."]", "auth_port", T.RADIUS_Port or "nil") + uci:set("wifi-iface["..i.."]", "auth_secret", "xx") + end + --uci:set("wifi-iface["..i.."]", "pmkcacheperiod", T.PMKCachePeriod or "nil") + --uci:set("wifi-iface["..i.."]", "preauth", T.PreAuth or "nil") + --uci:set("wifi-iface["..i.."]", "rekeyinteval", T.RekeyInterval or "nil") + j = j + 1 + end + i = i + 1 +end + +--uci:dump() +uci:save(ucifile) + +return true |