Lines Matching full:session
169 static void l2tp_session_free(struct l2tp_session *session) in l2tp_session_free() argument
171 trace_free_session(session); in l2tp_session_free()
172 if (session->tunnel) in l2tp_session_free()
173 l2tp_tunnel_put(session->tunnel); in l2tp_session_free()
174 kfree_rcu(session, rcu); in l2tp_session_free()
207 void l2tp_session_put(struct l2tp_session *session) in l2tp_session_put() argument
209 if (refcount_dec_and_test(&session->ref_count)) in l2tp_session_put()
210 l2tp_session_free(session); in l2tp_session_put()
257 struct l2tp_session *session; in l2tp_v3_session_get() local
260 session = idr_find(&pn->l2tp_v3_session_idr, session_id); in l2tp_v3_session_get()
261 if (session && !hash_hashed(&session->hlist) && in l2tp_v3_session_get()
262 refcount_inc_not_zero(&session->ref_count)) { in l2tp_v3_session_get()
264 return session; in l2tp_v3_session_get()
267 /* If we get here and session is non-NULL, the session_id in l2tp_v3_session_get()
269 * find the session matching sk. in l2tp_v3_session_get()
271 if (session && sk) { in l2tp_v3_session_get()
272 unsigned long key = l2tp_v3_session_hashkey(sk, session->session_id); in l2tp_v3_session_get()
274 hash_for_each_possible_rcu(pn->l2tp_v3_session_htable, session, in l2tp_v3_session_get()
276 /* session->tunnel may be NULL if another thread is in in l2tp_v3_session_get()
279 * session to its tunnel's session_list. in l2tp_v3_session_get()
281 struct l2tp_tunnel *tunnel = READ_ONCE(session->tunnel); in l2tp_v3_session_get()
283 if (session->session_id == session_id && in l2tp_v3_session_get()
285 refcount_inc_not_zero(&session->ref_count)) { in l2tp_v3_session_get()
287 return session; in l2tp_v3_session_get()
301 struct l2tp_session *session; in l2tp_v2_session_get() local
304 session = idr_find(&pn->l2tp_v2_session_idr, session_key); in l2tp_v2_session_get()
305 if (session && refcount_inc_not_zero(&session->ref_count)) { in l2tp_v2_session_get()
307 return session; in l2tp_v2_session_get()
330 struct l2tp_session *session = NULL; in l2tp_v2_session_get_next() local
338 session = idr_get_next_ul(&pn->l2tp_v2_session_idr, key); in l2tp_v2_session_get_next()
339 if (session) { in l2tp_v2_session_get_next()
340 struct l2tp_tunnel *tunnel = READ_ONCE(session->tunnel); in l2tp_v2_session_get_next()
343 if (session->session_id == 0) { in l2tp_v2_session_get_next()
349 refcount_inc_not_zero(&session->ref_count)) { in l2tp_v2_session_get_next()
351 return session; in l2tp_v2_session_get_next()
368 struct l2tp_session *session = NULL; in l2tp_v3_session_get_next() local
372 session = idr_get_next_ul(&pn->l2tp_v3_session_idr, key); in l2tp_v3_session_get_next()
373 if (session && !hash_hashed(&session->hlist)) { in l2tp_v3_session_get_next()
374 struct l2tp_tunnel *tunnel = READ_ONCE(session->tunnel); in l2tp_v3_session_get_next()
377 refcount_inc_not_zero(&session->ref_count)) { in l2tp_v3_session_get_next()
379 return session; in l2tp_v3_session_get_next()
386 /* If we get here and session is non-NULL, the IDR entry may be one in l2tp_v3_session_get_next()
388 * session_htable for a match. There can only be one session of a given in l2tp_v3_session_get_next()
391 if (session && hash_hashed(&session->hlist)) { in l2tp_v3_session_get_next()
392 unsigned long hkey = l2tp_v3_session_hashkey(sk, session->session_id); in l2tp_v3_session_get_next()
393 u32 sid = session->session_id; in l2tp_v3_session_get_next()
395 hash_for_each_possible_rcu(pn->l2tp_v3_session_htable, session, in l2tp_v3_session_get_next()
397 struct l2tp_tunnel *tunnel = READ_ONCE(session->tunnel); in l2tp_v3_session_get_next()
399 if (session->session_id == sid && in l2tp_v3_session_get_next()
401 refcount_inc_not_zero(&session->ref_count)) { in l2tp_v3_session_get_next()
403 return session; in l2tp_v3_session_get_next()
407 /* If no match found, the colliding session ID isn't in our in l2tp_v3_session_get_next()
408 * tunnel so try the next session ID. in l2tp_v3_session_get_next()
429 /* Lookup a session by interface name.
437 struct l2tp_session *session; in l2tp_session_get_by_ifname() local
443 list_for_each_entry_rcu(session, &tunnel->session_list, list) { in l2tp_session_get_by_ifname()
444 if (strcmp(session->ifname, ifname)) in l2tp_session_get_by_ifname()
446 if (!refcount_inc_not_zero(&session->ref_count)) in l2tp_session_get_by_ifname()
450 return session; in l2tp_session_get_by_ifname()
461 struct l2tp_session *session) in l2tp_session_coll_list_add() argument
463 refcount_inc(&session->ref_count); in l2tp_session_coll_list_add()
464 WARN_ON_ONCE(session->coll_list); in l2tp_session_coll_list_add()
465 session->coll_list = clist; in l2tp_session_coll_list_add()
467 list_add(&session->clist, &clist->list); in l2tp_session_coll_list_add()
482 /* If existing session is in IP-encap tunnel, refuse new session */ in l2tp_session_collision_add()
489 * and add the existing session to the list. in l2tp_session_collision_add()
501 /* If existing session isn't already in the session hlist, add it. */ in l2tp_session_collision_add()
506 /* Add new session to the hlist and collision list */ in l2tp_session_collision_add()
516 struct l2tp_session *session) in l2tp_session_collision_del() argument
518 struct l2tp_session_coll_list *clist = session->coll_list; in l2tp_session_collision_del()
519 unsigned long session_key = session->session_id; in l2tp_session_collision_del()
524 hash_del_rcu(&session->hlist); in l2tp_session_collision_del()
527 /* Remove session from its collision list. If there in l2tp_session_collision_del()
529 * session's IDR entry with that session, otherwise in l2tp_session_collision_del()
530 * remove the IDR entry. If this is the last session, in l2tp_session_collision_del()
534 list_del_init(&session->clist); in l2tp_session_collision_del()
543 WARN_ON_ONCE(removed != session); in l2tp_session_collision_del()
545 session->coll_list = NULL; in l2tp_session_collision_del()
549 l2tp_session_put(session); in l2tp_session_collision_del()
553 int l2tp_session_register(struct l2tp_session *session, in l2tp_session_register() argument
571 session_key = session->session_id; in l2tp_session_register()
574 /* IP encap expects session IDs to be globally unique, while in l2tp_session_register()
576 * sessions are identified only by the session ID, but is to in l2tp_session_register()
582 err = l2tp_session_collision_add(pn, session, in l2tp_session_register()
587 session->session_id); in l2tp_session_register()
599 WRITE_ONCE(session->tunnel, tunnel); in l2tp_session_register()
600 list_add_rcu(&session->list, &tunnel->session_list); in l2tp_session_register()
602 /* this makes session available to lockless getters */ in l2tp_session_register()
605 old = idr_replace(&pn->l2tp_v3_session_idr, session, session_key); in l2tp_session_register()
607 old = idr_replace(&pn->l2tp_v2_session_idr, session, session_key); in l2tp_session_register()
620 trace_register_session(session); in l2tp_session_register()
633 static void l2tp_recv_queue_skb(struct l2tp_session *session, struct sk_buff *skb) in l2tp_recv_queue_skb() argument
639 spin_lock_bh(&session->reorder_q.lock); in l2tp_recv_queue_skb()
640 skb_queue_walk_safe(&session->reorder_q, skbp, tmp) { in l2tp_recv_queue_skb()
642 __skb_queue_before(&session->reorder_q, skbp, skb); in l2tp_recv_queue_skb()
643 atomic_long_inc(&session->stats.rx_oos_packets); in l2tp_recv_queue_skb()
648 __skb_queue_tail(&session->reorder_q, skb); in l2tp_recv_queue_skb()
651 spin_unlock_bh(&session->reorder_q.lock); in l2tp_recv_queue_skb()
656 static void l2tp_recv_dequeue_skb(struct l2tp_session *session, struct sk_buff *skb) in l2tp_recv_dequeue_skb() argument
658 struct l2tp_tunnel *tunnel = session->tunnel; in l2tp_recv_dequeue_skb()
668 atomic_long_inc(&session->stats.rx_packets); in l2tp_recv_dequeue_skb()
669 atomic_long_add(length, &session->stats.rx_bytes); in l2tp_recv_dequeue_skb()
673 session->nr++; in l2tp_recv_dequeue_skb()
674 session->nr &= session->nr_max; in l2tp_recv_dequeue_skb()
675 trace_session_seqnum_update(session); in l2tp_recv_dequeue_skb()
679 if (session->recv_skb) in l2tp_recv_dequeue_skb()
680 (*session->recv_skb)(session, skb, L2TP_SKB_CB(skb)->length); in l2tp_recv_dequeue_skb()
685 /* Dequeue skbs from the session's reorder_q, subject to packet order.
688 static void l2tp_recv_dequeue(struct l2tp_session *session) in l2tp_recv_dequeue() argument
698 spin_lock_bh(&session->reorder_q.lock); in l2tp_recv_dequeue()
699 skb_queue_walk_safe(&session->reorder_q, skb, tmp) { in l2tp_recv_dequeue()
704 atomic_long_inc(&session->stats.rx_seq_discards); in l2tp_recv_dequeue()
705 atomic_long_inc(&session->stats.rx_errors); in l2tp_recv_dequeue()
706 trace_session_pkt_expired(session, cb->ns); in l2tp_recv_dequeue()
707 session->reorder_skip = 1; in l2tp_recv_dequeue()
708 __skb_unlink(skb, &session->reorder_q); in l2tp_recv_dequeue()
714 if (session->reorder_skip) { in l2tp_recv_dequeue()
715 session->reorder_skip = 0; in l2tp_recv_dequeue()
716 session->nr = cb->ns; in l2tp_recv_dequeue()
717 trace_session_seqnum_reset(session); in l2tp_recv_dequeue()
719 if (cb->ns != session->nr) in l2tp_recv_dequeue()
722 __skb_unlink(skb, &session->reorder_q); in l2tp_recv_dequeue()
727 spin_unlock_bh(&session->reorder_q.lock); in l2tp_recv_dequeue()
728 l2tp_recv_dequeue_skb(session, skb); in l2tp_recv_dequeue()
733 spin_unlock_bh(&session->reorder_q.lock); in l2tp_recv_dequeue()
736 static int l2tp_seq_check_rx_window(struct l2tp_session *session, u32 nr) in l2tp_seq_check_rx_window() argument
740 if (nr >= session->nr) in l2tp_seq_check_rx_window()
741 nws = nr - session->nr; in l2tp_seq_check_rx_window()
743 nws = (session->nr_max + 1) - (session->nr - nr); in l2tp_seq_check_rx_window()
745 return nws < session->nr_window_size; in l2tp_seq_check_rx_window()
751 static int l2tp_recv_data_seq(struct l2tp_session *session, struct sk_buff *skb) in l2tp_recv_data_seq() argument
755 if (!l2tp_seq_check_rx_window(session, cb->ns)) { in l2tp_recv_data_seq()
759 trace_session_pkt_outside_rx_window(session, cb->ns); in l2tp_recv_data_seq()
763 if (session->reorder_timeout != 0) { in l2tp_recv_data_seq()
764 /* Packet reordering enabled. Add skb to session's in l2tp_recv_data_seq()
767 l2tp_recv_queue_skb(session, skb); in l2tp_recv_data_seq()
776 if (cb->ns == session->nr) { in l2tp_recv_data_seq()
777 skb_queue_tail(&session->reorder_q, skb); in l2tp_recv_data_seq()
780 u32 nr_next = (session->nr_oos + 1) & session->nr_max; in l2tp_recv_data_seq()
783 session->nr_oos_count++; in l2tp_recv_data_seq()
785 session->nr_oos_count = 0; in l2tp_recv_data_seq()
787 session->nr_oos = nr_oos; in l2tp_recv_data_seq()
788 if (session->nr_oos_count > session->nr_oos_count_max) { in l2tp_recv_data_seq()
789 session->reorder_skip = 1; in l2tp_recv_data_seq()
791 if (!session->reorder_skip) { in l2tp_recv_data_seq()
792 atomic_long_inc(&session->stats.rx_seq_discards); in l2tp_recv_data_seq()
793 trace_session_pkt_oos(session, cb->ns); in l2tp_recv_data_seq()
796 skb_queue_tail(&session->reorder_q, skb); in l2tp_recv_data_seq()
816 * | Tunnel ID | Session ID |
829 * | L2TP Session Header |
836 * L2TPv3 Session Header Over IP
841 * | Session ID |
857 * the session is set up. Unlike L2TPv2, we do not need to parse the
862 * session-id have already been parsed and ptr points to the data
863 * after the session-id.
865 void l2tp_recv_common(struct l2tp_session *session, struct sk_buff *skb, in l2tp_recv_common() argument
869 struct l2tp_tunnel *tunnel = session->tunnel; in l2tp_recv_common()
873 if (session->peer_cookie_len > 0) { in l2tp_recv_common()
874 if (memcmp(ptr, &session->peer_cookie[0], session->peer_cookie_len)) { in l2tp_recv_common()
877 session->session_id); in l2tp_recv_common()
878 atomic_long_inc(&session->stats.rx_cookie_discards); in l2tp_recv_common()
881 ptr += session->peer_cookie_len; in l2tp_recv_common()
902 } else if (session->l2specific_type == L2TP_L2SPECTYPE_DEFAULT) { in l2tp_recv_common()
918 if (!session->lns_mode && !session->send_seq) { in l2tp_recv_common()
919 trace_session_seqnum_lns_enable(session); in l2tp_recv_common()
920 session->send_seq = 1; in l2tp_recv_common()
921 l2tp_session_set_header_len(session, tunnel->version, in l2tp_recv_common()
928 if (session->recv_seq) { in l2tp_recv_common()
930 session->name); in l2tp_recv_common()
931 atomic_long_inc(&session->stats.rx_seq_discards); in l2tp_recv_common()
940 if (!session->lns_mode && session->send_seq) { in l2tp_recv_common()
941 trace_session_seqnum_lns_disable(session); in l2tp_recv_common()
942 session->send_seq = 0; in l2tp_recv_common()
943 l2tp_session_set_header_len(session, tunnel->version, in l2tp_recv_common()
945 } else if (session->send_seq) { in l2tp_recv_common()
947 session->name); in l2tp_recv_common()
948 atomic_long_inc(&session->stats.rx_seq_discards); in l2tp_recv_common()
953 /* Session data offset is defined only for L2TPv2 and is in l2tp_recv_common()
970 /* Prepare skb for adding to the session's reorder_q. Hold in l2tp_recv_common()
976 (session->reorder_timeout ? session->reorder_timeout : HZ); in l2tp_recv_common()
978 /* Add packet to the session's receive queue. Reordering is done here, if in l2tp_recv_common()
982 if (l2tp_recv_data_seq(session, skb)) in l2tp_recv_common()
989 skb_queue_tail(&session->reorder_q, skb); in l2tp_recv_common()
993 l2tp_recv_dequeue(session); in l2tp_recv_common()
998 atomic_long_inc(&session->stats.rx_errors); in l2tp_recv_common()
1003 /* Drop skbs from the session's reorder_q
1005 static void l2tp_session_queue_purge(struct l2tp_session *session) in l2tp_session_queue_purge() argument
1009 while ((skb = skb_dequeue(&session->reorder_q))) { in l2tp_session_queue_purge()
1010 atomic_long_inc(&session->stats.rx_errors); in l2tp_session_queue_purge()
1018 struct l2tp_session *session = NULL; in l2tp_udp_encap_recv() local
1062 /* Extract tunnel and session ID */ in l2tp_udp_encap_recv()
1068 session = l2tp_v2_session_get(net, tunnel_id, session_id); in l2tp_udp_encap_recv()
1076 session = l2tp_v3_session_get(net, sk, session_id); in l2tp_udp_encap_recv()
1079 if (!session || !session->recv_skb) { in l2tp_udp_encap_recv()
1080 if (session) in l2tp_udp_encap_recv()
1081 l2tp_session_put(session); in l2tp_udp_encap_recv()
1087 tunnel = session->tunnel; in l2tp_udp_encap_recv()
1091 l2tp_session_put(session); in l2tp_udp_encap_recv()
1096 l2tp_v3_ensure_opt_in_linear(session, skb, &ptr, &optr)) { in l2tp_udp_encap_recv()
1097 l2tp_session_put(session); in l2tp_udp_encap_recv()
1101 l2tp_recv_common(session, skb, ptr, optr, hdrflags, length); in l2tp_udp_encap_recv()
1102 l2tp_session_put(session); in l2tp_udp_encap_recv()
1139 /* Build an L2TP header for the session into the buffer provided.
1141 static int l2tp_build_l2tpv2_header(struct l2tp_session *session, void *buf) in l2tp_build_l2tpv2_header() argument
1143 struct l2tp_tunnel *tunnel = session->tunnel; in l2tp_build_l2tpv2_header()
1148 u32 session_id = session->peer_session_id; in l2tp_build_l2tpv2_header()
1150 if (session->send_seq) in l2tp_build_l2tpv2_header()
1157 if (session->send_seq) { in l2tp_build_l2tpv2_header()
1158 *bufp++ = htons(session->ns); in l2tp_build_l2tpv2_header()
1160 session->ns++; in l2tp_build_l2tpv2_header()
1161 session->ns &= 0xffff; in l2tp_build_l2tpv2_header()
1162 trace_session_seqnum_update(session); in l2tp_build_l2tpv2_header()
1168 static int l2tp_build_l2tpv3_header(struct l2tp_session *session, void *buf) in l2tp_build_l2tpv3_header() argument
1170 struct l2tp_tunnel *tunnel = session->tunnel; in l2tp_build_l2tpv3_header()
1185 *((__be32 *)bufp) = htonl(session->peer_session_id); in l2tp_build_l2tpv3_header()
1187 if (session->cookie_len) { in l2tp_build_l2tpv3_header()
1188 memcpy(bufp, &session->cookie[0], session->cookie_len); in l2tp_build_l2tpv3_header()
1189 bufp += session->cookie_len; in l2tp_build_l2tpv3_header()
1191 if (session->l2specific_type == L2TP_L2SPECTYPE_DEFAULT) { in l2tp_build_l2tpv3_header()
1194 if (session->send_seq) { in l2tp_build_l2tpv3_header()
1195 l2h = 0x40000000 | session->ns; in l2tp_build_l2tpv3_header()
1196 session->ns++; in l2tp_build_l2tpv3_header()
1197 session->ns &= 0xffffff; in l2tp_build_l2tpv3_header()
1198 trace_session_seqnum_update(session); in l2tp_build_l2tpv3_header()
1225 static int l2tp_xmit_core(struct l2tp_session *session, struct sk_buff *skb, unsigned int *len) in l2tp_xmit_core() argument
1227 struct l2tp_tunnel *tunnel = session->tunnel; in l2tp_xmit_core()
1240 headroom = NET_SKB_PAD + sizeof(struct iphdr) + uhlen + session->hdr_len; in l2tp_xmit_core()
1248 l2tp_build_l2tpv2_header(session, __skb_push(skb, session->hdr_len)); in l2tp_xmit_core()
1250 l2tp_build_l2tpv3_header(session, __skb_push(skb, session->hdr_len)); in l2tp_xmit_core()
1293 udp_len = uhlen + session->hdr_len + data_len; in l2tp_xmit_core()
1328 int l2tp_xmit_skb(struct l2tp_session *session, struct sk_buff *skb) in l2tp_xmit_skb() argument
1333 ret = l2tp_xmit_core(session, skb, &len); in l2tp_xmit_skb()
1335 atomic_long_inc(&session->tunnel->stats.tx_packets); in l2tp_xmit_skb()
1336 atomic_long_add(len, &session->tunnel->stats.tx_bytes); in l2tp_xmit_skb()
1337 atomic_long_inc(&session->stats.tx_packets); in l2tp_xmit_skb()
1338 atomic_long_add(len, &session->stats.tx_bytes); in l2tp_xmit_skb()
1340 atomic_long_inc(&session->tunnel->stats.tx_errors); in l2tp_xmit_skb()
1341 atomic_long_inc(&session->stats.tx_errors); in l2tp_xmit_skb()
1348 * Tinnel and session create/destroy.
1351 /* Remove an l2tp session from l2tp_core's lists. */
1352 static void l2tp_session_unhash(struct l2tp_session *session) in l2tp_session_unhash() argument
1354 struct l2tp_tunnel *tunnel = session->tunnel; in l2tp_session_unhash()
1358 struct l2tp_session *removed = session; in l2tp_session_unhash()
1364 list_del_rcu(&session->list); in l2tp_session_unhash()
1368 if (hash_hashed(&session->hlist)) in l2tp_session_unhash()
1369 l2tp_session_collision_del(pn, session); in l2tp_session_unhash()
1372 session->session_id); in l2tp_session_unhash()
1375 session->session_id); in l2tp_session_unhash()
1379 WARN_ON_ONCE(removed && removed != session); in l2tp_session_unhash()
1390 struct l2tp_session *session; in l2tp_tunnel_closeall() local
1394 list_for_each_entry(session, &tunnel->session_list, list) in l2tp_tunnel_closeall()
1395 l2tp_session_delete(session); in l2tp_tunnel_closeall()
1734 void l2tp_session_delete(struct l2tp_session *session) in l2tp_session_delete() argument
1736 if (!test_and_set_bit(0, &session->dead)) { in l2tp_session_delete()
1737 trace_delete_session(session); in l2tp_session_delete()
1738 refcount_inc(&session->ref_count); in l2tp_session_delete()
1739 queue_work(l2tp_wq, &session->del_work); in l2tp_session_delete()
1744 /* Workqueue session deletion function */
1747 struct l2tp_session *session = container_of(work, struct l2tp_session, in l2tp_session_del_work() local
1750 l2tp_session_unhash(session); in l2tp_session_del_work()
1751 l2tp_session_queue_purge(session); in l2tp_session_del_work()
1752 if (session->session_close) in l2tp_session_del_work()
1753 (*session->session_close)(session); in l2tp_session_del_work()
1756 l2tp_session_put(session); in l2tp_session_del_work()
1759 l2tp_session_put(session); in l2tp_session_del_work()
1762 /* We come here whenever a session's send_seq, cookie_len or
1765 void l2tp_session_set_header_len(struct l2tp_session *session, int version, in l2tp_session_set_header_len() argument
1769 session->hdr_len = 6; in l2tp_session_set_header_len()
1770 if (session->send_seq) in l2tp_session_set_header_len()
1771 session->hdr_len += 4; in l2tp_session_set_header_len()
1773 session->hdr_len = 4 + session->cookie_len; in l2tp_session_set_header_len()
1774 session->hdr_len += l2tp_get_l2specific_len(session); in l2tp_session_set_header_len()
1776 session->hdr_len += 4; in l2tp_session_set_header_len()
1784 struct l2tp_session *session; in l2tp_session_create() local
1786 session = kzalloc(sizeof(*session) + priv_size, GFP_KERNEL); in l2tp_session_create()
1787 if (session) { in l2tp_session_create()
1788 session->magic = L2TP_SESSION_MAGIC; in l2tp_session_create()
1790 session->session_id = session_id; in l2tp_session_create()
1791 session->peer_session_id = peer_session_id; in l2tp_session_create()
1792 session->nr = 0; in l2tp_session_create()
1794 session->nr_max = 0xffff; in l2tp_session_create()
1796 session->nr_max = 0xffffff; in l2tp_session_create()
1797 session->nr_window_size = session->nr_max / 2; in l2tp_session_create()
1798 session->nr_oos_count_max = 4; in l2tp_session_create()
1801 session->reorder_skip = 1; in l2tp_session_create()
1803 sprintf(&session->name[0], "sess %u/%u", in l2tp_session_create()
1804 tunnel->tunnel_id, session->session_id); in l2tp_session_create()
1806 skb_queue_head_init(&session->reorder_q); in l2tp_session_create()
1808 session->hlist_key = l2tp_v3_session_hashkey(tunnel->sock, session->session_id); in l2tp_session_create()
1809 INIT_HLIST_NODE(&session->hlist); in l2tp_session_create()
1810 INIT_LIST_HEAD(&session->clist); in l2tp_session_create()
1811 INIT_LIST_HEAD(&session->list); in l2tp_session_create()
1812 INIT_WORK(&session->del_work, l2tp_session_del_work); in l2tp_session_create()
1815 session->pwtype = cfg->pw_type; in l2tp_session_create()
1816 session->send_seq = cfg->send_seq; in l2tp_session_create()
1817 session->recv_seq = cfg->recv_seq; in l2tp_session_create()
1818 session->lns_mode = cfg->lns_mode; in l2tp_session_create()
1819 session->reorder_timeout = cfg->reorder_timeout; in l2tp_session_create()
1820 session->l2specific_type = cfg->l2specific_type; in l2tp_session_create()
1821 session->cookie_len = cfg->cookie_len; in l2tp_session_create()
1822 memcpy(&session->cookie[0], &cfg->cookie[0], cfg->cookie_len); in l2tp_session_create()
1823 session->peer_cookie_len = cfg->peer_cookie_len; in l2tp_session_create()
1824 memcpy(&session->peer_cookie[0], &cfg->peer_cookie[0], cfg->peer_cookie_len); in l2tp_session_create()
1827 l2tp_session_set_header_len(session, tunnel->version, tunnel->encap); in l2tp_session_create()
1829 refcount_set(&session->ref_count, 1); in l2tp_session_create()
1831 return session; in l2tp_session_create()
1874 * work item for each session in the tunnel. Flush the in l2tp_pre_exit_net()