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