Index: /luci/trunk/protocols/ppp/luasrc/model/cbi/admin_network/proto_ppp.lua
===================================================================
--- /luci/trunk/protocols/ppp/luasrc/model/cbi/admin_network/proto_ppp.lua	(revision 7872)
+++ /luci/trunk/protocols/ppp/luasrc/model/cbi/admin_network/proto_ppp.lua	(revision 8869)
@@ -15,5 +15,5 @@
 local device, username, password
 local ipv6, defaultroute, metric, peerdns, dns,
-	  keepalive_failure, keepalive_interval, demand
+	  keepalive_failure, keepalive_interval, demand, mtu
 
 
@@ -130,2 +130,7 @@
 demand.placeholder = "0"
 demand.datatype    = "uinteger"
+
+
+mtu = section:taboption("advanced", Value, "mtu", translate("Override MTU"))
+mtu.placeholder = "1500"
+mtu.datatype    = "max(1500)"
Index: /luci/trunk/protocols/ppp/luasrc/model/cbi/admin_network/proto_pppoa.lua
===================================================================
--- /luci/trunk/protocols/ppp/luasrc/model/cbi/admin_network/proto_pppoa.lua	(revision 7872)
+++ /luci/trunk/protocols/ppp/luasrc/model/cbi/admin_network/proto_pppoa.lua	(revision 8869)
@@ -15,5 +15,5 @@
 local encaps, atmdev, vci, vpi, username, password
 local ipv6, defaultroute, metric, peerdns, dns,
-      keepalive_failure, keepalive_interval, demand
+      keepalive_failure, keepalive_interval, demand, mtu
 
 
@@ -136,2 +136,7 @@
 demand.placeholder = "0"
 demand.datatype    = "uinteger"
+
+
+mtu = section:taboption("advanced", Value, "mtu", translate("Override MTU"))
+mtu.placeholder = "1500"
+mtu.datatype    = "max(1500)"
Index: /luci/trunk/protocols/ppp/luasrc/model/cbi/admin_network/proto_pppoe.lua
===================================================================
--- /luci/trunk/protocols/ppp/luasrc/model/cbi/admin_network/proto_pppoe.lua	(revision 7872)
+++ /luci/trunk/protocols/ppp/luasrc/model/cbi/admin_network/proto_pppoe.lua	(revision 8869)
@@ -15,5 +15,5 @@
 local username, password, ac, service
 local ipv6, defaultroute, metric, peerdns, dns,
-      keepalive_failure, keepalive_interval, demand
+      keepalive_failure, keepalive_interval, demand, mtu
 
 
@@ -130,2 +130,7 @@
 demand.placeholder = "0"
 demand.datatype    = "uinteger"
+
+
+mtu = section:taboption("advanced", Value, "mtu", translate("Override MTU"))
+mtu.placeholder = "1500"
+mtu.datatype    = "max(1500)"
Index: /luci/trunk/protocols/ppp/luasrc/model/cbi/admin_network/proto_pptp.lua
===================================================================
--- /luci/trunk/protocols/ppp/luasrc/model/cbi/admin_network/proto_pptp.lua	(revision 8774)
+++ /luci/trunk/protocols/ppp/luasrc/model/cbi/admin_network/proto_pptp.lua	(revision 8869)
@@ -14,5 +14,6 @@
 
 local server, username, password
-local defaultroute, metric, peerdns, dns
+local defaultroute, metric, peerdns, dns,
+	keepalive_failure, keepalive_interval, demand, mtu
 
 
@@ -56,2 +57,60 @@
 dns.datatype = "ipaddr"
 dns.cast     = "string"
+
+
+keepalive_failure = section:taboption("advanced", Value, "_keepalive_failure",
+	translate("LCP echo failure threshold"),
+	translate("Presume peer to be dead after given amount of LCP echo failures, use 0 to ignore failures"))
+
+function keepalive_failure.cfgvalue(self, section)
+	local v = m:get(section, "keepalive")
+	if v and #v > 0 then
+		return tonumber(v:match("^(%d+)[ ,]+%d+") or v)
+	end
+end
+
+function keepalive_failure.write() end
+function keepalive_failure.remove() end
+
+keepalive_failure.placeholder = "0"
+keepalive_failure.datatype    = "uinteger"
+
+
+keepalive_interval = section:taboption("advanced", Value, "_keepalive_interval",
+	translate("LCP echo interval"),
+	translate("Send LCP echo requests at the given interval in seconds, only effective in conjunction with failure threshold"))
+
+function keepalive_interval.cfgvalue(self, section)
+	local v = m:get(section, "keepalive")
+	if v and #v > 0 then
+		return tonumber(v:match("^%d+[ ,]+(%d+)"))
+	end
+end
+
+function keepalive_interval.write(self, section, value)
+	local f = tonumber(keepalive_failure:formvalue(section)) or 0
+	local i = tonumber(value) or 5
+	if i < 1 then i = 1 end
+	if f > 0 then
+		m:set(section, "keepalive", "%d %d" %{ f, i })
+	else
+		m:del(section, "keepalive")
+	end
+end
+
+keepalive_interval.remove      = keepalive_interval.write
+keepalive_interval.placeholder = "5"
+keepalive_interval.datatype    = "min(1)"
+
+
+demand = section:taboption("advanced", Value, "demand",
+	translate("Inactivity timeout"),
+	translate("Close inactive connection after the given amount of seconds, use 0 to persist connection"))
+
+demand.placeholder = "0"
+demand.datatype    = "uinteger"
+
+
+mtu = section:taboption("advanced", Value, "mtu", translate("Override MTU"))
+mtu.placeholder = "1500"
+mtu.datatype    = "max(1500)"
