slirp: remove mbuf(m_hdr,m_dat) indirection

This commit is contained in:
Michael Tokarev 2013-07-13 13:10:05 +04:00
parent 43be134366
commit 0e44486cdc
2 changed files with 24 additions and 39 deletions

View File

@ -49,22 +49,6 @@
* free the m_ext. This is inefficient memory-wise, but who cares. * free the m_ext. This is inefficient memory-wise, but who cares.
*/ */
/* XXX should union some of these! */
/* header at beginning of each mbuf: */
struct m_hdr {
struct mbuf *mh_next; /* Linked list of mbufs */
struct mbuf *mh_prev;
struct mbuf *mh_nextpkt; /* Next packet in queue/record */
struct mbuf *mh_prevpkt; /* Flags aren't used in the output queue */
int mh_flags; /* Misc flags */
int mh_size; /* Size of data */
struct socket *mh_so;
caddr_t mh_data; /* Location of data */
int mh_len; /* Amount of data in this mbuf */
};
/* /*
* How much room is in the mbuf, from m_data to the end of the mbuf * How much room is in the mbuf, from m_data to the end of the mbuf
*/ */
@ -80,29 +64,30 @@ struct m_hdr {
#define M_TRAILINGSPACE M_FREEROOM #define M_TRAILINGSPACE M_FREEROOM
struct mbuf { struct mbuf {
struct m_hdr m_hdr; /* XXX should union some of these! */
/* header at beginning of each mbuf: */
struct mbuf *m_next; /* Linked list of mbufs */
struct mbuf *m_prev;
struct mbuf *m_nextpkt; /* Next packet in queue/record */
struct mbuf *m_prevpkt; /* Flags aren't used in the output queue */
int m_flags; /* Misc flags */
int m_size; /* Size of data */
struct socket *m_so;
caddr_t m_data; /* Location of data */
int m_len; /* Amount of data in this mbuf */
Slirp *slirp; Slirp *slirp;
bool arp_requested; bool arp_requested;
uint64_t expiration_date; uint64_t expiration_date;
/* start of dynamic buffer area, must be last element */ /* start of dynamic buffer area, must be last element */
union M_dat { union {
char m_dat_[1]; /* ANSI don't like 0 sized arrays */ char m_dat[1]; /* ANSI don't like 0 sized arrays */
char *m_ext_; char *m_ext;
} M_dat; };
}; };
#define m_next m_hdr.mh_next
#define m_prev m_hdr.mh_prev
#define m_nextpkt m_hdr.mh_nextpkt
#define m_prevpkt m_hdr.mh_prevpkt
#define m_flags m_hdr.mh_flags
#define m_len m_hdr.mh_len
#define m_data m_hdr.mh_data
#define m_size m_hdr.mh_size
#define m_dat M_dat.m_dat_
#define m_ext M_dat.m_ext_
#define m_so m_hdr.mh_so
#define ifq_prev m_prev #define ifq_prev m_prev
#define ifq_next m_next #define ifq_next m_next
#define ifs_prev m_prevpkt #define ifs_prev m_prevpkt

View File

@ -647,7 +647,7 @@ tcp_emu(struct socket *so, struct mbuf *m)
n4 = (laddr & 0xff); n4 = (laddr & 0xff);
m->m_len = bptr - m->m_data; /* Adjust length */ m->m_len = bptr - m->m_data; /* Adjust length */
m->m_len += snprintf(bptr, m->m_hdr.mh_size - m->m_len, m->m_len += snprintf(bptr, m->m_size - m->m_len,
"ORT %d,%d,%d,%d,%d,%d\r\n%s", "ORT %d,%d,%d,%d,%d,%d\r\n%s",
n1, n2, n3, n4, n5, n6, x==7?buff:""); n1, n2, n3, n4, n5, n6, x==7?buff:"");
return 1; return 1;
@ -680,7 +680,7 @@ tcp_emu(struct socket *so, struct mbuf *m)
n4 = (laddr & 0xff); n4 = (laddr & 0xff);
m->m_len = bptr - m->m_data; /* Adjust length */ m->m_len = bptr - m->m_data; /* Adjust length */
m->m_len += snprintf(bptr, m->m_hdr.mh_size - m->m_len, m->m_len += snprintf(bptr, m->m_size - m->m_len,
"27 Entering Passive Mode (%d,%d,%d,%d,%d,%d)\r\n%s", "27 Entering Passive Mode (%d,%d,%d,%d,%d,%d)\r\n%s",
n1, n2, n3, n4, n5, n6, x==7?buff:""); n1, n2, n3, n4, n5, n6, x==7?buff:"");
@ -706,7 +706,7 @@ tcp_emu(struct socket *so, struct mbuf *m)
if (m->m_data[m->m_len-1] == '\0' && lport != 0 && if (m->m_data[m->m_len-1] == '\0' && lport != 0 &&
(so = tcp_listen(slirp, INADDR_ANY, 0, so->so_laddr.s_addr, (so = tcp_listen(slirp, INADDR_ANY, 0, so->so_laddr.s_addr,
htons(lport), SS_FACCEPTONCE)) != NULL) htons(lport), SS_FACCEPTONCE)) != NULL)
m->m_len = snprintf(m->m_data, m->m_hdr.mh_size, "%d", m->m_len = snprintf(m->m_data, m->m_size, "%d",
ntohs(so->so_fport)) + 1; ntohs(so->so_fport)) + 1;
return 1; return 1;
@ -726,7 +726,7 @@ tcp_emu(struct socket *so, struct mbuf *m)
return 1; return 1;
} }
m->m_len = bptr - m->m_data; /* Adjust length */ m->m_len = bptr - m->m_data; /* Adjust length */
m->m_len += snprintf(bptr, m->m_hdr.mh_size, m->m_len += snprintf(bptr, m->m_size,
"DCC CHAT chat %lu %u%c\n", "DCC CHAT chat %lu %u%c\n",
(unsigned long)ntohl(so->so_faddr.s_addr), (unsigned long)ntohl(so->so_faddr.s_addr),
ntohs(so->so_fport), 1); ntohs(so->so_fport), 1);
@ -737,7 +737,7 @@ tcp_emu(struct socket *so, struct mbuf *m)
return 1; return 1;
} }
m->m_len = bptr - m->m_data; /* Adjust length */ m->m_len = bptr - m->m_data; /* Adjust length */
m->m_len += snprintf(bptr, m->m_hdr.mh_size, m->m_len += snprintf(bptr, m->m_size,
"DCC SEND %s %lu %u %u%c\n", buff, "DCC SEND %s %lu %u %u%c\n", buff,
(unsigned long)ntohl(so->so_faddr.s_addr), (unsigned long)ntohl(so->so_faddr.s_addr),
ntohs(so->so_fport), n1, 1); ntohs(so->so_fport), n1, 1);
@ -748,7 +748,7 @@ tcp_emu(struct socket *so, struct mbuf *m)
return 1; return 1;
} }
m->m_len = bptr - m->m_data; /* Adjust length */ m->m_len = bptr - m->m_data; /* Adjust length */
m->m_len += snprintf(bptr, m->m_hdr.mh_size, m->m_len += snprintf(bptr, m->m_size,
"DCC MOVE %s %lu %u %u%c\n", buff, "DCC MOVE %s %lu %u %u%c\n", buff,
(unsigned long)ntohl(so->so_faddr.s_addr), (unsigned long)ntohl(so->so_faddr.s_addr),
ntohs(so->so_fport), n1, 1); ntohs(so->so_fport), n1, 1);