slirp: Only start packet expiration for delayed ones
The expiration timeout must only affect packets that are queued due to pending ARP resolutions. The old version broke ping e.g. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
This commit is contained in:
		
							parent
							
								
									fd5938799d
								
							
						
					
					
						commit
						e3a110b527
					
				@ -106,9 +106,6 @@ if_output(struct socket *so, struct mbuf *ifm)
 | 
				
			|||||||
	ifs_init(ifm);
 | 
						ifs_init(ifm);
 | 
				
			||||||
	insque(ifm, ifq);
 | 
						insque(ifm, ifq);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /* Expiration date = Now + 1 second */
 | 
					 | 
				
			||||||
        ifm->expiration_date = qemu_get_clock_ns(rt_clock) + 1000000000ULL;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
diddit:
 | 
					diddit:
 | 
				
			||||||
	slirp->if_queued++;
 | 
						slirp->if_queued++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -738,6 +738,9 @@ int if_encap(Slirp *slirp, struct mbuf *ifm)
 | 
				
			|||||||
            slirp->client_ipaddr = iph->ip_dst;
 | 
					            slirp->client_ipaddr = iph->ip_dst;
 | 
				
			||||||
            slirp_output(slirp->opaque, arp_req, sizeof(arp_req));
 | 
					            slirp_output(slirp->opaque, arp_req, sizeof(arp_req));
 | 
				
			||||||
            ifm->arp_requested = true;
 | 
					            ifm->arp_requested = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            /* Expire request and drop outgoing packet after 1 second */
 | 
				
			||||||
 | 
					            ifm->expiration_date = qemu_get_clock_ns(rt_clock) + 1000000000ULL;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return 0;
 | 
					        return 0;
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user