+void slirp_output(const uint8_t *pkt, int pkt_len)
+{
+#if 0
+ printf("output:\n");
+ hex_dump(stdout, pkt, pkt_len);
+#endif
+ slirp_fd_read(slirp_fd_opaque, pkt, pkt_len);
+}
+
+static void slirp_send_packet(NetDriverState *nd, const uint8_t *buf, int size)
+{
+#if 0
+ printf("input:\n");
+ hex_dump(stdout, buf, size);
+#endif
+ slirp_input(buf, size);
+}
+
+static void slirp_add_read_packet(NetDriverState *nd,
+ IOCanRWHandler *fd_can_read,
+ IOReadHandler *fd_read, void *opaque)
+{
+ slirp_fd_opaque = opaque;
+ slirp_fd_can_read = fd_can_read;
+ slirp_fd_read = fd_read;
+}
+
+static int net_slirp_init(NetDriverState *nd)
+{
+ if (!slirp_inited) {
+ slirp_inited = 1;
+ slirp_init();
+ }
+ nd->send_packet = slirp_send_packet;
+ nd->add_read_packet = slirp_add_read_packet;
+ pstrcpy(nd->ifname, sizeof(nd->ifname), "slirp");
+ return 0;
+}
+
+#endif /* CONFIG_SLIRP */
+
+#if !defined(_WIN32)