Adding get network operation
diff --git a/openstack/networking/v2/networks/requests.go b/openstack/networking/v2/networks/requests.go
index cc57540..e27445d 100644
--- a/openstack/networking/v2/networks/requests.go
+++ b/openstack/networking/v2/networks/requests.go
@@ -64,3 +64,18 @@
 	}
 	return &ext, nil
 }
+
+func Get(c *gophercloud.ServiceClient, id string) (*Network, error) {
+	var n Network
+	_, err := perigee.Request("GET", NetworkURL(c, id), perigee.Options{
+		MoreHeaders: c.Provider.AuthenticatedHeaders(),
+		Results: &struct {
+			Network *Network `json:"network"`
+		}{&n},
+		OkCodes: []int{200},
+	})
+	if err != nil {
+		return nil, err
+	}
+	return &n, nil
+}
diff --git a/openstack/networking/v2/networks/requests_test.go b/openstack/networking/v2/networks/requests_test.go
index 85e3ce0..5682c33 100644
--- a/openstack/networking/v2/networks/requests_test.go
+++ b/openstack/networking/v2/networks/requests_test.go
@@ -27,6 +27,12 @@
 	}
 }
 
+func DeepEquals(t *testing.T, actual, expected interface{}) {
+	if !reflect.DeepEqual(actual, expected) {
+		t.Fatalf("Expected %#v but got %#v", expected, actual)
+	}
+}
+
 func CheckErr(t *testing.T, e error) {
 	if e != nil {
 		t.Fatalf("An error occurred: %#v", e)
@@ -204,3 +210,55 @@
 		Equals(t, ext.Description, "The agent management extension.")
 	})
 }
+
+func TestGettingNetwork(t *testing.T) {
+	th.SetupHTTP()
+	defer th.TeardownHTTP()
+
+	th.Mux.HandleFunc("/v2.0/networks/d32019d3-bc6e-4319-9c1d-6722fc136a22", func(w http.ResponseWriter, r *http.Request) {
+		th.TestMethod(t, r, "GET")
+		th.TestHeader(t, r, "X-Auth-Token", TokenID)
+
+		w.Header().Add("Content-Type", "application/json")
+		w.WriteHeader(http.StatusOK)
+
+		fmt.Fprintf(w, `
+{
+    "network": {
+        "status": "ACTIVE",
+        "subnets": [
+            "54d6f61d-db07-451c-9ab3-b9609b6b6f0b"
+        ],
+        "name": "private-network",
+        "provider:physical_network": null,
+        "admin_state_up": true,
+        "tenant_id": "4fd44f30292945e481c7b8a0c8908869",
+        "provider:network_type": "local",
+        "router:external": true,
+        "shared": true,
+        "id": "d32019d3-bc6e-4319-9c1d-6722fc136a22",
+        "provider:segmentation_id": null
+    }
+}
+			`)
+	})
+
+	c := ServiceClient()
+
+	n, err := Get(c, "d32019d3-bc6e-4319-9c1d-6722fc136a22")
+	if err != nil {
+		t.Fatalf("Unexpected error: %#v", err)
+	}
+
+	Equals(t, n.Status, "ACTIVE")
+	DeepEquals(t, n.Subnets, []string{"54d6f61d-db07-451c-9ab3-b9609b6b6f0b"})
+	Equals(t, n.Name, "private-network")
+	Equals(t, n.ProviderPhysicalNetwork, "")
+	Equals(t, n.ProviderNetworkType, "local")
+	Equals(t, n.ProviderSegmentationID, "")
+	Equals(t, n.AdminStateUp, true)
+	Equals(t, n.TenantID, "4fd44f30292945e481c7b8a0c8908869")
+	Equals(t, n.RouterExternal, true)
+	Equals(t, n.Shared, true)
+	Equals(t, n.ID, "d32019d3-bc6e-4319-9c1d-6722fc136a22")
+}
diff --git a/openstack/networking/v2/networks/results.go b/openstack/networking/v2/networks/results.go
index 61d51b0..b48086c 100644
--- a/openstack/networking/v2/networks/results.go
+++ b/openstack/networking/v2/networks/results.go
@@ -10,7 +10,7 @@
 // A Network represents a a virtual layer-2 broadcast domain.
 type Network struct {
 	// Id is the unique identifier for the network.
-	Id string `json:"id"`
+	ID string `json:"id"`
 	// Name is the (not necessarily unique) human-readable identifier for the network.
 	Name string `json:"name"`
 	// AdminStateUp is administrative state of the network. If false, network is down.
@@ -22,7 +22,7 @@
 	// Shared indicates whether the network can be accessed by any tenant or not.
 	Shared bool `json:"shared"`
 	// TenantId is the owner of the network. Admins may specify TenantId other than their own.
-	TenantId string `json:"tenant_id"`
+	TenantID string `json:"tenant_id"`
 	// RouterExternal indicates if the network is connected to an external router.
 	RouterExternal bool `json:"router:external"`
 	// ProviderPhysicalNetwork is the name of the provider physical network.
@@ -30,7 +30,7 @@
 	// ProviderNetworkType is the type of provider network (eg "vlan").
 	ProviderNetworkType string `json:"provider:network_type"`
 	// ProviderSegmentationId is the provider network identifier (such as the vlan id).
-	ProviderSegmentationId string `json:"provider:segmentation_id"`
+	ProviderSegmentationID string `json:"provider:segmentation_id"`
 }
 
 type APIVersion struct {
diff --git a/openstack/networking/v2/networks/urls.go b/openstack/networking/v2/networks/urls.go
index 8d350b1..70cc6e1 100644
--- a/openstack/networking/v2/networks/urls.go
+++ b/openstack/networking/v2/networks/urls.go
@@ -19,3 +19,7 @@
 func ExtensionURL(c *gophercloud.ServiceClient, name string) string {
 	return c.ServiceURL(Version, "extensions", name)
 }
+
+func NetworkURL(c *gophercloud.ServiceClient, id string) string {
+	return c.ServiceURL(Version, "networks", id)
+}
diff --git a/openstack/networking/v2/networks/urls_test.go b/openstack/networking/v2/networks/urls_test.go
index 34009ed..df8bd02 100644
--- a/openstack/networking/v2/networks/urls_test.go
+++ b/openstack/networking/v2/networks/urls_test.go
@@ -35,3 +35,11 @@
 		t.Fatalf("[%s] does not match expected [%s]", actual, expected)
 	}
 }
+
+func TestNetworkURL(t *testing.T) {
+	actual := NetworkURL(EndpointClient(), "foo")
+	expected := Endpoint + "v2.0/networks/foo"
+	if expected != actual {
+		t.Fatalf("[%s] does not match expected [%s]", actual, expected)
+	}
+}