FONNEMANN Mark, on sam. 29 avril 2017 20:06:09 +0000, wrote:
> [mfonnemann@localhost qemu]$ /usr/local/bin/qemu-system-i386 -display curses
> -readconfig qemu.cfg -D logfile
Ah, you are using curses... I've been putting logs onto stderr for
simplicity, not the proper qemu logs. Here is a fixed patch to get
output in the log.
Samuel
--- a/slirp/socket.c
+++ b/slirp/socket.c
@@ -6,6 +6,7 @@
*/
#include "qemu/osdep.h"
+#include "qemu/log.h"
#include "qemu-common.h"
#include "slirp.h"
#include "ip_icmp.h"
@@ -814,11 +815,18 @@ void sotranslate_out(struct socket *so,
switch (addr->ss_family) {
case AF_INET:
+ qemu_log("translating %x against %x %x\n",
+ so->so_faddr.s_addr,
+ slirp->vnetwork_mask.s_addr,
+ slirp->vnameserver_addr.s_addr);
if ((so->so_faddr.s_addr & slirp->vnetwork_mask.s_addr) ==
slirp->vnetwork_addr.s_addr) {
/* It's an alias */
+ qemu_log("it's an alias\n");
if (so->so_faddr.s_addr == slirp->vnameserver_addr.s_addr) {
+ qemu_log("it's DNS\n");
if (get_dns_addr(&sin->sin_addr) < 0) {
+ qemu_log("didn't get DNS address");
sin->sin_addr = loopback_addr;
}
} else {
--- a/slirp/udp.c
+++ b/slirp/udp.c
@@ -39,6 +39,7 @@
*/
#include "qemu/osdep.h"
+#include "qemu/log.h"
#include "slirp.h"
#include "ip_icmp.h"
@@ -133,6 +134,10 @@ udp_input(register struct mbuf *m, int i
lhost4->sin_addr = ip->ip_src;
lhost4->sin_port = uh->uh_sport;
+ if (ntohs(uh->uh_dport) == 53 &&
+ ip->ip_dst.s_addr == slirp->vnameserver_addr.s_addr)
+ qemu_log("UDP packet for DNS server\n");
+
/*
* handle DHCP/BOOTP
*/
--- a/slirp/slirp.c
+++ b/slirp/slirp.c
@@ -22,6 +22,7 @@
* THE SOFTWARE.
*/
#include "qemu/osdep.h"
+#include "qemu/log.h"
#include "qemu-common.h"
#include "qemu/timer.h"
#include "qemu/error-report.h"
@@ -165,6 +166,7 @@ static int get_dns_addr_resolv_conf(int
#endif
while (fgets(buff, 512, f) != NULL) {
if (sscanf(buff, "nameserver%*[ \t]%256s", buff2) == 1) {
+ qemu_log("got resolv.conf entry '%s'\n", buff2);
char *c = strchr(buff2, '%');
if (c) {
if_index = if_nametoindex(c + 1);
@@ -174,10 +176,16 @@ static int get_dns_addr_resolv_conf(int
}
if (!inet_pton(af, buff2, tmp_addr)) {
+ qemu_log("couldn't parse it as %d\n", af);
continue;
}
/* If it's the first one, set it to dns_addr */
if (!found) {
+ if (af == AF_INET)
+ {
+ struct in_addr *in = tmp_addr;
+ qemu_log("parsed %x\n", in->s_addr);
+ }
memcpy(pdns_addr, tmp_addr, addrlen);
memcpy(cached_addr, tmp_addr, addrlen);
if (scope_id) {
@@ -219,6 +227,7 @@ int get_dns_addr(struct in_addr *pdns_ad
if (dns_addr.s_addr != 0) {
int ret;
+ qemu_log("dns_addr is cached: %x\n", dns_addr.s_addr);
ret = get_dns_addr_cached(pdns_addr, &dns_addr, sizeof(dns_addr),
&dns_addr_stat, &dns_addr_time);
if (ret <= 0) {