slirp: Add a special case for the NULL socket
NULL sockets are used for NDP, BOOTP, and other critical operations. If the topmost mbuf in a NULL session is blocked pending resolution, it may cause problems if it blocks other packets with a NULL socket. So do not add mbufs with a NULL socket field to the same session. Signed-off-by: Kevin Cernekee <cernekee@chromium.org> Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
This commit is contained in:
parent
e2aad34d73
commit
13146a8395
@ -73,6 +73,7 @@ if_output(struct socket *so, struct mbuf *ifm)
|
|||||||
* We mustn't put this packet back on the fastq (or we'll send it out of order)
|
* We mustn't put this packet back on the fastq (or we'll send it out of order)
|
||||||
* XXX add cache here?
|
* XXX add cache here?
|
||||||
*/
|
*/
|
||||||
|
if (so) {
|
||||||
for (ifq = (struct mbuf *) slirp->if_batchq.qh_rlink;
|
for (ifq = (struct mbuf *) slirp->if_batchq.qh_rlink;
|
||||||
(struct quehead *) ifq != &slirp->if_batchq;
|
(struct quehead *) ifq != &slirp->if_batchq;
|
||||||
ifq = ifq->ifq_prev) {
|
ifq = ifq->ifq_prev) {
|
||||||
@ -83,6 +84,7 @@ if_output(struct socket *so, struct mbuf *ifm)
|
|||||||
goto diddit;
|
goto diddit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* No match, check which queue to put it on */
|
/* No match, check which queue to put it on */
|
||||||
if (so && (so->so_iptos & IPTOS_LOWDELAY)) {
|
if (so && (so->so_iptos & IPTOS_LOWDELAY)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user