restore logic for icmp and null ports
diff --git a/openstack/compute/v2/extensions/secgroups/fixtures.go b/openstack/compute/v2/extensions/secgroups/fixtures.go
index 4e4c0e4..e4ca587 100644
--- a/openstack/compute/v2/extensions/secgroups/fixtures.go
+++ b/openstack/compute/v2/extensions/secgroups/fixtures.go
@@ -226,9 +226,9 @@
 		th.TestJSONRequest(t, r, `
 {
   "security_group_rule": {
-    "from_port": 80,
+    "from_port": 0,
     "ip_protocol": "ICMP",
-    "to_port": 80,
+    "to_port": 0,
     "parent_group_id": "{groupID}",
     "cidr": "0.0.0.0/0"
   }
@@ -240,10 +240,10 @@
 		fmt.Fprintf(w, `
 {
   "security_group_rule": {
-    "from_port": 80,
+    "from_port": 0,
     "group": {},
     "ip_protocol": "ICMP",
-    "to_port": 80,
+    "to_port": 0,
     "parent_group_id": "{groupID}",
     "ip_range": {
       "cidr": "0.0.0.0/0"
diff --git a/openstack/compute/v2/extensions/secgroups/requests.go b/openstack/compute/v2/extensions/secgroups/requests.go
index 1cdbde0..ec8019f 100644
--- a/openstack/compute/v2/extensions/secgroups/requests.go
+++ b/openstack/compute/v2/extensions/secgroups/requests.go
@@ -104,9 +104,9 @@
 	// the ID of the group that this rule will be added to.
 	ParentGroupID string `json:"parent_group_id" required:"true"`
 	// the lower bound of the port range that will be opened.
-	FromPort int `json:"from_port" required:"true"`
+	FromPort int `json:"from_port"`
 	// the upper bound of the port range that will be opened.
-	ToPort int `json:"to_port" required:"true"`
+	ToPort int `json:"to_port"`
 	// the protocol type that will be allowed, e.g. TCP.
 	IPProtocol string `json:"ip_protocol" required:"true"`
 	// ONLY required if FromGroupID is blank. This represents the IP range that
diff --git a/openstack/compute/v2/extensions/secgroups/requests_test.go b/openstack/compute/v2/extensions/secgroups/requests_test.go
index 1509733..bdbedcd 100644
--- a/openstack/compute/v2/extensions/secgroups/requests_test.go
+++ b/openstack/compute/v2/extensions/secgroups/requests_test.go
@@ -225,8 +225,8 @@
 
 	opts := CreateRuleOpts{
 		ParentGroupID: groupID,
-		FromPort:      80,
-		ToPort:        80,
+		FromPort:      0,
+		ToPort:        0,
 		IPProtocol:    "ICMP",
 		CIDR:          "0.0.0.0/0",
 	}
@@ -235,8 +235,8 @@
 	th.AssertNoErr(t, err)
 
 	expected := &Rule{
-		FromPort:      80,
-		ToPort:        80,
+		FromPort:      0,
+		ToPort:        0,
 		Group:         Group{},
 		IPProtocol:    "ICMP",
 		ParentGroupID: groupID,