|
@@ -730,11 +730,9 @@ void l2tp_recv_common(struct l2tp_session *session, struct sk_buff *skb,
|
|
|
"%s: recv data ns=%u, session nr=%u\n",
|
|
|
session->name, ns, session->nr);
|
|
|
}
|
|
|
+ ptr += 4;
|
|
|
}
|
|
|
|
|
|
- /* Advance past L2-specific header, if present */
|
|
|
- ptr += session->l2specific_len;
|
|
|
-
|
|
|
if (L2TP_SKB_CB(skb)->has_seq) {
|
|
|
/* Received a packet with sequence numbers. If we're the LNS,
|
|
|
* check if we sre sending sequence numbers and if not,
|
|
@@ -1048,21 +1046,20 @@ static int l2tp_build_l2tpv3_header(struct l2tp_session *session, void *buf)
|
|
|
memcpy(bufp, &session->cookie[0], session->cookie_len);
|
|
|
bufp += session->cookie_len;
|
|
|
}
|
|
|
- if (session->l2specific_len) {
|
|
|
- if (session->l2specific_type == L2TP_L2SPECTYPE_DEFAULT) {
|
|
|
- u32 l2h = 0;
|
|
|
- if (session->send_seq) {
|
|
|
- l2h = 0x40000000 | session->ns;
|
|
|
- session->ns++;
|
|
|
- session->ns &= 0xffffff;
|
|
|
- l2tp_dbg(session, L2TP_MSG_SEQ,
|
|
|
- "%s: updated ns to %u\n",
|
|
|
- session->name, session->ns);
|
|
|
- }
|
|
|
+ if (session->l2specific_type == L2TP_L2SPECTYPE_DEFAULT) {
|
|
|
+ u32 l2h = 0;
|
|
|
|
|
|
- *((__be32 *) bufp) = htonl(l2h);
|
|
|
+ if (session->send_seq) {
|
|
|
+ l2h = 0x40000000 | session->ns;
|
|
|
+ session->ns++;
|
|
|
+ session->ns &= 0xffffff;
|
|
|
+ l2tp_dbg(session, L2TP_MSG_SEQ,
|
|
|
+ "%s: updated ns to %u\n",
|
|
|
+ session->name, session->ns);
|
|
|
}
|
|
|
- bufp += session->l2specific_len;
|
|
|
+
|
|
|
+ *((__be32 *)bufp) = htonl(l2h);
|
|
|
+ bufp += 4;
|
|
|
}
|
|
|
|
|
|
return bufp - optr;
|
|
@@ -1719,7 +1716,7 @@ int l2tp_session_delete(struct l2tp_session *session)
|
|
|
EXPORT_SYMBOL_GPL(l2tp_session_delete);
|
|
|
|
|
|
/* We come here whenever a session's send_seq, cookie_len or
|
|
|
- * l2specific_len parameters are set.
|
|
|
+ * l2specific_type parameters are set.
|
|
|
*/
|
|
|
void l2tp_session_set_header_len(struct l2tp_session *session, int version)
|
|
|
{
|
|
@@ -1728,7 +1725,8 @@ void l2tp_session_set_header_len(struct l2tp_session *session, int version)
|
|
|
if (session->send_seq)
|
|
|
session->hdr_len += 4;
|
|
|
} else {
|
|
|
- session->hdr_len = 4 + session->cookie_len + session->l2specific_len;
|
|
|
+ session->hdr_len = 4 + session->cookie_len;
|
|
|
+ session->hdr_len += l2tp_get_l2specific_len(session);
|
|
|
if (session->tunnel->encap == L2TP_ENCAPTYPE_UDP)
|
|
|
session->hdr_len += 4;
|
|
|
}
|
|
@@ -1779,7 +1777,6 @@ struct l2tp_session *l2tp_session_create(int priv_size, struct l2tp_tunnel *tunn
|
|
|
session->lns_mode = cfg->lns_mode;
|
|
|
session->reorder_timeout = cfg->reorder_timeout;
|
|
|
session->l2specific_type = cfg->l2specific_type;
|
|
|
- session->l2specific_len = cfg->l2specific_len;
|
|
|
session->cookie_len = cfg->cookie_len;
|
|
|
memcpy(&session->cookie[0], &cfg->cookie[0], cfg->cookie_len);
|
|
|
session->peer_cookie_len = cfg->peer_cookie_len;
|