No buffer space available

From
Sergey Zabolotny (2:469/122.2)
To
Sergey Korolew
Date
2005-06-03T19:52:20Z
Area
RU.UNIX.BSD
 Hello *Sergey.*

Friday 03 June 2005 11:52, Sergey Korolew wrote to Sergey Zabolotny:

 SK>>> pptp ? Это нормально. Апгрейдиться до 4.11 и set pptp disable
 SK>>> windowing после пересборки mpd. Да, для полного эффекта
 SK>>> апгрейдить надо обе стороны.
 SZ>> этот вариант не подходит.
 SK> Напрасно.
желание проапгрейдить полностью всю систему есть, но если что-то пойдет не так начальство мне порвет одно место на немецкий крест т.к. эта машинка работает в качестве шлюза в интернет для целого предприятия. поэтому не очень хочется рисковать. тем более, что я никогда не делал апгрейд всей системы.

 SK> А на кой тебе вообще mpd ? Если надо туннель то подними gif
 SK> или gre. Надо шифрацию - ipsec. pptp тут, пожалуй, худшее решение.
ситуация такая: есть локальная сеть, имеющая выход в интернет. в этой локальной сети живет мой компьютер. локалка за натом. держатель этого шлюза продает мне внутрегородской траффик. во внутрегородской сети есть сервер-шлюз, через который в интернет выходят пользователи предприятия о котором я говорил выше. мне нужен туннель от моего домашнего компа в локалке до сервера на предприятии, чтоб через него тянуть весь остальной интернет, который не входит во внутрегородской.

 SK>>> Ну или притащи и пересобери только ng_pptpgre с mpd.
 SZ>> здесь можно поподробней?
 SK> Приносишь sys/netgraph/ng_pptpgre.c и .h от четвертой версии (только
 SK> вот не помню, вносились ли там такие изменения, что оно потом не
 SK> соберется), идешь в sys/modules/netgraph/pptpgre и собираешь. Потом
 SK> mpd. Ну и pptp disable windowing.

 SK> Если не соберется - пиши, пороюсь в закромах и вытащу патч.
патчи вроде нашел, не уверен только, что это нужные патчи. вот они:


==========================================================================

-+- ng_pptpgre.c.orig   Sat Nov 22 16:28:16 2003
+++ ng_pptpgre.c        Fri Aug  6 13:04:45 2004
@@ -486,12 +486,15 @@
        /* Check if there's data */
        if (m != NULL) {

-               /* Is our transmit window full? */
-               if ((u_int32_t)PPTP_SEQ_DIFF(priv->xmitSeq, priv->recvAck)
-                     >= a->xmitWin) {
-                       priv->stats.xmitDrops++;
-                       NG_FREE_DATA(m, meta);
-                       return (ENOBUFS);
+               /* Check if windowing is enabled */
+               if (priv->conf.enableWindowing) {
+                       /* Is our transmit window full? */
+                       if ((u_int32_t)PPTP_SEQ_DIFF(priv->xmitSeq,
+                           priv->recvAck) >= a->xmitWin) {
+                               priv->stats.xmitDrops++;
+                               NG_FREE_DATA(m, meta);
+                               return (ENOBUFS);
+                       }
                }

                /* Sanity check frame length */
@@ -511,8 +514,10 @@
        /* Include sequence number if packet contains any data */
        if (m != NULL) {
                gre->hasSeq = 1;
-               a->timeSent[priv->xmitSeq - priv->recvAck]
-                   = ng_pptpgre_time(node);
+               if (priv->conf.enableWindowing) {
+                       a->timeSent[priv->xmitSeq - priv->recvAck]
+                           = ng_pptpgre_time(node);
+               }
                priv->xmitSeq++;
                gre->data[0] = htonl(priv->xmitSeq);
        }
@@ -652,33 +657,36 @@
                priv->recvAck = ack;

                /* Update adaptive timeout stuff */
-               sample = ng_pptpgre_time(node) - a->timeSent[index];
-               diff = sample - a->rtt;
-               a->rtt += PPTP_ACK_ALPHA(diff);
-               if (diff < 0)
-                       diff = -diff;
-               a->dev += PPTP_ACK_BETA(diff - a->dev);
-               a->ato = a->rtt + PPTP_ACK_CHI(a->dev);
-               if (a->ato > PPTP_MAX_TIMEOUT)
-                       a->ato = PPTP_MAX_TIMEOUT;
-               if (a->ato < PPTP_MIN_TIMEOUT)
-                       a->ato = PPTP_MIN_TIMEOUT;
-
-               /* Shift packet transmit times in our transmit window */
-               ovbcopy(a->timeSent + index + 1, a->timeSent,
-                   sizeof(*a->timeSent) * (PPTP_XMIT_WIN - (index + 1)));
-
-               /* If we sent an entire window, increase window size by one */
-               if (PPTP_SEQ_DIFF(ack, a->winAck) >= 0
-                   && a->xmitWin < PPTP_XMIT_WIN) {
-                       a->xmitWin++;
-                       a->winAck = ack + a->xmitWin;
-               }
-
-               /* Stop/(re)start receive ACK timer as necessary */
-               ng_pptpgre_stop_recv_ack_timer(node);
-               if (priv->recvAck != priv->xmitSeq)
-                       ng_pptpgre_start_recv_ack_timer(node);
+               if (priv->conf.enableWindowing) {
+                       sample = ng_pptpgre_time(node) - a->timeSent[index];
+                       diff = sample - a->rtt;
+                       a->rtt += PPTP_ACK_ALPHA(diff);
+                       if (diff < 0)
+                               diff = -diff;
+                       a->dev += PPTP_ACK_BETA(diff - a->dev);
+                       a->ato = a->rtt + PPTP_ACK_CHI(a->dev);
+                       if (a->ato > PPTP_MAX_TIMEOUT)
+                               a->ato = PPTP_MAX_TIMEOUT;
+                       if (a->ato < PPTP_MIN_TIMEOUT)
+                               a->ato = PPTP_MIN_TIMEOUT;
+
+                       /* Shift packet transmit times in our transmit window */
+                       ovbcopy(a->timeSent + index + 1, a->timeSent,
+                           sizeof(*a->timeSent)
+                             * (PPTP_XMIT_WIN - (index + 1)));
+
+                       /* If we sent an entire window, increase window size */
+                       if (PPTP_SEQ_DIFF(ack, a->winAck) >= 0
+                           && a->xmitWin < PPTP_XMIT_WIN) {
+                               a->xmitWin++;
+                               a->winAck = ack + a->xmitWin;
+                       }
+
+                       /* Stop/(re)start receive ACK timer as necessary */
+                       ng_pptpgre_stop_recv_ack_timer(node);
+                       if (priv->recvAck != priv->xmitSeq)
+                               ng_pptpgre_start_recv_ack_timer(node);
+               }
        }
 badAck:

@@ -747,6 +755,9 @@
        struct ng_pptpgre_ackp *const a = &priv->ackp;
        int remain, ticks;

+       if (!priv->conf.enableWindowing)
+               return;
+
        /* Compute how long until oldest unack'd packet times out,
           and reset the timer to that time. */
        KASSERT(a->rackTimerPtr == NULL, ("%s: rackTimer", __FUNCTION__));
@@ -782,6 +793,9 @@
 {
        const priv_p priv = node->private;
        struct ng_pptpgre_ackp *const a = &priv->ackp;
+
+       if (!priv->conf.enableWindowing)
+               return;

        if (callout_stop(&a->rackTimer)) {
                FREE(a->rackTimerPtr, M_NETGRAPH);


==========================================================================


-+- ng_pptpgre.h.orig   Wed Jul  3 01:44:03 2002
+++ ng_pptpgre.h        Fri Aug  6 13:05:28 2004
@@ -45,7 +45,7 @@

 /* Node type name and magic cookie */
 #define NG_PPTPGRE_NODE_TYPE   "pptpgre"
-#define NGM_PPTPGRE_COOKIE     942783547
+#define NGM_PPTPGRE_COOKIE     1082548365

 /* Hook names */
 #define NG_PPTPGRE_HOOK_UPPER  "upper"         /* to upper layers */
@@ -56,6 +56,7 @@
        u_char          enabled;        /* enables traffic flow */
        u_char          enableDelayedAck;/* enables delayed acks */
        u_char          enableAlwaysAck;/* always include ack with data */
+       u_char          enableWindowing;/* enable windowing algorithm */
        u_int16_t       cid;            /* my call id */
        u_int16_t       peerCid;        /* peer call id */
        u_int16_t       recvWin;        /* peer recv window size */
@@ -68,6 +69,7 @@
          { "enabled",          &ng_parse_uint8_type    },      \
          { "enableDelayedAck", &ng_parse_uint8_type    },      \
          { "enableAlwaysAck",  &ng_parse_uint8_type    },      \
+         { "enableWindowing",  &ng_parse_uint8_type    },      \
          { "cid",              &ng_parse_hint16_type   },      \
          { "peerCid",          &ng_parse_hint16_type   },      \
          { "recvWin",          &ng_parse_uint16_type   },      \


==========================================================================
пропатчил так как ты посоветовал.

пересобрал pptpgre и mpd. теперь отказывается подключаться вообще. в логах сервера следующее:

Jun  3 19:11:12 Zombie mpd: mpd: pid 2502, version 3.17 (root@Zombie.test 19:59  2-Jun-2005)
Jun  3 19:11:12 Zombie mpd: [pptp0] ppp node is "mpd2502-pptp0"
Jun  3 19:11:12 Zombie mpd: [pptp0] using interface ng0
>Jun  3 19:11:12 Zombie mpd: mpd: option "windowing" unknown
Jun  3 19:11:12 Zombie mpd: mpd: local IP address for PPTP is xxx.xx.xxx.xx
Jun  3 19:11:40 Zombie mpd: mpd: PPTP connection from yyy.yy.yyy.yyy:1811
Jun  3 19:11:40 Zombie mpd: pptp0: attached to connection with yyy.yy.yyy.yyy:1811
Jun  3 19:11:40 Zombie mpd: [pptp0] IFACE: Open event
Jun  3 19:11:40 Zombie mpd: [pptp0] IPCP: Open event
Jun  3 19:11:40 Zombie mpd: [pptp0] IPCP: state change Initial --> Starting
Jun  3 19:11:40 Zombie mpd: [pptp0] IPCP: LayerStart
Jun  3 19:11:40 Zombie mpd: [pptp0] IPCP: Open event
Jun  3 19:11:40 Zombie mpd: [pptp0] bundle: OPEN event in state CLOSED
Jun  3 19:11:40 Zombie mpd: [pptp0] opening link "pptp0"...
Jun  3 19:11:40 Zombie mpd: [pptp0] link: OPEN event
Jun  3 19:11:40 Zombie mpd: [pptp0] LCP: Open event
Jun  3 19:11:40 Zombie mpd: [pptp0] LCP: state change Initial --> Starting
Jun  3 19:11:40 Zombie mpd: [pptp0] LCP: LayerStart
Jun  3 19:11:40 Zombie mpd: [pptp0] device: OPEN event in state DOWN
Jun  3 19:11:40 Zombie mpd: [pptp0] attaching to peer's outgoing call
>Jun  3 19:11:40 Zombie mpd: [pptp0] can't config pptpgre node: Invalid
>argument
Jun  3 19:11:40 Zombie mpd: pptp0-0: killing channel
Jun  3 19:11:40 Zombie mpd: [pptp0] PPTP call cancelled in state CONNECTING
Jun  3 19:11:40 Zombie mpd: pptp0: closing connection with yyy.yy.yyy.yyy:1811
Jun  3 19:11:40 Zombie mpd: [pptp0] IFACE: Close event
Jun  3 19:11:40 Zombie mpd: [pptp0] IPCP: Close event
Jun  3 19:11:40 Zombie mpd: [pptp0] IPCP: state change Starting --> Initial
Jun  3 19:11:40 Zombie mpd: [pptp0] IPCP: LayerFinish
Jun  3 19:11:40 Zombie mpd: [pptp0] device is now in state OPENING
Jun  3 19:11:40 Zombie mpd: [pptp0] bundle: CLOSE event in state OPENED
Jun  3 19:11:40 Zombie mpd: [pptp0] closing link "pptp0"...
Jun  3 19:11:40 Zombie mpd: [pptp0] device: DOWN event in state OPENING
Jun  3 19:11:40 Zombie mpd: [pptp0] device is now in state DOWN
Jun  3 19:11:40 Zombie mpd: [pptp0] link: CLOSE event
Jun  3 19:11:40 Zombie mpd: [pptp0] LCP: Close event
Jun  3 19:11:40 Zombie mpd: [pptp0] LCP: state change Starting --> Initial
Jun  3 19:11:40 Zombie mpd: [pptp0] LCP: LayerFinish
Jun  3 19:11:40 Zombie mpd: [pptp0] device: DOWN event in state DOWN
Jun  3 19:11:40 Zombie mpd: [pptp0] device is now in state DOWN
Jun  3 19:11:40 Zombie mpd: [pptp0] link: DOWN event
Jun  3 19:11:40 Zombie mpd: [pptp0] LCP: Down event
Jun  3 19:11:40 Zombie mpd: [pptp0] device: CLOSE event in state DOWN
Jun  3 19:11:40 Zombie mpd: [pptp0] device is now in state DOWN
Jun  3 19:11:40 Zombie mpd: [pptp0] link: DOWN event
Jun  3 19:11:40 Zombie mpd: [pptp0] LCP: Down event
Jun  3 19:11:40 Zombie mpd: [pptp0] device: OPEN event in state DOWN
Jun  3 19:11:40 Zombie mpd: [pptp0] pausing 9 seconds before open
Jun  3 19:11:40 Zombie mpd: [pptp0] device is now in state DOWN
Jun  3 19:11:40 Zombie mpd: pptp0: killing connection with yyy.yy.yyy.yyy:1811
Jun  3 19:11:49 Zombie mpd: [pptp0] device: OPEN event in state DOWN
Jun  3 19:11:49 Zombie mpd: [pptp0] pptp originate option is not enabled
Jun  3 19:11:49 Zombie mpd: [pptp0] device is now in state OPENING
Jun  3 19:11:49 Zombie mpd: [pptp0] device: DOWN event in state OPENING
Jun  3 19:11:49 Zombie mpd: [pptp0] device is now in state DOWN
Jun  3 19:11:49 Zombie mpd: [pptp0] link: DOWN event
Jun  3 19:11:49 Zombie mpd: [pptp0] LCP: Down event

настораживает выделенное. не пойму, что я не правильно сделал?


--- GoldED+ 1.1.5-031023 (WinNT 5.1.2600-Service_Pack_2 i686)
 * Origin: [icq:122018120] [mailto:zabolotny[at]hotbox.ru] (2:469/122.2)
SEEN-BY: 46/50 50/203 421 292/100 400/814 450/186 208 247 1024 451/30 452/25
SEEN-BY: 454/69 460/15 112 461/33 74 106 640 462/30 464/34 84 562 465/62 204
SEEN-BY: 467/24 469/1 122 125 138 142 200 305 473 478/44 550/196 5068 2432/200
SEEN-BY: 4600/126 4614/9 4623/56 178 4625/9 4626/100 4632/10 4635/4 11 83 99
SEEN-BY: 4635/1024 4641/444 4643/10 4652/15 4657/50 5000/197 5000 5001/50
SEEN-BY: 5002/76 5002 5003/34 5004/57 5010/146 5011/13 5015/4 10 28 214
SEEN-BY: 5019/31 5020/18 52 104 115 128 150 154 175 313 321 400 434 486 508
SEEN-BY: 5020/545 549 600 642 715 755 758 794 830 921 937 958 968 982 1100
SEEN-BY: 5020/1169 1212 1234 1523 1604 1626 1630 1642 1826 1930 2020 2047 2060
SEEN-BY: 5020/2140 2142 2174 2200 2238 2345 2450 2587 2590 2871 4400 4441
SEEN-BY: 5021/2 3 11 29 44 5022/5 128 5023/11 5024/1 73 5025/3 750 5026/49 78
SEEN-BY: 5027/16 5029/32 5030/49 69 115 195 382 436 473 500 556 611 920 966
SEEN-BY: 5030/1016 1039 1063 1520 1688 1900 5031/7 47 63 70 72 5032/11 5033/21
SEEN-BY: 5033/35 5034/8 5035/38 63 5036/13 34 5037/21 5040/33 47 5041/4
SEEN-BY: 5042/13 21 5045/7 5047/47 5049/50 97 157 5050/9 41 5051/35 5053/16
SEEN-BY: 5054/1 4 8 9 28 35 36 37 50 63 66 67 70 75 81 84 85 5055/95 5056/16
SEEN-BY: 5058/77 5059/9 20 5060/90 5061/26 120 5062/1 10 5063/3 51 5064/1 35
SEEN-BY: 5065/777 5067/2 5069/7 5070/26 66 1222 5071/22 155 5075/37 5077/51 70
SEEN-BY: 5079/23 49 5080/80 1003 5082/6 5083/13 21 5085/13 5090/23 108 5093/4
SEEN-BY: 5093/33 5094/4 5095/20 5096/18 5100/113 6000/12 254 6001/10 6023/1
SEEN-BY: 6033/2727 6045/7
PATH: 469/122 125 5020/52 4441 545 5054/1 37