mirror of
https://github.com/qemu/qemu.git
synced 2024-11-27 22:03:35 +08:00
1ab74cea06
In the current implementation, if Slirp tries to send an IP packet to a client with an unknown hardware address, the packet is simply dropped and an ARP request is sent (if_encap in slirp/slirp.c). With this patch, Slirp will send the ARP request, re-queue the packet and try to send it later. The packet is dropped after one second if the ARP reply is not received. Signed-off-by: Fabien Chouteau <chouteau@adacore.com> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
47 lines
1.1 KiB
C
47 lines
1.1 KiB
C
/*
|
|
* Copyright (c) 1995 Danny Gasparovski.
|
|
*
|
|
* Please read the file COPYRIGHT for the
|
|
* terms and conditions of the copyright.
|
|
*/
|
|
|
|
#ifdef HAVE_SYS_SELECT_H
|
|
#include <sys/select.h>
|
|
#endif
|
|
|
|
#define TOWRITEMAX 512
|
|
|
|
extern int slirp_socket;
|
|
extern int slirp_socket_unit;
|
|
extern int slirp_socket_port;
|
|
extern uint32_t slirp_socket_addr;
|
|
extern char *slirp_socket_passwd;
|
|
extern int ctty_closed;
|
|
|
|
/*
|
|
* Get the difference in 2 times from updtim()
|
|
* Allow for wraparound times, "just in case"
|
|
* x is the greater of the 2 (current time) and y is
|
|
* what it's being compared against.
|
|
*/
|
|
#define TIME_DIFF(x,y) (x)-(y) < 0 ? ~0-(y)+(x) : (x)-(y)
|
|
|
|
extern char *slirp_tty;
|
|
extern char *exec_shell;
|
|
extern u_int curtime;
|
|
extern fd_set *global_readfds, *global_writefds, *global_xfds;
|
|
extern struct in_addr loopback_addr;
|
|
extern char *username;
|
|
extern char *socket_path;
|
|
extern int towrite_max;
|
|
extern int ppp_exit;
|
|
extern int tcp_keepintvl;
|
|
|
|
#define PROTO_SLIP 0x1
|
|
#ifdef USE_PPP
|
|
#define PROTO_PPP 0x2
|
|
#endif
|
|
|
|
int if_encap(Slirp *slirp, struct mbuf *ifm);
|
|
ssize_t slirp_send(struct socket *so, const void *buf, size_t len, int flags);
|