Merge remote-tracking branch 'kiszka/queues/slirp' into staging
* kiszka/queues/slirp: slirp: Signal free input buffer space to io-thread w32/slirp: Undefine error constants before their redefinition slirp: use socket_set_nonblock slirp: clean up conflicts with system headers
This commit is contained in:
commit
cefc898806
46
slirp/misc.c
46
slirp/misc.c
|
@ -215,7 +215,7 @@ fork_exec(struct socket *so, const char *ex, int do_pty)
|
|||
setsockopt(so->s, SOL_SOCKET, SO_REUSEADDR, (char *)&opt, sizeof(int));
|
||||
opt = 1;
|
||||
setsockopt(so->s, SOL_SOCKET, SO_OOBINLINE, (char *)&opt, sizeof(int));
|
||||
fd_nonblock(so->s);
|
||||
socket_set_nonblock(so->s);
|
||||
|
||||
/* Append the telnet options now */
|
||||
if (so->so_m != NULL && do_pty == 1) {
|
||||
|
@ -267,50 +267,6 @@ u_sleep(int usec)
|
|||
select(0, &fdset, &fdset, &fdset, &t);
|
||||
}
|
||||
|
||||
/*
|
||||
* Set fd blocking and non-blocking
|
||||
*/
|
||||
|
||||
void
|
||||
fd_nonblock(int fd)
|
||||
{
|
||||
#ifdef FIONBIO
|
||||
#ifdef _WIN32
|
||||
unsigned long opt = 1;
|
||||
#else
|
||||
int opt = 1;
|
||||
#endif
|
||||
|
||||
ioctlsocket(fd, FIONBIO, &opt);
|
||||
#else
|
||||
int opt;
|
||||
|
||||
opt = fcntl(fd, F_GETFL, 0);
|
||||
opt |= O_NONBLOCK;
|
||||
fcntl(fd, F_SETFL, opt);
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
fd_block(int fd)
|
||||
{
|
||||
#ifdef FIONBIO
|
||||
#ifdef _WIN32
|
||||
unsigned long opt = 0;
|
||||
#else
|
||||
int opt = 0;
|
||||
#endif
|
||||
|
||||
ioctlsocket(fd, FIONBIO, &opt);
|
||||
#else
|
||||
int opt;
|
||||
|
||||
opt = fcntl(fd, F_GETFL, 0);
|
||||
opt &= ~O_NONBLOCK;
|
||||
fcntl(fd, F_SETFL, opt);
|
||||
#endif
|
||||
}
|
||||
|
||||
void slirp_connection_info(Slirp *slirp, Monitor *mon)
|
||||
{
|
||||
const char * const tcpstates[] = {
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
*/
|
||||
|
||||
#include <slirp.h>
|
||||
#include <main-loop.h>
|
||||
|
||||
static void sbappendsb(struct sbuf *sb, struct mbuf *m);
|
||||
|
||||
|
@ -18,6 +19,8 @@ sbfree(struct sbuf *sb)
|
|||
void
|
||||
sbdrop(struct sbuf *sb, int num)
|
||||
{
|
||||
int limit = sb->sb_datalen / 2;
|
||||
|
||||
/*
|
||||
* We can only drop how much we have
|
||||
* This should never succeed
|
||||
|
@ -29,6 +32,9 @@ sbdrop(struct sbuf *sb, int num)
|
|||
if(sb->sb_rptr >= sb->sb_data + sb->sb_datalen)
|
||||
sb->sb_rptr -= sb->sb_datalen;
|
||||
|
||||
if (sb->sb_cc < limit && sb->sb_cc + num >= limit) {
|
||||
qemu_notify_event();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -15,6 +15,12 @@ typedef char *caddr_t;
|
|||
# include <sys/timeb.h>
|
||||
# include <iphlpapi.h>
|
||||
|
||||
# undef EWOULDBLOCK
|
||||
# undef EINPROGRESS
|
||||
# undef ENOTCONN
|
||||
# undef EHOSTUNREACH
|
||||
# undef ENETUNREACH
|
||||
# undef ECONNREFUSED
|
||||
# define EWOULDBLOCK WSAEWOULDBLOCK
|
||||
# define EINPROGRESS WSAEINPROGRESS
|
||||
# define ENOTCONN WSAENOTCONN
|
||||
|
@ -88,10 +94,6 @@ void *malloc(size_t arg);
|
|||
void free(void *ptr);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_INET_ATON
|
||||
int inet_aton(const char *cp, struct in_addr *ia);
|
||||
#endif
|
||||
|
||||
#include <fcntl.h>
|
||||
#ifndef NO_UNIX_SOCKETS
|
||||
#include <sys/un.h>
|
||||
|
@ -144,6 +146,7 @@ int inet_aton(const char *cp, struct in_addr *ia);
|
|||
#include "debug.h"
|
||||
|
||||
#include "qemu-queue.h"
|
||||
#include "qemu_socket.h"
|
||||
|
||||
#include "libslirp.h"
|
||||
#include "ip.h"
|
||||
|
@ -167,9 +170,6 @@ int inet_aton(const char *cp, struct in_addr *ia);
|
|||
#include "bootp.h"
|
||||
#include "tftp.h"
|
||||
|
||||
/* osdep.c */
|
||||
int qemu_socket(int domain, int type, int protocol);
|
||||
|
||||
#define ETH_ALEN 6
|
||||
#define ETH_HLEN 14
|
||||
|
||||
|
|
21
slirp/tcp.h
21
slirp/tcp.h
|
@ -45,6 +45,7 @@ typedef uint32_t tcp_seq;
|
|||
* TCP header.
|
||||
* Per RFC 793, September, 1981.
|
||||
*/
|
||||
#define tcphdr slirp_tcphdr
|
||||
struct tcphdr {
|
||||
uint16_t th_sport; /* source port */
|
||||
uint16_t th_dport; /* destination port */
|
||||
|
@ -58,12 +59,6 @@ struct tcphdr {
|
|||
th_off:4; /* data offset */
|
||||
#endif
|
||||
uint8_t th_flags;
|
||||
#define TH_FIN 0x01
|
||||
#define TH_SYN 0x02
|
||||
#define TH_RST 0x04
|
||||
#define TH_PUSH 0x08
|
||||
#define TH_ACK 0x10
|
||||
#define TH_URG 0x20
|
||||
uint16_t th_win; /* window */
|
||||
uint16_t th_sum; /* checksum */
|
||||
uint16_t th_urp; /* urgent pointer */
|
||||
|
@ -71,6 +66,16 @@ struct tcphdr {
|
|||
|
||||
#include "tcp_var.h"
|
||||
|
||||
#ifndef TH_FIN
|
||||
#define TH_FIN 0x01
|
||||
#define TH_SYN 0x02
|
||||
#define TH_RST 0x04
|
||||
#define TH_PUSH 0x08
|
||||
#define TH_ACK 0x10
|
||||
#define TH_URG 0x20
|
||||
#endif
|
||||
|
||||
#ifndef TCPOPT_EOL
|
||||
#define TCPOPT_EOL 0
|
||||
#define TCPOPT_NOP 1
|
||||
#define TCPOPT_MAXSEG 2
|
||||
|
@ -86,6 +91,7 @@ struct tcphdr {
|
|||
|
||||
#define TCPOPT_TSTAMP_HDR \
|
||||
(TCPOPT_NOP<<24|TCPOPT_NOP<<16|TCPOPT_TIMESTAMP<<8|TCPOLEN_TIMESTAMP)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Default maximum segment size for TCP.
|
||||
|
@ -95,10 +101,13 @@ struct tcphdr {
|
|||
*
|
||||
* We make this 1460 because we only care about Ethernet in the qemu context.
|
||||
*/
|
||||
#undef TCP_MSS
|
||||
#define TCP_MSS 1460
|
||||
|
||||
#undef TCP_MAXWIN
|
||||
#define TCP_MAXWIN 65535 /* largest value for (unscaled) window */
|
||||
|
||||
#undef TCP_MAX_WINSHIFT
|
||||
#define TCP_MAX_WINSHIFT 14 /* maximum window shift */
|
||||
|
||||
/*
|
||||
|
|
|
@ -336,7 +336,7 @@ int tcp_fconnect(struct socket *so)
|
|||
int opt, s=so->s;
|
||||
struct sockaddr_in addr;
|
||||
|
||||
fd_nonblock(s);
|
||||
socket_set_nonblock(s);
|
||||
opt = 1;
|
||||
setsockopt(s,SOL_SOCKET,SO_REUSEADDR,(char *)&opt,sizeof(opt ));
|
||||
opt = 1;
|
||||
|
@ -424,7 +424,7 @@ tcp_connect(struct socket *inso)
|
|||
tcp_close(sototcpcb(so)); /* This will sofree() as well */
|
||||
return;
|
||||
}
|
||||
fd_nonblock(s);
|
||||
socket_set_nonblock(s);
|
||||
opt = 1;
|
||||
setsockopt(s,SOL_SOCKET,SO_REUSEADDR,(char *)&opt,sizeof(int));
|
||||
opt = 1;
|
||||
|
|
Loading…
Reference in a new issue