vconn: Make errors in vconn names non-fatal errors.
[openvswitch] / lib / vconn.c
index f0615d4380688222d737020c84ddd0b9edb70943..103c9df58b20713c7008bd00eb2d92ca73c67acd 100644 (file)
@@ -143,7 +143,8 @@ vconn_open(const char *name, struct vconn **vconnp)
 
     prefix_len = strcspn(name, ":");
     if (prefix_len == strlen(name)) {
-        fatal(0, "`%s' not correct format for peer name", name);
+        error(0, "`%s' not correct format for peer name", name);
+        return EAFNOSUPPORT;
     }
     for (i = 0; i < ARRAY_SIZE(vconn_classes); i++) {
         struct vconn_class *class = vconn_classes[i];
@@ -161,8 +162,8 @@ vconn_open(const char *name, struct vconn **vconnp)
             return retval;
         }
     }
-    fatal(0, "unknown peer type `%.*s'", (int) prefix_len, name);
-    abort();
+    error(0, "unknown peer type `%.*s'", (int) prefix_len, name);
+    return EAFNOSUPPORT;
 }
 
 int
@@ -292,6 +293,8 @@ vconn_send(struct vconn *vconn, struct buffer *msg)
 {
     int retval = vconn_connect(vconn);
     if (!retval) {
+        assert(msg->size >= sizeof(struct ofp_header));
+        assert(((struct ofp_header *) msg->data)->length == htons(msg->size));
         if (!VLOG_IS_DBG_ENABLED()) { 
             retval = (vconn->class->send)(vconn, msg);
         } else {