diff options
-rw-r--r-- | net/l2tp/l2tp_core.c | 9 | ||||
-rw-r--r-- | net/l2tp/l2tp_core.h | 1 |
2 files changed, 10 insertions, 0 deletions
diff --git a/net/l2tp/l2tp_core.c b/net/l2tp/l2tp_core.c index 456b52d8f6d8..d1ab3a236cca 100644 --- a/net/l2tp/l2tp_core.c +++ b/net/l2tp/l2tp_core.c | |||
@@ -428,6 +428,7 @@ start: | |||
428 | session->name, L2TP_SKB_CB(skb)->ns, | 428 | session->name, L2TP_SKB_CB(skb)->ns, |
429 | L2TP_SKB_CB(skb)->length, session->nr, | 429 | L2TP_SKB_CB(skb)->length, session->nr, |
430 | skb_queue_len(&session->reorder_q)); | 430 | skb_queue_len(&session->reorder_q)); |
431 | session->reorder_skip = 1; | ||
431 | __skb_unlink(skb, &session->reorder_q); | 432 | __skb_unlink(skb, &session->reorder_q); |
432 | kfree_skb(skb); | 433 | kfree_skb(skb); |
433 | if (session->deref) | 434 | if (session->deref) |
@@ -436,6 +437,14 @@ start: | |||
436 | } | 437 | } |
437 | 438 | ||
438 | if (L2TP_SKB_CB(skb)->has_seq) { | 439 | if (L2TP_SKB_CB(skb)->has_seq) { |
440 | if (session->reorder_skip) { | ||
441 | PRINTK(session->debug, L2TP_MSG_SEQ, KERN_DEBUG, | ||
442 | "%s: advancing nr to next pkt: %u -> %u", | ||
443 | session->name, session->nr, | ||
444 | L2TP_SKB_CB(skb)->ns); | ||
445 | session->reorder_skip = 0; | ||
446 | session->nr = L2TP_SKB_CB(skb)->ns; | ||
447 | } | ||
439 | if (L2TP_SKB_CB(skb)->ns != session->nr) { | 448 | if (L2TP_SKB_CB(skb)->ns != session->nr) { |
440 | PRINTK(session->debug, L2TP_MSG_SEQ, KERN_DEBUG, | 449 | PRINTK(session->debug, L2TP_MSG_SEQ, KERN_DEBUG, |
441 | "%s: holding oos pkt %u len %d, " | 450 | "%s: holding oos pkt %u len %d, " |
diff --git a/net/l2tp/l2tp_core.h b/net/l2tp/l2tp_core.h index 0bf60fc88bb7..90026341a1e5 100644 --- a/net/l2tp/l2tp_core.h +++ b/net/l2tp/l2tp_core.h | |||
@@ -123,6 +123,7 @@ struct l2tp_session { | |||
123 | * categories */ | 123 | * categories */ |
124 | int reorder_timeout; /* configured reorder timeout | 124 | int reorder_timeout; /* configured reorder timeout |
125 | * (in jiffies) */ | 125 | * (in jiffies) */ |
126 | int reorder_skip; /* set if skip to next nr */ | ||
126 | int mtu; | 127 | int mtu; |
127 | int mru; | 128 | int mru; |
128 | enum l2tp_pwtype pwtype; | 129 | enum l2tp_pwtype pwtype; |