Make "struct vconn" opaque.
authorBen Pfaff <blp@nicira.com>
Thu, 11 Sep 2008 18:46:57 +0000 (11:46 -0700)
committerBen Pfaff <blp@nicira.com>
Mon, 15 Sep 2008 21:29:53 +0000 (14:29 -0700)
include/vconn-provider.h
lib/vconn-netlink.c
lib/vconn-ssl.c
lib/vconn-stream.c

index 57778e7bb28fb9863c61a69fa51f304ed44756be..8bb8368a2748b99e9ebd5f9cce52d53c48cd4b83 100644 (file)
 /* Provider interface, which provide a virtual connection to an OpenFlow
  * device. */
 
+#include <assert.h>
 #include "vconn.h"
 
-/* Virtual connection to an OpenFlow device. */
+/* Virtual connection to an OpenFlow device.
+ *
+ * This structure should be treated as opaque by vconn implementations. */
 struct vconn {
     struct vconn_class *class;
     int connect_status;
@@ -49,6 +52,11 @@ struct vconn {
 
 void vconn_init(struct vconn *, struct vconn_class *, int connect_status,
                 uint32_t ip, const char *name);
+static inline void vconn_assert_class(const struct vconn *vconn,
+                                      const struct vconn_class *class)
+{
+    assert(vconn->class == class);
+}
 
 struct vconn_class {
     /* Prefix for connection names, e.g. "nl", "tcp". */
index 4f609bb3344c02646df3b4d06eed6660593345e8..2921236941f2d5cb13fa479145de17f9a9bc026d 100644 (file)
@@ -65,7 +65,7 @@ struct netlink_vconn
 static struct netlink_vconn *
 netlink_vconn_cast(struct vconn *vconn) 
 {
-    assert(vconn->class == &netlink_vconn_class);
+    vconn_assert_class(vconn, &netlink_vconn_class);
     return CONTAINER_OF(vconn, struct netlink_vconn, vconn); 
 }
 
index d553834f09fe713c16cc591a6cb94a9f9982e584..d899e091f2c114203a7b81066bb4e71acc33128d 100644 (file)
@@ -251,7 +251,7 @@ error:
 static struct ssl_vconn *
 ssl_vconn_cast(struct vconn *vconn)
 {
-    assert(vconn->class == &ssl_vconn_class);
+    vconn_assert_class(vconn, &ssl_vconn_class);
     return CONTAINER_OF(vconn, struct ssl_vconn, vconn);
 }
 
@@ -672,7 +672,7 @@ struct pssl_vconn
 static struct pssl_vconn *
 pssl_vconn_cast(struct vconn *vconn)
 {
-    assert(vconn->class == &pssl_vconn_class);
+    vconn_assert_class(vconn, &pssl_vconn_class);
     return CONTAINER_OF(vconn, struct pssl_vconn, vconn);
 }
 
index 444778a9b3b33eee6ea794a3d448863120a29871..f58cc2c0c5e3b1198b4bdf15740b1f99af6ee004 100644 (file)
@@ -85,7 +85,7 @@ new_stream_vconn(const char *name, int fd, int connect_status,
 static struct stream_vconn *
 stream_vconn_cast(struct vconn *vconn)
 {
-    assert(vconn->class == &stream_vconn_class);
+    vconn_assert_class(vconn, &stream_vconn_class);
     return CONTAINER_OF(vconn, struct stream_vconn, vconn);
 }
 
@@ -269,7 +269,7 @@ static struct vconn_class pstream_vconn_class;
 static struct pstream_vconn *
 pstream_vconn_cast(struct vconn *vconn)
 {
-    assert(vconn->class == &pstream_vconn_class);
+    vconn_assert_class(vconn, &pstream_vconn_class);
     return CONTAINER_OF(vconn, struct pstream_vconn, vconn);
 }