ofproto-dpif: Introduce an enum for the number of tables.
authorBen Pfaff <blp@nicira.com>
Mon, 12 Sep 2011 23:40:03 +0000 (16:40 -0700)
committerBen Pfaff <blp@nicira.com>
Tue, 13 Sep 2011 18:46:10 +0000 (11:46 -0700)
It seems reasonable that someone might want to reduce this number, so
make it an enum to simplify that.

If someone does reduce the number then rule_dpif_lookup() needs to validate
the table_id, so add code to do that too.

ofproto/ofproto-dpif.c

index ac196eeb6f20e7ad731f6912e4d469c8ece4a1aa..4bf1ea06785567095858cb1846dba42c9c766716 100644 (file)
@@ -65,6 +65,10 @@ COVERAGE_DEFINE(facet_unexpected);
  * flow translation. */
 #define MAX_RESUBMIT_RECURSION 16
 
+/* Number of implemented OpenFlow tables. */
+enum { N_TABLES = 255 };
+BUILD_ASSERT_DECL(N_TABLES >= 1 && N_TABLES <= 255);
+
 struct ofport_dpif;
 struct ofproto_dpif;
 
@@ -473,7 +477,7 @@ construct(struct ofproto *ofproto_, int *n_tablesp)
 
     ofproto->has_bundle_action = false;
 
-    *n_tablesp = 255;
+    *n_tablesp = N_TABLES;
     return 0;
 }
 
@@ -2630,6 +2634,10 @@ static struct rule_dpif *
 rule_dpif_lookup(struct ofproto_dpif *ofproto, const struct flow *flow,
                  uint8_t table_id)
 {
+    if (table_id >= N_TABLES) {
+        return NULL;
+    }
+
     return rule_dpif_cast(rule_from_cls_rule(
                               classifier_lookup(&ofproto->up.tables[table_id],
                                                 flow)));