|
|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Sergey Korolew 2:6053/1.2 21 Jan 2004 14:06:18 To : All Subject : mpd (ng_pptpgre) патч --------------------------------------------------------------------------------
Пропатчить файлы в /usr/src/sys/netgraph
cd /usr/src/sys/modules/netgraph/pptpgre
make
остановить mpd
kldunload ng_pptpgre
make install
!!!! Добавить в конфигурацию set pptp disable delayed-ack
Это - выключатель, убрав его можно вернуть старое поведение.
Также можно выключать адаптацию только для конкретных проблемных линков.
Увы, просто так добавить новый конфигурационный параметр без потери
совместимости нельзя, приходится использовать уже имеющийся.
====================================================================
diff -u /usr/src/sys/netgraph/old/ng_pptpgre.c
/usr/src/sys/netgraph/ng_pptpgre.c
-+- /usr/src/sys/netgraph/old/ng_pptpgre.c Thu Oct 10 22:27:54 2002
+++ /usr/src/sys/netgraph/ng_pptpgre.c Wed Jan 21 12:47:59 2004
@@ -486,6 +486,8 @@
/* Check if there's data */
if (m != NULL) {
+ if (priv->conf.enableDelayedAck) {
+
/* Is our transmit window full? */
if ((u_int32_t)PPTP_SEQ_DIFF(priv->xmitSeq, priv->recvAck)
>= a->xmitWin) {
@@ -493,6 +495,7 @@
NG_FREE_DATA(m, meta);
return (ENOBUFS);
}
+ }
/* Sanity check frame length */
if (m != NULL && m->m_pkthdr.len > PPTP_MAX_PAYLOAD) {
@@ -511,8 +514,11 @@
/* Include sequence number if packet contains any data */
if (m != NULL) {
gre->hasSeq = 1;
+
+ if (priv->conf.enableDelayedAck) {
a->timeSent[priv->xmitSeq - priv->recvAck]
= ng_pptpgre_time(node);
+ }
priv->xmitSeq++;
gre->data[0] = htonl(priv->xmitSeq);
}
@@ -522,7 +528,9 @@
gre->hasAck = 1;
gre->data[gre->hasSeq] = htonl(priv->recvSeq);
priv->xmitAck = priv->recvSeq;
- ng_pptpgre_stop_send_ack_timer(node);
+ if (priv->conf.enableDelayedAck) {
+ ng_pptpgre_stop_send_ack_timer(node);
+ }
}
/* Prepend GRE header to outgoing frame */
@@ -554,9 +562,12 @@
/* Deliver packet */
NG_SEND_DATA(error, priv->lower, m, meta);
+ if (priv->conf.enableDelayedAck) {
+
/* Start receive ACK timer if data was sent and not already running */
if (error == 0 && gre->hasSeq && priv->xmitSeq == priv->recvAck + 1)
ng_pptpgre_start_recv_ack_timer(node);
+ }
return (error);
}
@@ -651,6 +662,8 @@
goto badAck; /* ack already timed out */
priv->recvAck = ack;
+ if (priv->conf.enableDelayedAck) {
+
/* Update adaptive timeout stuff */
sample = ng_pptpgre_time(node) - a->timeSent[index];
diff = sample - a->rtt;
@@ -679,6 +692,7 @@
ng_pptpgre_stop_recv_ack_timer(node);
if (priv->recvAck != priv->xmitSeq)
ng_pptpgre_start_recv_ack_timer(node);
+ }
}
badAck:
@@ -697,6 +711,8 @@
}
priv->recvSeq = seq;
+ if (priv->conf.enableDelayedAck) {
+
/* We need to acknowledge this packet; do it soon... */
if (a->sackTimerPtr == NULL) {
int maxWait;
@@ -715,6 +731,8 @@
ng_pptpgre_start_send_ack_timer(node, maxWait);
}
}
+ }
+ else ng_pptpgre_xmit(node, NULL, NULL);
/* Trim mbuf down to internal payload */
m_adj(m, iphlen + grelen);
Only in /usr/src/sys/netgraph: old
====================================================================
Всего наилучшего,
Sergey aka DS
--- GoldED+/W32 snapshot-2001.03.04
* Origin: Hету. Придумывать лень. (2:6053/1.2)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/2220400e50ab.html, оценка из 5, голосов 10
|