|
@@ -829,6 +829,23 @@ discard:
|
|
|
}
|
|
|
EXPORT_SYMBOL(l2tp_recv_common);
|
|
|
|
|
|
+/* Drop skbs from the session's reorder_q
|
|
|
+ */
|
|
|
+int l2tp_session_queue_purge(struct l2tp_session *session)
|
|
|
+{
|
|
|
+ struct sk_buff *skb = NULL;
|
|
|
+ BUG_ON(!session);
|
|
|
+ BUG_ON(session->magic != L2TP_SESSION_MAGIC);
|
|
|
+ while ((skb = skb_dequeue(&session->reorder_q))) {
|
|
|
+ atomic_long_inc(&session->stats.rx_errors);
|
|
|
+ kfree_skb(skb);
|
|
|
+ if (session->deref)
|
|
|
+ (*session->deref)(session);
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL_GPL(l2tp_session_queue_purge);
|
|
|
+
|
|
|
/* Internal UDP receive frame. Do the real work of receiving an L2TP data frame
|
|
|
* here. The skb is not on a list when we get here.
|
|
|
* Returns 0 if the packet was a data packet and was successfully passed on.
|