[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC][PATCH v2 13/19] virtproxy: interfaces to set/remove V
From: |
Michael Roth |
Subject: |
[Qemu-devel] [RFC][PATCH v2 13/19] virtproxy: interfaces to set/remove VPIForwards |
Date: |
Wed, 10 Nov 2010 16:28:09 -0600 |
Signed-off-by: Michael Roth <address@hidden>
---
virtproxy.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
virtproxy.h | 2 ++
2 files changed, 61 insertions(+), 0 deletions(-)
diff --git a/virtproxy.c b/virtproxy.c
index 01a36c2..b683ee6 100644
--- a/virtproxy.c
+++ b/virtproxy.c
@@ -722,3 +722,62 @@ int vp_set_oforward(VPDriver *drv, int fd, const char
*service_id)
return 0;
}
+
+/* add/modify a service_id -> net/unix socket mapping
+ *
+ * "service_id" is a user-defined id for the service. this is what the
+ * remote end will use to proxy connections to a specific service on
+ * our end.
+ *
+ * if "port" is NULL, "addr" is the address of the net socket the
+ * service is running on. otherwise, addr is the path to the unix socket
+ * the service is running on.
+ *
+ * if "port" AND "addr" are NULL, find and remove the current iforward
+ * for this "service_id" if it exists.
+ *
+ * "ipv6" is a bool denoting whether or not to use ipv6
+ */
+int vp_set_iforward(VPDriver *drv, const char *service_id, const char *addr,
+ const char *port, bool ipv6)
+{
+ VPIForward *f = get_iforward(drv, service_id);
+
+ if (addr == NULL && port == NULL) {
+ if (f != NULL) {
+ qemu_opts_del(f->socket_opts);
+ QLIST_REMOVE(f, next);
+ qemu_free(f);
+ }
+ return 0;
+ }
+
+ if (f == NULL) {
+ f = qemu_mallocz(sizeof(VPIForward));
+ f->drv = drv;
+ strncpy(f->service_id, service_id, VP_SERVICE_ID_LEN);
+ QLIST_INSERT_HEAD(&drv->iforwards, f, next);
+ } else {
+ qemu_opts_del(f->socket_opts);
+ }
+
+ /* stick socket-related options in a QemuOpts so we can
+ * utilize qemu socket utility functions directly
+ */
+ f->socket_opts = qemu_opts_create(&vp_socket_opts, NULL, 0);
+ if (port == NULL) {
+ /* no port given, assume unix path */
+ qemu_opt_set(f->socket_opts, "path", addr);
+ } else {
+ qemu_opt_set(f->socket_opts, "host", addr);
+ qemu_opt_set(f->socket_opts, "port", port);
+ }
+
+ if (ipv6) {
+ qemu_opt_set(f->socket_opts, "ipv6", "on");
+ } else {
+ qemu_opt_set(f->socket_opts, "ipv4", "on");
+ }
+
+ return 0;
+}
diff --git a/virtproxy.h b/virtproxy.h
index e901600..83cc905 100644
--- a/virtproxy.h
+++ b/virtproxy.h
@@ -41,5 +41,7 @@ void vp_chr_read(CharDriverState *s, uint8_t *buf, int len);
VPDriver *vp_new(enum vp_context ctx, CharDriverState *s, int fd, bool listen);
int vp_handle_packet_buf(VPDriver *drv, const void *buf, int count);
int vp_set_oforward(VPDriver *drv, int fd, const char *service_id);
+int vp_set_iforward(VPDriver *drv, const char *service_id, const char *addr,
+ const char *port, bool ipv6);
#endif /* VIRTPROXY_H */
--
1.7.0.4
- [Qemu-devel] [RFC][PATCH v2 00/19] virtproxy: host/guest communication layer, Michael Roth, 2010/11/10
- [Qemu-devel] [RFC][PATCH v2 19/19] virtproxy: Makefile/configure changes to build qemu-vp, Michael Roth, 2010/11/10
- [Qemu-devel] [RFC][PATCH v2 18/19] virtproxy: qemu-vp, main logic, Michael Roth, 2010/11/10
- [Qemu-devel] [RFC][PATCH v2 17/19] virtproxy: qemu integration, add virtproxy to Makefile.targets, Michael Roth, 2010/11/10
- [Qemu-devel] [RFC][PATCH v2 15/19] virtproxy: add virtproxy-builtin.c for compat defs, Michael Roth, 2010/11/10
- [Qemu-devel] [RFC][PATCH v2 16/19] virtproxy: qemu integration, add virtproxy chardev, Michael Roth, 2010/11/10
- [Qemu-devel] [RFC][PATCH v2 14/19] virtproxy: add read handler for proxied connections, Michael Roth, 2010/11/10
- [Qemu-devel] [RFC][PATCH v2 13/19] virtproxy: interfaces to set/remove VPIForwards,
Michael Roth <=
- [Qemu-devel] [RFC][PATCH v2 09/19] virtproxy: interfaces to set/remove/handle VPOForwards, Michael Roth, 2010/11/10
- [Qemu-devel] [RFC][PATCH v2 11/19] virtproxy: add handler for control packet, Michael Roth, 2010/11/10
- [Qemu-devel] [RFC][PATCH v2 08/19] virtproxy: add vp_new() VPDriver constructor, Michael Roth, 2010/11/10
- [Qemu-devel] [RFC][PATCH v2 06/19] virtproxy: add accept handler for communication channel, Michael Roth, 2010/11/10
- [Qemu-devel] [RFC][PATCH v2 07/19] virtproxy: add read handler for communication channel, Michael Roth, 2010/11/10
- [Qemu-devel] [RFC][PATCH v2 05/19] virtproxy, add vp_channel_send_all, Michael Roth, 2010/11/10
- [Qemu-devel] [RFC][PATCH v2 10/19] virtproxy: add handler for data packets, Michael Roth, 2010/11/10
- [Qemu-devel] [RFC][PATCH v2 03/19] virtproxy: add debug functions for virtproxy core, Michael Roth, 2010/11/10
- [Qemu-devel] [RFC][PATCH v2 04/19] virtproxy: list look-up functions conns/oforwards/iforwards, Michael Roth, 2010/11/10
- [Qemu-devel] [RFC][PATCH v2 01/19] virtproxy: base data structures and constants, Michael Roth, 2010/11/10