Introducing new opts interface idea :smirk:
diff --git a/openstack/networking/v2/extensions/external/requests.go b/openstack/networking/v2/extensions/external/requests.go
new file mode 100644
index 0000000..0d20bb1
--- /dev/null
+++ b/openstack/networking/v2/extensions/external/requests.go
@@ -0,0 +1,33 @@
+package external
+
+import "github.com/rackspace/gophercloud/openstack/networking/v2/networks"
+
+type CreateOpts struct {
+	Parent   networks.CreateOpts
+	External bool
+}
+
+func (o CreateOpts) ToMap() map[string]map[string]interface{} {
+	outer := o.Parent.ToMap()
+
+	outer["network"]["router:external"] = o.External
+
+	return outer
+}
+
+func (o CreateOpts) IsCreateOpts() bool { return true }
+
+type UpdateOpts struct {
+	Parent   networks.UpdateOpts
+	External bool
+}
+
+func (o UpdateOpts) ToMap() map[string]map[string]interface{} {
+	outer := o.Parent.ToMap()
+
+	outer["network"]["router:external"] = o.External
+
+	return outer
+}
+
+func (o UpdateOpts) IsUpdateOpts() bool { return true }