qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH for-3.2 38/41] net: do not depend on slirp inter


From: Philippe Mathieu-Daudé
Subject: Re: [Qemu-devel] [PATCH for-3.2 38/41] net: do not depend on slirp internals
Date: Wed, 14 Nov 2018 14:21:36 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.3.0

On 14/11/18 13:36, Marc-André Lureau wrote:
Only slirp/libslirp.h should be included.

Instead of using some slirp declarations and utility functions directly,
let's copy them in net/util.h.

Nice cleanup! Can this single patch be applied out of this RFC series?


Signed-off-by: Marc-André Lureau <address@hidden>

Reviewed-by: Philippe Mathieu-Daudé <address@hidden>
Tested-by: Philippe Mathieu-Daudé <address@hidden>

---
  net/colo.h            |  3 +--
  net/util.h            | 55 +++++++++++++++++++++++++++++++++++++++++++
  net/colo-compare.c    |  1 +
  net/colo.c            |  1 +
  net/filter-rewriter.c |  1 +
  net/slirp.c           |  2 +-
  stubs/slirp.c         |  2 +-
  7 files changed, 61 insertions(+), 4 deletions(-)

diff --git a/net/colo.h b/net/colo.h
index 11c5226488..420d916af2 100644
--- a/net/colo.h
+++ b/net/colo.h
@@ -15,10 +15,9 @@
  #ifndef QEMU_COLO_PROXY_H
  #define QEMU_COLO_PROXY_H
-#include "slirp/slirp.h"
  #include "qemu/jhash.h"
  #include "qemu/timer.h"
-#include "slirp/tcp.h"
+#include "net/eth.h"
#define HASHTABLE_MAX_SIZE 16384 diff --git a/net/util.h b/net/util.h
index 60b73d372d..358185fd50 100644
--- a/net/util.h
+++ b/net/util.h
@@ -26,6 +26,61 @@
  #define QEMU_NET_UTIL_H
+/*
+ * Structure of an internet header, naked of options.
+ */
+struct ip {
+#ifdef HOST_WORDS_BIGENDIAN
+    uint8_t ip_v:4,         /* version */
+            ip_hl:4;        /* header length */
+#else
+    uint8_t ip_hl:4,        /* header length */
+            ip_v:4;         /* version */
+#endif
+    uint8_t ip_tos;         /* type of service */
+    uint16_t ip_len;        /* total length */
+    uint16_t ip_id;         /* identification */
+    uint16_t ip_off;        /* fragment offset field */
+#define IP_DF 0x4000        /* don't fragment flag */
+#define IP_MF 0x2000        /* more fragments flag */
+#define IP_OFFMASK 0x1fff   /* mask for fragmenting bits */
+    uint8_t ip_ttl;         /* time to live */
+    uint8_t ip_p;           /* protocol */
+    uint16_t ip_sum;        /* checksum */
+    struct in_addr ip_src, ip_dst;  /* source and dest address */
+} QEMU_PACKED;
+
+static inline bool in6_equal_net(const struct in6_addr *a,
+                                 const struct in6_addr *b,
+                                 int prefix_len)
+{
+    if (memcmp(a, b, prefix_len / 8) != 0) {
+        return 0;
+    }
+
+    if (prefix_len % 8 == 0) {
+        return 1;
+    }
+
+    return a->s6_addr[prefix_len / 8] >> (8 - (prefix_len % 8))
+        == b->s6_addr[prefix_len / 8] >> (8 - (prefix_len % 8));
+}
+
+#define TCPS_CLOSED             0       /* closed */
+#define TCPS_LISTEN             1       /* listening for connection */
+#define TCPS_SYN_SENT           2       /* active, have sent syn */
+#define TCPS_SYN_RECEIVED       3       /* have send and received syn */
+/* states < TCPS_ESTABLISHED are those where connections not established */
+#define TCPS_ESTABLISHED        4       /* established */
+#define TCPS_CLOSE_WAIT         5       /* rcvd fin, waiting for close */
+/* states > TCPS_CLOSE_WAIT are those where user has closed */
+#define TCPS_FIN_WAIT_1         6       /* have closed, sent fin */
+#define TCPS_CLOSING            7       /* closed xchd FIN; await FIN ACK */
+#define TCPS_LAST_ACK           8       /* had fin and close; await FIN ACK */
+/* states > TCPS_CLOSE_WAIT && < TCPS_FIN_WAIT_2 await ACK of FIN */
+#define TCPS_FIN_WAIT_2         9       /* have closed, fin is acked */
+#define TCPS_TIME_WAIT          10      /* in 2*msl quiet wait after close */
+
  int net_parse_macaddr(uint8_t *macaddr, const char *p);
#endif /* QEMU_NET_UTIL_H */
diff --git a/net/colo-compare.c b/net/colo-compare.c
index a39191d522..3b6f596432 100644
--- a/net/colo-compare.c
+++ b/net/colo-compare.c
@@ -30,6 +30,7 @@
  #include "net/colo-compare.h"
  #include "migration/colo.h"
  #include "migration/migration.h"
+#include "util.h"
#define TYPE_COLO_COMPARE "colo-compare"
  #define COLO_COMPARE(obj) \
diff --git a/net/colo.c b/net/colo.c
index 49176bf07b..8196b35837 100644
--- a/net/colo.c
+++ b/net/colo.c
@@ -15,6 +15,7 @@
  #include "qemu/osdep.h"
  #include "trace.h"
  #include "colo.h"
+#include "util.h"
uint32_t connection_key_hash(const void *opaque)
  {
diff --git a/net/filter-rewriter.c b/net/filter-rewriter.c
index bb8f4d93b1..9ccd8947db 100644
--- a/net/filter-rewriter.c
+++ b/net/filter-rewriter.c
@@ -22,6 +22,7 @@
  #include "net/checksum.h"
  #include "net/colo.h"
  #include "migration/colo.h"
+#include "util.h"
#define FILTER_COLO_REWRITER(obj) \
      OBJECT_CHECK(RewriterState, (obj), TYPE_FILTER_REWRITER)
diff --git a/net/slirp.c b/net/slirp.c
index 4c39878933..7524049e49 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -38,12 +38,12 @@
  #include "qemu/error-report.h"
  #include "qemu/sockets.h"
  #include "slirp/libslirp.h"
-#include "slirp/ip6.h"
  #include "chardev/char-fe.h"
  #include "sysemu/sysemu.h"
  #include "qemu/cutils.h"
  #include "qapi/error.h"
  #include "qapi/qmp/qdict.h"
+#include "util.h"
static int get_str_sep(char *buf, int buf_size, const char **pp, int sep)
  {
diff --git a/stubs/slirp.c b/stubs/slirp.c
index 42f7e1afd0..70704346fd 100644
--- a/stubs/slirp.c
+++ b/stubs/slirp.c
@@ -1,7 +1,7 @@
  #include "qemu/osdep.h"
  #include "qemu-common.h"
  #include "qemu/host-utils.h"
-#include "slirp/slirp.h"
+#include "slirp/libslirp.h"
void slirp_pollfds_fill(GArray *pollfds, uint32_t *timeout)
  {




reply via email to

[Prev in Thread] Current Thread [Next in Thread]