+/* Sends 'request', which should be a request that only has a reply if an error
+ * occurs, and waits for it to succeed or fail. If an error does occur, prints
+ * it and exits with an error. */
+static void
+transact_multiple_noreply(struct vconn *vconn, struct list *requests)
+{
+ struct ofpbuf *request, *reply;
+
+ LIST_FOR_EACH (request, list_node, requests) {
+ update_openflow_length(request);
+ }
+
+ run(vconn_transact_multiple_noreply(vconn, requests, &reply),
+ "talking to %s", vconn_get_name(vconn));
+ if (reply) {
+ ofp_print(stderr, reply->data, reply->size, verbosity + 2);
+ exit(1);
+ }
+ ofpbuf_delete(reply);
+}
+
+/* Sends 'request', which should be a request that only has a reply if an error
+ * occurs, and waits for it to succeed or fail. If an error does occur, prints
+ * it and exits with an error. */
+static void
+transact_noreply(struct vconn *vconn, struct ofpbuf *request)
+{
+ struct list requests;
+
+ list_init(&requests);
+ list_push_back(&requests, &request->list_node);
+ transact_multiple_noreply(vconn, &requests);
+}
+