|
Lines 37-42
Link Here
|
| 37 |
#include "ppphdlc.h" |
37 |
#include "ppphdlc.h" |
| 38 |
#include "pptpgre.h" |
38 |
#include "pptpgre.h" |
| 39 |
#include "pptpdefs.h" |
39 |
#include "pptpdefs.h" |
|
|
40 |
#include "pptpctrl.h" |
| 40 |
#include "defaults.h" |
41 |
#include "defaults.h" |
| 41 |
#include "pqueue.h" |
42 |
#include "pqueue.h" |
| 42 |
|
43 |
|
|
Lines 317-325
Link Here
|
| 317 |
/* if it is timed out... */ |
318 |
/* if it is timed out... */ |
| 318 |
if (head->seq != gre.seq_recv + 1 ) { /* wrap-around safe */ |
319 |
if (head->seq != gre.seq_recv + 1 ) { /* wrap-around safe */ |
| 319 |
stats.rx_lost += head->seq - gre.seq_recv - 1; |
320 |
stats.rx_lost += head->seq - gre.seq_recv - 1; |
| 320 |
syslog(LOG_DEBUG, "GRE: timeout waiting for %d packets", head->seq - gre.seq_recv - 1); |
321 |
if (pptpctrl_debug) |
| 321 |
} |
322 |
syslog(LOG_DEBUG, |
| 322 |
syslog(LOG_DEBUG, "GRE: accepting #%d from queue", head->seq); |
323 |
"GRE: timeout waiting for %d packets", |
|
|
324 |
head->seq - gre.seq_recv - 1); |
| 325 |
} |
| 326 |
if (pptpctrl_debug) |
| 327 |
syslog(LOG_DEBUG, "GRE: accepting #%d from queue", |
| 328 |
head->seq); |
| 323 |
gre.seq_recv = head->seq; |
329 |
gre.seq_recv = head->seq; |
| 324 |
status = callback(cl, head->packet, head->packlen); |
330 |
status = callback(cl, head->packet, head->packlen); |
| 325 |
pqueue_del(head); |
331 |
pqueue_del(head); |
|
Lines 399-414
Link Here
|
| 399 |
} |
405 |
} |
| 400 |
/* check for out-of-order sequence number */ |
406 |
/* check for out-of-order sequence number */ |
| 401 |
if (seq_greater(seq, gre.seq_recv)) { |
407 |
if (seq_greater(seq, gre.seq_recv)) { |
| 402 |
syslog(LOG_DEBUG, "GRE: accepting packet #%d", seq); |
408 |
if (pptpctrl_debug) |
|
|
409 |
syslog(LOG_DEBUG, "GRE: accepting packet #%d", |
| 410 |
seq); |
| 403 |
stats.rx_accepted++; |
411 |
stats.rx_accepted++; |
| 404 |
gre.seq_recv = seq; |
412 |
gre.seq_recv = seq; |
| 405 |
return cb(cl, buffer + ip_len + headersize, payload_len); |
413 |
return cb(cl, buffer + ip_len + headersize, payload_len); |
| 406 |
} else if (seq == gre.seq_recv) { |
414 |
} else if (seq == gre.seq_recv) { |
| 407 |
syslog(LOG_DEBUG, "GRE: discarding duplicate or old packet #%d (expecting #%d)", seq, gre.seq_recv + 1); |
415 |
if (pptpctrl_debug) |
|
|
416 |
syslog(LOG_DEBUG, |
| 417 |
"GRE: discarding duplicate or old packet #%d (expecting #%d)", |
| 418 |
seq, gre.seq_recv + 1); |
| 408 |
return 0; /* discard duplicate packets */ |
419 |
return 0; /* discard duplicate packets */ |
| 409 |
} else { |
420 |
} else { |
| 410 |
stats.rx_buffered++; |
421 |
stats.rx_buffered++; |
| 411 |
syslog(LOG_DEBUG, "GRE: buffering packet #%d (expecting #%d, lost or reordered)", seq, gre.seq_recv + 1); |
422 |
if (pptpctrl_debug) |
|
|
423 |
syslog(LOG_DEBUG, |
| 424 |
"GRE: buffering packet #%d (expecting #%d, lost or reordered)", |
| 425 |
seq, gre.seq_recv + 1); |
| 412 |
pqueue_add(seq, buffer + ip_len + headersize, payload_len); |
426 |
pqueue_add(seq, buffer + ip_len + headersize, payload_len); |
| 413 |
return 0; /* discard out-of-order packets */ |
427 |
return 0; /* discard out-of-order packets */ |
| 414 |
} |
428 |
} |