Remove old packet aggregation

Signed-off-by: Adrien Gallouët <adrien@gallouet.fr>
This commit is contained in:
Adrien Gallouët
2018-03-17 13:21:16 +00:00
parent dabd16e4b4
commit 7a9f6fc8b8

View File

@@ -304,88 +304,33 @@ gt_bind(int argc, char **argv)
} }
if (FD_ISSET(tun_fd, &rfds)) { if (FD_ISSET(tun_fd, &rfds)) {
size_t size = 0; struct ip_common ic;
const int r = tun_read(tun_fd, buf, bufsize);
while (bufsize - size >= mtu) { if (r <= 0) {
const int r = tun_read(tun_fd, &buf[size], bufsize - size); if (r == -1 && errno != EAGAIN)
perror("tun_read");
if (r <= 0 || r > mtu) } else if ((!ip_get_common(&ic, buf, r)) && (ic.size == r) &&
break; (mud_send(mud, buf, r, ic.tc) == -1)) {
if (errno == EMSGSIZE) {
struct ip_common ic; mtu = gt_setup_mtu(mud, tun_name);
} else if (errno != EAGAIN) {
if (ip_get_common(&ic, &buf[size], r) || ic.size != r) perror("mud_send");
break;
size += r;
}
size_t p = 0;
while (p < size) {
size_t q = p;
int tc = 0;
while (q < size) {
struct ip_common ic;
if ((ip_get_common(&ic, &buf[q], size - q)) ||
(ic.size > size - q))
break;
if (q + ic.size > p + mtu)
break;
q += ic.size;
if (tc < (ic.tc & 0xFC))
tc = ic.tc & 0xFC;
} }
if (p >= q)
break;
int r = mud_send(mud, &buf[p], q - p, tc);
if (r == -1) {
if (errno == EMSGSIZE) {
mtu = gt_setup_mtu(mud, tun_name);
} else if (errno != EAGAIN) {
perror("mud_send");
}
}
p = q;
} }
} }
if (FD_ISSET(mud_fd, &rfds)) { if (FD_ISSET(mud_fd, &rfds)) {
size_t size = 0; struct ip_common ic;
const int r = mud_recv(mud, buf, bufsize);
while (bufsize - size >= mtu) { if (r <= 0) {
const int r = mud_recv(mud, &buf[size], bufsize - size); if (r == -1 && errno != EAGAIN)
perror("mud_recv");
if (r <= 0) { } else if ((!ip_get_common(&ic, buf, r) && (ic.size == r)) &&
if (r == -1 && errno != EAGAIN) (tun_write(tun_fd, buf, r) == -1)) {
perror("mud_recv"); if (errno != EAGAIN)
break; perror("tun_write");
}
size += r;
}
size_t p = 0;
while (p < size) {
struct ip_common ic;
if ((ip_get_common(&ic, &buf[p], size - p)) ||
(ic.size > size - p))
break;
tun_write(tun_fd, &buf[p], ic.size);
p += ic.size;
} }
} }
} }