[Qemu-devel] [PULL 36/65] slirp: add a callback to log guest errors

2019-01-14 Thread Samuel Thibault
From: Marc-André Lureau 

Signed-off-by: Marc-André Lureau 
Signed-off-by: Samuel Thibault 
---
 net/slirp.c  | 7 +++
 slirp/dhcpv6.c   | 6 +++---
 slirp/ip6_icmp.c | 7 +++
 slirp/libslirp.h | 2 ++
 4 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/net/slirp.c b/net/slirp.c
index 031c324f02..ea8b04e007 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -23,6 +23,7 @@
  */
 
 #include "qemu/osdep.h"
+#include "qemu/log.h"
 #include "net/slirp.h"
 
 
@@ -140,8 +141,14 @@ static NetClientInfo net_slirp_info = {
 .cleanup = net_slirp_cleanup,
 };
 
+static void net_slirp_guest_error(const char *msg)
+{
+qemu_log_mask(LOG_GUEST_ERROR, "%s", msg);
+}
+
 static const SlirpCb slirp_cb = {
 .output = net_slirp_output,
+.guest_error = net_slirp_guest_error,
 };
 
 static int net_slirp_init(NetClientState *peer, const char *model,
diff --git a/slirp/dhcpv6.c b/slirp/dhcpv6.c
index 943a13bca8..5d703e8ae6 100644
--- a/slirp/dhcpv6.c
+++ b/slirp/dhcpv6.c
@@ -50,7 +50,7 @@ struct requested_infos {
  * the odata region, thus the caller must keep odata valid as long as it
  * needs to access the requested_infos struct.
  */
-static int dhcpv6_parse_info_request(uint8_t *odata, int olen,
+static int dhcpv6_parse_info_request(Slirp *slirp, uint8_t *odata, int olen,
  struct requested_infos *ri)
 {
 int i, req_opt;
@@ -61,7 +61,7 @@ static int dhcpv6_parse_info_request(uint8_t *odata, int olen,
 int len = odata[2] << 8 | odata[3];
 
 if (len + 4 > olen) {
-qemu_log_mask(LOG_GUEST_ERROR, "Guest sent bad DHCPv6 packet!\n");
+slirp->cb->guest_error("Guest sent bad DHCPv6 packet!");
 return -E2BIG;
 }
 
@@ -121,7 +121,7 @@ static void dhcpv6_info_request(Slirp *slirp, struct 
sockaddr_in6 *srcsas,
 struct mbuf *m;
 uint8_t *resp;
 
-if (dhcpv6_parse_info_request(odata, olen, &ri) < 0) {
+if (dhcpv6_parse_info_request(slirp, odata, olen, &ri) < 0) {
 return;
 }
 
diff --git a/slirp/ip6_icmp.c b/slirp/ip6_icmp.c
index 595647b1b1..3f74d172f4 100644
--- a/slirp/ip6_icmp.c
+++ b/slirp/ip6_icmp.c
@@ -342,8 +342,7 @@ static void ndp_input(struct mbuf *m, Slirp *slirp, struct 
ip6 *ip,
 
 case ICMP6_NDP_RA:
 DEBUG_CALL(" type = Router Advertisement");
-qemu_log_mask(LOG_GUEST_ERROR,
-"Warning: guest sent NDP RA, but shouldn't");
+slirp->cb->guest_error("Warning: guest sent NDP RA, but shouldn't");
 break;
 
 case ICMP6_NDP_NS:
@@ -376,8 +375,8 @@ static void ndp_input(struct mbuf *m, Slirp *slirp, struct 
ip6 *ip,
 
 case ICMP6_NDP_REDIRECT:
 DEBUG_CALL(" type = Redirect");
-qemu_log_mask(LOG_GUEST_ERROR,
-"Warning: guest sent NDP REDIRECT, but shouldn't");
+slirp->cb->guest_error(
+"Warning: guest sent NDP REDIRECT, but shouldn't");
 break;
 }
 }
diff --git a/slirp/libslirp.h b/slirp/libslirp.h
index a5d1b27b5e..3e0aa19f4b 100644
--- a/slirp/libslirp.h
+++ b/slirp/libslirp.h
@@ -13,6 +13,8 @@ typedef struct Slirp Slirp;
 typedef struct SlirpCb {
 /* Send an ethernet frame to the guest network.  */
 void (*output)(void *opaque, const uint8_t *pkt, int pkt_len);
+/* Print a message for an error due to guest misbehavior.  */
+void (*guest_error)(const char *msg);
 } SlirpCb;
 
 
-- 
2.20.1




[Qemu-devel] [PULL 36/65] slirp: add a callback to log guest errors

2019-01-13 Thread Samuel Thibault
From: Marc-André Lureau 

Signed-off-by: Marc-André Lureau 
Signed-off-by: Samuel Thibault 
---
 net/slirp.c  | 7 +++
 slirp/dhcpv6.c   | 6 +++---
 slirp/ip6_icmp.c | 7 +++
 slirp/libslirp.h | 2 ++
 4 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/net/slirp.c b/net/slirp.c
index 031c324f02..ea8b04e007 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -23,6 +23,7 @@
  */
 
 #include "qemu/osdep.h"
+#include "qemu/log.h"
 #include "net/slirp.h"
 
 
@@ -140,8 +141,14 @@ static NetClientInfo net_slirp_info = {
 .cleanup = net_slirp_cleanup,
 };
 
+static void net_slirp_guest_error(const char *msg)
+{
+qemu_log_mask(LOG_GUEST_ERROR, "%s", msg);
+}
+
 static const SlirpCb slirp_cb = {
 .output = net_slirp_output,
+.guest_error = net_slirp_guest_error,
 };
 
 static int net_slirp_init(NetClientState *peer, const char *model,
diff --git a/slirp/dhcpv6.c b/slirp/dhcpv6.c
index 943a13bca8..5d703e8ae6 100644
--- a/slirp/dhcpv6.c
+++ b/slirp/dhcpv6.c
@@ -50,7 +50,7 @@ struct requested_infos {
  * the odata region, thus the caller must keep odata valid as long as it
  * needs to access the requested_infos struct.
  */
-static int dhcpv6_parse_info_request(uint8_t *odata, int olen,
+static int dhcpv6_parse_info_request(Slirp *slirp, uint8_t *odata, int olen,
  struct requested_infos *ri)
 {
 int i, req_opt;
@@ -61,7 +61,7 @@ static int dhcpv6_parse_info_request(uint8_t *odata, int olen,
 int len = odata[2] << 8 | odata[3];
 
 if (len + 4 > olen) {
-qemu_log_mask(LOG_GUEST_ERROR, "Guest sent bad DHCPv6 packet!\n");
+slirp->cb->guest_error("Guest sent bad DHCPv6 packet!");
 return -E2BIG;
 }
 
@@ -121,7 +121,7 @@ static void dhcpv6_info_request(Slirp *slirp, struct 
sockaddr_in6 *srcsas,
 struct mbuf *m;
 uint8_t *resp;
 
-if (dhcpv6_parse_info_request(odata, olen, &ri) < 0) {
+if (dhcpv6_parse_info_request(slirp, odata, olen, &ri) < 0) {
 return;
 }
 
diff --git a/slirp/ip6_icmp.c b/slirp/ip6_icmp.c
index 595647b1b1..3f74d172f4 100644
--- a/slirp/ip6_icmp.c
+++ b/slirp/ip6_icmp.c
@@ -342,8 +342,7 @@ static void ndp_input(struct mbuf *m, Slirp *slirp, struct 
ip6 *ip,
 
 case ICMP6_NDP_RA:
 DEBUG_CALL(" type = Router Advertisement");
-qemu_log_mask(LOG_GUEST_ERROR,
-"Warning: guest sent NDP RA, but shouldn't");
+slirp->cb->guest_error("Warning: guest sent NDP RA, but shouldn't");
 break;
 
 case ICMP6_NDP_NS:
@@ -376,8 +375,8 @@ static void ndp_input(struct mbuf *m, Slirp *slirp, struct 
ip6 *ip,
 
 case ICMP6_NDP_REDIRECT:
 DEBUG_CALL(" type = Redirect");
-qemu_log_mask(LOG_GUEST_ERROR,
-"Warning: guest sent NDP REDIRECT, but shouldn't");
+slirp->cb->guest_error(
+"Warning: guest sent NDP REDIRECT, but shouldn't");
 break;
 }
 }
diff --git a/slirp/libslirp.h b/slirp/libslirp.h
index a5d1b27b5e..3e0aa19f4b 100644
--- a/slirp/libslirp.h
+++ b/slirp/libslirp.h
@@ -13,6 +13,8 @@ typedef struct Slirp Slirp;
 typedef struct SlirpCb {
 /* Send an ethernet frame to the guest network.  */
 void (*output)(void *opaque, const uint8_t *pkt, int pkt_len);
+/* Print a message for an error due to guest misbehavior.  */
+void (*guest_error)(const char *msg);
 } SlirpCb;
 
 
-- 
2.20.1