All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Daniel P. Berrange" <berrange@redhat.com>
To: qemu-devel@nongnu.org
Cc: Paolo Bonzini <pbonzini@redhat.com>,
	Andrew Baumann <Andrew.Baumann@microsoft.com>,
	Stefan Weil <sw@weilnetz.de>
Subject: [Qemu-devel] [PATCH v1 18/21] osdep: remove use of Win32 specific closesocket/ioctlsocket
Date: Wed,  9 Mar 2016 17:28:21 +0000	[thread overview]
Message-ID: <1457544504-8548-19-git-send-email-berrange@redhat.com> (raw)
In-Reply-To: <1457544504-8548-1-git-send-email-berrange@redhat.com>

Now that QEMU replaces the close() and ioctl() methods with
a wrapper that can transparently handle both sockets and
regular file handles on Win32, there is no need to ever
use the closesocket/ioctlsocket methods. The code can simply
use the normal POSIX methods.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
---
 block/sheepdog.c           | 36 ++++++++++++++++++------------------
 include/qemu/sockets.h     |  4 ----
 io/channel-socket.c        |  2 +-
 migration/qemu-file-unix.c |  2 +-
 migration/tcp.c            |  4 ++--
 net/socket.c               | 20 ++++++++++----------
 slirp/ip_icmp.c            |  2 +-
 slirp/misc.c               |  4 ++--
 slirp/slirp.h              |  2 --
 slirp/socket.c             |  2 +-
 slirp/tcp_subr.c           |  6 +++---
 slirp/udp.c                |  2 +-
 util/qemu-sockets.c        | 12 ++++++------
 13 files changed, 46 insertions(+), 52 deletions(-)

diff --git a/block/sheepdog.c b/block/sheepdog.c
index 8739acc..26d7bed 100644
--- a/block/sheepdog.c
+++ b/block/sheepdog.c
@@ -1143,7 +1143,7 @@ static int find_vdi_name(BDRVSheepdogState *s, const char *filename,
 
     ret = 0;
 out:
-    closesocket(fd);
+    close(fd);
     return ret;
 }
 
@@ -1340,7 +1340,7 @@ static int reload_inode(BDRVSheepdogState *s, uint32_t snapid, const char *tag)
 
 out:
     g_free(inode);
-    closesocket(fd);
+    close(fd);
 
     return ret;
 }
@@ -1488,7 +1488,7 @@ static int sd_open(BlockDriverState *bs, QDict *options, int flags,
     ret = read_object(fd, s->aio_context, buf, vid_to_vdi_oid(vid),
                       0, SD_INODE_SIZE, 0, s->cache_flags);
 
-    closesocket(fd);
+    close(fd);
 
     if (ret) {
         error_setg(errp, "Can't read snapshot inode");
@@ -1508,7 +1508,7 @@ out:
     aio_set_fd_handler(bdrv_get_aio_context(bs), s->fd,
                        false, NULL, NULL, NULL);
     if (s->fd >= 0) {
-        closesocket(s->fd);
+        close(s->fd);
     }
     qemu_opts_del(opts);
     g_free(buf);
@@ -1546,7 +1546,7 @@ static void sd_reopen_commit(BDRVReopenState *state)
     if (s->fd) {
         aio_set_fd_handler(s->aio_context, s->fd, false,
                            NULL, NULL, NULL);
-        closesocket(s->fd);
+        close(s->fd);
     }
 
     s->fd = re_s->fd;
@@ -1570,7 +1570,7 @@ static void sd_reopen_abort(BDRVReopenState *state)
     if (re_s->fd) {
         aio_set_fd_handler(s->aio_context, re_s->fd, false,
                            NULL, NULL, NULL);
-        closesocket(re_s->fd);
+        close(re_s->fd);
     }
 
     g_free(state->opaque);
@@ -1616,7 +1616,7 @@ static int do_sd_create(BDRVSheepdogState *s, uint32_t *vdi_id, int snapshot,
 
     ret = do_req(fd, s->aio_context, (SheepdogReq *)&hdr, buf, &wlen, &rlen);
 
-    closesocket(fd);
+    close(fd);
 
     if (ret) {
         error_setg_errno(errp, -ret, "create failed");
@@ -1879,7 +1879,7 @@ static int sd_create(const char *filename, QemuOpts *opts,
 
         ret = do_req(fd, s->aio_context, (SheepdogReq *)&hdr,
                      NULL, &wlen, &rlen);
-        closesocket(fd);
+        close(fd);
         if (ret) {
             error_setg_errno(errp, -ret, "failed to get cluster default");
             goto out;
@@ -1945,7 +1945,7 @@ static void sd_close(BlockDriverState *bs)
     ret = do_req(fd, s->aio_context, (SheepdogReq *)&hdr,
                  s->name, &wlen, &rlen);
 
-    closesocket(fd);
+    close(fd);
 
     if (!ret && rsp->result != SD_RES_SUCCESS &&
         rsp->result != SD_RES_VDI_NOT_LOCKED) {
@@ -1954,7 +1954,7 @@ static void sd_close(BlockDriverState *bs)
 
     aio_set_fd_handler(bdrv_get_aio_context(bs), s->fd,
                        false, NULL, NULL, NULL);
-    closesocket(s->fd);
+    close(s->fd);
     g_free(s->host_spec);
 }
 
@@ -2063,7 +2063,7 @@ static bool sd_delete(BDRVSheepdogState *s)
 
     ret = do_req(fd, s->aio_context, (SheepdogReq *)&hdr,
                  s->name, &wlen, &rlen);
-    closesocket(fd);
+    close(fd);
     if (ret) {
         return false;
     }
@@ -2120,7 +2120,7 @@ static int sd_create_branch(BDRVSheepdogState *s)
     ret = read_object(fd, s->aio_context, buf, vid_to_vdi_oid(vid),
                       s->inode.nr_copies, SD_INODE_SIZE, 0, s->cache_flags);
 
-    closesocket(fd);
+    close(fd);
 
     if (ret < 0) {
         goto out;
@@ -2432,7 +2432,7 @@ static int sd_snapshot_create(BlockDriverState *bs, QEMUSnapshotInfo *sn_info)
 
 cleanup:
     g_free(inode);
-    closesocket(fd);
+    close(fd);
     return ret;
 }
 
@@ -2534,7 +2534,7 @@ static bool remove_objects(BDRVSheepdogState *s)
     }
 
 out:
-    closesocket(fd);
+    close(fd);
     return result;
 }
 
@@ -2590,7 +2590,7 @@ static int sd_snapshot_delete(BlockDriverState *bs,
 
     ret = do_req(fd, s->aio_context, (SheepdogReq *)&hdr,
                  buf, &wlen, &rlen);
-    closesocket(fd);
+    close(fd);
     if (ret) {
         return ret;
     }
@@ -2643,7 +2643,7 @@ static int sd_snapshot_list(BlockDriverState *bs, QEMUSnapshotInfo **psn_tab)
     ret = do_req(fd, s->aio_context, (SheepdogReq *)&req,
                  vdi_inuse, &wlen, &rlen);
 
-    closesocket(fd);
+    close(fd);
     if (ret) {
         goto out;
     }
@@ -2691,7 +2691,7 @@ static int sd_snapshot_list(BlockDriverState *bs, QEMUSnapshotInfo **psn_tab)
         }
     }
 
-    closesocket(fd);
+    close(fd);
 out:
     *psn_tab = sn_tab;
 
@@ -2753,7 +2753,7 @@ static int do_load_save_vmstate(BDRVSheepdogState *s, uint8_t *data,
     }
     ret = size;
 cleanup:
-    closesocket(fd);
+    close(fd);
     return ret;
 }
 
diff --git a/include/qemu/sockets.h b/include/qemu/sockets.h
index fec2254..1bd9218 100644
--- a/include/qemu/sockets.h
+++ b/include/qemu/sockets.h
@@ -6,10 +6,6 @@
 
 int inet_aton(const char *cp, struct in_addr *ia);
 
-#else
-
-#define closesocket(s) close(s)
-
 #endif /* !_WIN32 */
 
 #include "qapi-types.h"
diff --git a/io/channel-socket.c b/io/channel-socket.c
index ff49853..dced54d 100644
--- a/io/channel-socket.c
+++ b/io/channel-socket.c
@@ -682,7 +682,7 @@ qio_channel_socket_close(QIOChannel *ioc,
 {
     QIOChannelSocket *sioc = QIO_CHANNEL_SOCKET(ioc);
 
-    if (closesocket(sioc->fd) < 0) {
+    if (close(sioc->fd) < 0) {
         sioc->fd = -1;
         error_setg_errno(errp, socket_error(),
                          "Unable to close socket");
diff --git a/migration/qemu-file-unix.c b/migration/qemu-file-unix.c
index 61b059b..e374ba2 100644
--- a/migration/qemu-file-unix.c
+++ b/migration/qemu-file-unix.c
@@ -115,7 +115,7 @@ static ssize_t socket_get_buffer(void *opaque, uint8_t *buf, int64_t pos,
 static int socket_close(void *opaque)
 {
     QEMUFileSocket *s = opaque;
-    closesocket(s->fd);
+    close(s->fd);
     g_free(s);
     return 0;
 }
diff --git a/migration/tcp.c b/migration/tcp.c
index e888a4e..3a31202 100644
--- a/migration/tcp.c
+++ b/migration/tcp.c
@@ -66,7 +66,7 @@ static void tcp_accept_incoming_migration(void *opaque)
         err = socket_error();
     } while (c < 0 && err == EINTR);
     qemu_set_fd_handler(s, NULL, NULL, NULL);
-    closesocket(s);
+    close(s);
 
     DPRINTF("accepted migration\n");
 
@@ -86,7 +86,7 @@ static void tcp_accept_incoming_migration(void *opaque)
     return;
 
 out:
-    closesocket(c);
+    close(c);
 }
 
 void tcp_start_incoming_migration(const char *host_port, Error **errp)
diff --git a/net/socket.c b/net/socket.c
index e32e3cb..fa18500 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -163,7 +163,7 @@ static void net_socket_send(void *opaque)
         if (s->listen_fd != -1) {
             qemu_set_fd_handler(s->listen_fd, net_socket_accept, NULL, s);
         }
-        closesocket(s->fd);
+        close(s->fd);
 
         s->fd = -1;
         s->state = 0;
@@ -325,7 +325,7 @@ static int net_socket_mcast_create(struct sockaddr_in *mcastaddr, struct in_addr
     return fd;
 fail:
     if (fd >= 0)
-        closesocket(fd);
+        close(fd);
     return -1;
 }
 
@@ -340,7 +340,7 @@ static void net_socket_cleanup(NetClientState *nc)
     }
     if (s->listen_fd != -1) {
         qemu_set_fd_handler(s->listen_fd, NULL, NULL, NULL);
-        closesocket(s->listen_fd);
+        close(s->listen_fd);
         s->listen_fd = -1;
     }
 }
@@ -417,7 +417,7 @@ static NetSocketState *net_socket_fd_init_dgram(NetClientState *peer,
     return s;
 
 err:
-    closesocket(fd);
+    close(fd);
     return NULL;
 }
 
@@ -473,7 +473,7 @@ static NetSocketState *net_socket_fd_init(NetClientState *peer,
         (socklen_t *)&optlen)< 0) {
         fprintf(stderr, "qemu: error: getsockopt(SO_TYPE) for fd=%d failed\n",
                 fd);
-        closesocket(fd);
+        close(fd);
         return NULL;
     }
     switch(so_type) {
@@ -540,13 +540,13 @@ static int net_socket_listen_init(NetClientState *peer,
     ret = bind(fd, (struct sockaddr *)&saddr, sizeof(saddr));
     if (ret < 0) {
         perror("bind");
-        closesocket(fd);
+        close(fd);
         return -1;
     }
     ret = listen(fd, 0);
     if (ret < 0) {
         perror("listen");
-        closesocket(fd);
+        close(fd);
         return -1;
     }
 
@@ -593,7 +593,7 @@ static int net_socket_connect_init(NetClientState *peer,
 #endif
             } else {
                 perror("connect");
-                closesocket(fd);
+                close(fd);
                 return -1;
             }
         } else {
@@ -675,13 +675,13 @@ static int net_socket_udp_init(NetClientState *peer,
 
     ret = socket_set_fast_reuse(fd);
     if (ret < 0) {
-        closesocket(fd);
+        close(fd);
         return -1;
     }
     ret = bind(fd, (struct sockaddr *)&laddr, sizeof(laddr));
     if (ret < 0) {
         perror("bind");
-        closesocket(fd);
+        close(fd);
         return -1;
     }
     qemu_set_nonblock(fd);
diff --git a/slirp/ip_icmp.c b/slirp/ip_icmp.c
index ace3982..6c7fc63 100644
--- a/slirp/ip_icmp.c
+++ b/slirp/ip_icmp.c
@@ -110,7 +110,7 @@ static int icmp_send(struct socket *so, struct mbuf *m, int hlen)
 
 void icmp_detach(struct socket *so)
 {
-    closesocket(so->s);
+    close(so->s);
     sofree(so);
 }
 
diff --git a/slirp/misc.c b/slirp/misc.c
index e2eea2e..d7e39af 100644
--- a/slirp/misc.c
+++ b/slirp/misc.c
@@ -139,7 +139,7 @@ fork_exec(struct socket *so, const char *ex, int do_pty)
 		    bind(s, (struct sockaddr *)&addr, addrlen) < 0 ||
 		    listen(s, 1) < 0) {
 			error_report("Error: inet socket: %s", strerror(errno));
-			closesocket(s);
+			close(s);
 
 			return 0;
 		}
@@ -213,7 +213,7 @@ fork_exec(struct socket *so, const char *ex, int do_pty)
                 do {
                     so->s = accept(s, (struct sockaddr *)&addr, &addrlen);
                 } while (so->s < 0 && errno == EINTR);
-                closesocket(s);
+                close(s);
                 socket_set_fast_reuse(so->s);
                 opt = 1;
                 qemu_setsockopt(so->s, SOL_SOCKET, SO_OOBINLINE, &opt, sizeof(int));
diff --git a/slirp/slirp.h b/slirp/slirp.h
index 07c13b47..a6741e7 100644
--- a/slirp/slirp.h
+++ b/slirp/slirp.h
@@ -14,8 +14,6 @@ typedef char *caddr_t;
 # include <iphlpapi.h>
 
 #else
-# define ioctlsocket ioctl
-# define closesocket(s) close(s)
 # if !defined(__HAIKU__)
 #  define O_BINARY 0
 # endif
diff --git a/slirp/socket.c b/slirp/socket.c
index 2b5453e..f1b9190 100644
--- a/slirp/socket.c
+++ b/slirp/socket.c
@@ -491,7 +491,7 @@ sorecvfrom(struct socket *so)
 	   */
 	  len = M_FREEROOM(m);
 	  /* if (so->so_fport != htons(53)) { */
-	  ioctlsocket(so->s, FIONREAD, &n);
+	  ioctl(so->s, FIONREAD, &n);
 
 	  if (n > len) {
 	    n = (m->m_data - m->m_dat) + m->m_len + n + 1;
diff --git a/slirp/tcp_subr.c b/slirp/tcp_subr.c
index b1aa1f2..6e07426 100644
--- a/slirp/tcp_subr.c
+++ b/slirp/tcp_subr.c
@@ -265,7 +265,7 @@ tcp_close(struct tcpcb *tp)
 	/* clobber input socket cache if we're closing the cached connection */
 	if (so == slirp->tcp_last_so)
 		slirp->tcp_last_so = &slirp->tcb;
-	closesocket(so->s);
+	close(so->s);
 	sbfree(&so->so_rcv);
 	sbfree(&so->so_snd);
 	sofree(so);
@@ -394,7 +394,7 @@ void tcp_connect(struct socket *inso)
         so = socreate(slirp);
         if (so == NULL) {
             /* If it failed, get rid of the pending connection */
-            closesocket(accept(inso->s, (struct sockaddr *)&addr, &addrlen));
+            close(accept(inso->s, (struct sockaddr *)&addr, &addrlen));
             return;
         }
         if (tcp_attach(so) < 0) {
@@ -425,7 +425,7 @@ void tcp_connect(struct socket *inso)
     /* Close the accept() socket, set right state */
     if (inso->so_state & SS_FACCEPTONCE) {
         /* If we only accept once, close the accept() socket */
-        closesocket(so->s);
+        close(so->s);
 
         /* Don't select it yet, even though we have an FD */
         /* if it's not FACCEPTONCE, it's already NOFDREF */
diff --git a/slirp/udp.c b/slirp/udp.c
index 6b39cab..6ec884a 100644
--- a/slirp/udp.c
+++ b/slirp/udp.c
@@ -291,7 +291,7 @@ udp_attach(struct socket *so, unsigned short af)
 void
 udp_detach(struct socket *so)
 {
-	closesocket(so->s);
+	close(so->s);
 	sofree(so);
 }
 
diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c
index ad7c00c..cb811b0 100644
--- a/util/qemu-sockets.c
+++ b/util/qemu-sockets.c
@@ -211,7 +211,7 @@ static int inet_listen_saddr(InetSocketAddress *saddr,
                 }
             }
         }
-        closesocket(slisten);
+        close(slisten);
     }
     freeaddrinfo(res);
     return -1;
@@ -219,7 +219,7 @@ static int inet_listen_saddr(InetSocketAddress *saddr,
 listen:
     if (listen(slisten,1) != 0) {
         error_setg_errno(errp, errno, "Failed to listen on socket");
-        closesocket(slisten);
+        close(slisten);
         freeaddrinfo(res);
         return -1;
     }
@@ -279,7 +279,7 @@ static void wait_for_connect(void *opaque)
     /* connect error */
     if (rc < 0) {
         error_setg_errno(&err, errno, "Error connecting to socket");
-        closesocket(s->fd);
+        close(s->fd);
         s->fd = rc;
     }
 
@@ -340,7 +340,7 @@ static int inet_connect_addr(struct addrinfo *addr, bool *in_progress,
         *in_progress = true;
     } else if (rc < 0) {
         error_setg_errno(errp, errno, "Failed to connect socket");
-        closesocket(sock);
+        close(sock);
         return -1;
     }
     return sock;
@@ -530,7 +530,7 @@ static int inet_dgram_saddr(InetSocketAddress *sraddr,
 
 err:
     if (-1 != sock)
-        closesocket(sock);
+        close(sock);
     if (local)
         freeaddrinfo(local);
     if (peer)
@@ -751,7 +751,7 @@ static int unix_listen_saddr(UnixSocketAddress *saddr,
     return sock;
 
 err:
-    closesocket(sock);
+    close(sock);
     return -1;
 }
 
-- 
2.5.0

  parent reply	other threads:[~2016-03-09 17:29 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-09 17:28 [Qemu-devel] [PATCH v1 00/21] Multiple fixes & improves to QIOChannel & Win32 Daniel P. Berrange
2016-03-09 17:28 ` [Qemu-devel] [PATCH v1 01/21] osdep: fix socket_error() to work with Mingw64 Daniel P. Berrange
2016-03-10 16:12   ` Paolo Bonzini
2016-03-10 16:13     ` Daniel P. Berrange
2016-03-09 17:28 ` [Qemu-devel] [PATCH v1 02/21] io: use bind() to check for IPv4/6 availability Daniel P. Berrange
2016-03-09 17:28 ` [Qemu-devel] [PATCH v1 03/21] io: initialize sockets in test program Daniel P. Berrange
2016-03-09 17:28 ` [Qemu-devel] [PATCH v1 04/21] io: bind to socket before creating QIOChannelSocket Daniel P. Berrange
2016-03-09 17:28 ` [Qemu-devel] [PATCH v1 05/21] io: wait for incoming client in socket test Daniel P. Berrange
2016-03-09 17:28 ` [Qemu-devel] [PATCH v1 06/21] io: set correct error object in background reader test thread Daniel P. Berrange
2016-03-09 17:28 ` [Qemu-devel] [PATCH v1 07/21] io: assert errors before asserting content in I/O test Daniel P. Berrange
2016-03-09 17:28 ` [Qemu-devel] [PATCH v1 08/21] io: fix copy+paste mistake in socket error message Daniel P. Berrange
2016-03-09 17:28 ` [Qemu-devel] [PATCH v1 09/21] io: add missing EWOULDBLOCK checks in Win32 I/O code paths Daniel P. Berrange
2016-03-09 17:28 ` [Qemu-devel] [PATCH v1 10/21] io: pass HANDLE to g_source_add_poll on Win32 Daniel P. Berrange
2016-03-09 17:28 ` [Qemu-devel] [PATCH v1 11/21] io: introduce qio_channel_create_socket_watch Daniel P. Berrange
2016-03-09 17:28 ` [Qemu-devel] [PATCH v1 12/21] io: implement socket watch for win32 using WSAEventSelect+select Daniel P. Berrange
2016-03-09 17:47   ` Paolo Bonzini
2016-03-09 19:59     ` Eric Blake
2016-03-09 21:24       ` Paolo Bonzini
2016-03-10  9:41         ` Daniel P. Berrange
2016-03-10  9:54           ` Paolo Bonzini
2016-03-10 16:30             ` Eric Blake
2016-03-10 14:50     ` Daniel P. Berrange
2016-03-09 17:28 ` [Qemu-devel] [PATCH v1 13/21] char: ensure listener socket is in blocking mode when waiting Daniel P. Berrange
2016-03-09 17:48   ` Paolo Bonzini
2016-03-09 17:28 ` [Qemu-devel] [PATCH v1 14/21] char: remove qemu_chr_finish_socket_connection method Daniel P. Berrange
2016-03-09 17:49   ` Paolo Bonzini
2016-03-10 14:50     ` Daniel P. Berrange
2016-03-09 17:28 ` [Qemu-devel] [PATCH v1 15/21] char: remove socket_try_connect method Daniel P. Berrange
2016-03-09 17:28 ` [Qemu-devel] [PATCH v1 16/21] char: remove qemu_chr_open_socket_fd method Daniel P. Berrange
2016-03-09 17:53   ` Paolo Bonzini
2016-03-10 14:51     ` Daniel P. Berrange
2016-03-09 17:28 ` [Qemu-devel] [PATCH v1 17/21] osdep: add wrappers for socket functions Daniel P. Berrange
2016-03-09 18:04   ` Paolo Bonzini
2016-03-10 14:52     ` Daniel P. Berrange
2016-03-09 17:28 ` Daniel P. Berrange [this message]
2016-03-10 14:53   ` [Qemu-devel] [PATCH v1 18/21] osdep: remove use of Win32 specific closesocket/ioctlsocket Daniel P. Berrange
2016-03-09 17:28 ` [Qemu-devel] [PATCH v1 19/21] osdep: remove use of socket_error() from all code Daniel P. Berrange
2016-03-09 17:59   ` Paolo Bonzini
2016-03-09 17:28 ` [Qemu-devel] [PATCH v1 20/21] osdep: remove direct use of qemu_socket & qemu_accept Daniel P. Berrange
2016-03-09 18:00   ` Paolo Bonzini
2016-03-09 17:28 ` [Qemu-devel] [PATCH v1 21/21] error: ensure errno detail is printed with error_abort Daniel P. Berrange
2016-03-09 18:01   ` Paolo Bonzini
2016-03-10  8:55   ` Markus Armbruster
2016-03-10  9:40     ` Daniel P. Berrange
2016-03-10 20:36       ` Markus Armbruster
2016-03-09 18:06 ` [Qemu-devel] [PATCH v1 00/21] Multiple fixes & improves to QIOChannel & Win32 Paolo Bonzini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1457544504-8548-19-git-send-email-berrange@redhat.com \
    --to=berrange@redhat.com \
    --cc=Andrew.Baumann@microsoft.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=sw@weilnetz.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.