@@ -21,6 +21,7 @@ typedef struct SlirpCb {
void (*timer_free)(void *timer);
void (*timer_mod)(void *timer, int64_t expire_timer);
void (*set_nonblock)(int fd);
+ void (*guest_error)(const char *msg);
} SlirpCb;
@@ -23,6 +23,7 @@
*/
#include "qemu/osdep.h"
+#include "qemu/log.h"
#include "net/slirp.h"
@@ -183,6 +184,11 @@ static void net_slirp_timer_mod(void *timer, int64_t expire_timer)
timer_mod(timer, expire_timer);
}
+static void net_slirp_guest_error(const char *msg)
+{
+ qemu_log_mask(LOG_GUEST_ERROR, "%s", msg);
+}
+
static SlirpCb slirp_cb = {
.output = net_slirp_output,
.chr_write_all = net_slirp_chr_write_all,
@@ -191,6 +197,7 @@ static SlirpCb slirp_cb = {
.timer_free = net_slirp_timer_free,
.timer_mod = net_slirp_timer_mod,
.set_nonblock = qemu_set_nonblock,
+ .guest_error = net_slirp_guest_error,
};
static int net_slirp_init(NetClientState *peer, const char *model,
@@ -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;
}
@@ -343,8 +343,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:
@@ -377,8 +376,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;
}
}
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- slirp/libslirp.h | 1 + net/slirp.c | 7 +++++++ slirp/dhcpv6.c | 6 +++--- slirp/ip6_icmp.c | 7 +++---- 4 files changed, 14 insertions(+), 7 deletions(-)