Zero out otherwise uninitialized padding in make_unbuffered_packet_out().
[openvswitch] / lib / vconn.c
index 4152864bc0fd4ea75d45cf1e1baa4f5926823777..723146ad3e6602fcde8e7ccddc9af274c7272caa 100644 (file)
@@ -32,7 +32,7 @@
  */
 
 #include <config.h>
-#include "vconn.h"
+#include "vconn-provider.h"
 #include <assert.h>
 #include <errno.h>
 #include <inttypes.h>
@@ -217,6 +217,13 @@ vconn_close(struct vconn *vconn)
     }
 }
 
+/* Returns the name of 'vconn', that is, the string passed to vconn_open(). */
+const char *
+vconn_get_name(const struct vconn *vconn)
+{
+    return vconn->name;
+}
+
 /* Returns true if 'vconn' is a passive vconn, that is, its purpose is to
  * wait for connections to arrive, not to transfer data.  Returns false if
  * 'vconn' is an active vconn, that is, its purpose is to transfer data, not
@@ -545,7 +552,7 @@ make_unbuffered_packet_out(const struct buffer *packet,
     size_t size = sizeof *opo + sizeof opo->actions[0];
     struct buffer *out = buffer_new(size + packet->size);
     opo = buffer_put_uninit(out, size);
-    memset(opo, 0, sizeof *opo);
+    memset(opo, 0, size);
     opo->header.version = OFP_VERSION;
     opo->header.type = OFPT_PACKET_OUT;
     opo->buffer_id = htonl(UINT32_MAX);
@@ -605,3 +612,14 @@ make_echo_reply(const struct ofp_header *rq)
     reply->type = OFPT_ECHO_REPLY;
     return out;
 }
+
+void
+vconn_init(struct vconn *vconn, struct vconn_class *class, int connect_status,
+           uint32_t ip, const char *name)
+{
+    vconn->class = class;
+    vconn->connect_status = connect_status;
+    vconn->ip = ip;
+    vconn->name = xstrdup(name);
+}
+