qemu-char: Print the remote and local addresses for a socket
It seems that it might be a good idea to know what is at the remote end of a socket for tracking down issues. So add that to the socket filename. Signed-off-by: Corey Minyard <cminyard@mvista.com> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
		
							parent
							
								
									5dd1f02b4b
								
							
						
					
					
						commit
						01ca519f24
					
				
							
								
								
									
										27
									
								
								qemu-char.c
								
								
								
								
							
							
						
						
									
										27
									
								
								qemu-char.c
								
								
								
								
							| 
						 | 
				
			
			@ -142,9 +142,11 @@ static int SocketAddress_to_str(char *dest, int max_len,
 | 
			
		|||
 | 
			
		||||
static int sockaddr_to_str(char *dest, int max_len,
 | 
			
		||||
                           struct sockaddr_storage *ss, socklen_t ss_len,
 | 
			
		||||
                           struct sockaddr_storage *ps, socklen_t ps_len,
 | 
			
		||||
                           bool is_listen, bool is_telnet)
 | 
			
		||||
{
 | 
			
		||||
    char host[NI_MAXHOST], serv[NI_MAXSERV];
 | 
			
		||||
    char shost[NI_MAXHOST], sserv[NI_MAXSERV];
 | 
			
		||||
    char phost[NI_MAXHOST], pserv[NI_MAXSERV];
 | 
			
		||||
    const char *left = "", *right = "";
 | 
			
		||||
 | 
			
		||||
    switch (ss->ss_family) {
 | 
			
		||||
| 
						 | 
				
			
			@ -159,12 +161,15 @@ static int sockaddr_to_str(char *dest, int max_len,
 | 
			
		|||
        right = "]";
 | 
			
		||||
        /* fall through */
 | 
			
		||||
    case AF_INET:
 | 
			
		||||
        getnameinfo((struct sockaddr *) ss, ss_len, host, sizeof(host),
 | 
			
		||||
                    serv, sizeof(serv), NI_NUMERICHOST | NI_NUMERICSERV);
 | 
			
		||||
        return snprintf(dest, max_len, "%s:%s%s%s:%s%s",
 | 
			
		||||
        getnameinfo((struct sockaddr *) ss, ss_len, shost, sizeof(shost),
 | 
			
		||||
                    sserv, sizeof(sserv), NI_NUMERICHOST | NI_NUMERICSERV);
 | 
			
		||||
        getnameinfo((struct sockaddr *) ps, ps_len, phost, sizeof(phost),
 | 
			
		||||
                    pserv, sizeof(pserv), NI_NUMERICHOST | NI_NUMERICSERV);
 | 
			
		||||
        return snprintf(dest, max_len, "%s:%s%s%s:%s%s <-> %s%s%s:%s",
 | 
			
		||||
                        is_telnet ? "telnet" : "tcp",
 | 
			
		||||
                        left, host, right, serv,
 | 
			
		||||
                        is_listen ? ",server" : "");
 | 
			
		||||
                        left, shost, right, sserv,
 | 
			
		||||
                        is_listen ? ",server" : "",
 | 
			
		||||
                        left, phost, right, pserv);
 | 
			
		||||
 | 
			
		||||
    default:
 | 
			
		||||
        return snprintf(dest, max_len, "unknown");
 | 
			
		||||
| 
						 | 
				
			
			@ -2870,15 +2875,19 @@ static void tcp_chr_connect(void *opaque)
 | 
			
		|||
{
 | 
			
		||||
    CharDriverState *chr = opaque;
 | 
			
		||||
    TCPCharDriver *s = chr->opaque;
 | 
			
		||||
    struct sockaddr_storage ss;
 | 
			
		||||
    socklen_t ss_len = sizeof(ss);
 | 
			
		||||
    struct sockaddr_storage ss, ps;
 | 
			
		||||
    socklen_t ss_len = sizeof(ss), ps_len = sizeof(ps);
 | 
			
		||||
 | 
			
		||||
    memset(&ss, 0, ss_len);
 | 
			
		||||
    if (getsockname(s->fd, (struct sockaddr *) &ss, &ss_len) != 0) {
 | 
			
		||||
        snprintf(chr->filename, CHR_MAX_FILENAME_SIZE,
 | 
			
		||||
                 "Error in getsockname: %s\n", strerror(errno));
 | 
			
		||||
    } else if (getpeername(s->fd, (struct sockaddr *) &ps, &ps_len) != 0) {
 | 
			
		||||
        snprintf(chr->filename, CHR_MAX_FILENAME_SIZE,
 | 
			
		||||
                 "Error in getpeername: %s\n", strerror(errno));
 | 
			
		||||
    } else {
 | 
			
		||||
        sockaddr_to_str(chr->filename, CHR_MAX_FILENAME_SIZE, &ss, ss_len,
 | 
			
		||||
        sockaddr_to_str(chr->filename, CHR_MAX_FILENAME_SIZE,
 | 
			
		||||
                        &ss, ss_len, &ps, ps_len,
 | 
			
		||||
                        s->is_listen, s->is_telnet);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue