New function port_array_count().
authorBen Pfaff <blp@nicira.com>
Sat, 28 Feb 2009 00:47:47 +0000 (16:47 -0800)
committerBen Pfaff <blp@nicira.com>
Mon, 2 Mar 2009 20:51:59 +0000 (12:51 -0800)
lib/port-array.c
lib/port-array.h

index 5d3eb8c28ddbb64f210a25246b65d089cc946d2d..23ba2b34aae183b61205ea298692eea4d1f13c20 100644 (file)
@@ -172,3 +172,29 @@ port_array_next(const struct port_array *pa, unsigned int *idxp)
     ++*idxp;
     return next(pa, idxp);
 }
+
+/* Returns the number of non-null elements of 'pa'. */
+unsigned int
+port_array_count(const struct port_array *pa)
+{
+    unsigned int l1_idx, l2_idx, l3_idx;
+    unsigned int count;
+
+    count = 0;
+    for (l1_idx = 0; l1_idx < PORT_ARRAY_L1_SIZE; l1_idx++) {
+        struct port_array_l2 *l2 = pa->l1[l1_idx];
+        if (l2 != &l2_sentinel) {
+            for (l2_idx = 0; l2_idx < PORT_ARRAY_L2_SIZE; l2_idx++) {
+                struct port_array_l3 *l3 = l2->l2[l2_idx];
+                if (l3 != &l3_sentinel) {
+                    for (l3_idx = 0; l3_idx < PORT_ARRAY_L3_SIZE; l3_idx++) {
+                        if (l3->l3[l3_idx]) {
+                            count++;
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return count;
+}
index 01b3c1009063f82128e128d0ec5d4e7c91eee29b..1522fccbb920702f60a4399d9645f78574473213 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008 The Board of Trustees of The Leland Stanford
+/* Copyright (c) 2008, 2009 The Board of Trustees of The Leland Stanford
  * Junior University
  * 
  * We are making the OpenFlow specification and associated documentation
@@ -103,5 +103,6 @@ void port_array_clear(struct port_array *);
 void port_array_set(struct port_array *, uint16_t idx, void *);
 void *port_array_first(const struct port_array *, unsigned int *);
 void *port_array_next(const struct port_array *, unsigned int *);
+unsigned int port_array_count(const struct port_array *);
 
 #endif /* port-array.h */