+-- UDP Relay
+s = m:section(TypedSection, "shadowsocks-libev", translate("UDP Relay"))
+s.anonymous = true
+
+o = s:option(ListValue, "udp_mode", translate("Relay Mode"))
+o:value("0", translate("Disabled"))
+o:value("1", translate("Enabled"))
+o:value("2", translate("Custom"))
+o.default = 0
+o.rmempty = false
+
+o = s:option(Value, "udp_server", translate("Server Address"))
+o.datatype = "ipaddr"
+o:depends("udp_mode", 2)
+
+o = s:option(Value, "udp_server_port", translate("Server Port"))
+o.datatype = "port"
+o:depends("udp_mode", 2)
+
+o = s:option(Value, "udp_local_port", translate("Local Port"))
+o.datatype = "port"
+o.default = 1081
+o:depends("udp_mode", 2)
+
+o = s:option(Value, "udp_timeout", translate("Connection Timeout"))
+o.datatype = "uinteger"
+o.default = 60
+o:depends("udp_mode", 2)
+
+o = s:option(Value, "udp_password", translate("Password"))
+o.password = true
+o:depends("udp_mode", 2)
+
+o = s:option(ListValue, "udp_encrypt_method", translate("Encrypt Method"))
+for i,v in ipairs(e) do
+ o:value(v)
+end
+o:depends("udp_mode", 2)
+