Lines Matching refs:session

20  * To send data in an L2TP session, userspace opens a PPPoL2TP socket and
30 * over an L2TP session:-
113 /* Private data of each session. This data lives at the end of struct
114 * l2tp_session, referenced via session->priv[].
120 struct sock __rcu *sk; /* Pointer to the session PPPoX socket */
133 /* Retrieves the pppol2tp socket associated to a session.
137 static struct sock *pppol2tp_session_get_sock(struct l2tp_session *session)
139 struct pppol2tp_session *ps = l2tp_session_priv(session);
151 /* Helpers to obtain tunnel/session contexts from sockets.
155 struct l2tp_session *session;
161 session = (struct l2tp_session *)(sk->sk_user_data);
162 if (!session) {
166 if (WARN_ON(session->magic != L2TP_SESSION_MAGIC)) {
167 session = NULL;
173 return session;
212 static void pppol2tp_recv(struct l2tp_session *session, struct sk_buff *skb, int data_len)
214 struct pppol2tp_session *ps = l2tp_session_priv(session);
218 * queue it on the session socket.
243 atomic_long_inc(&session->stats.rx_errors);
253 pr_warn_ratelimited("%s: no socket in recv\n", session->name);
262 * when a user application does a sendmsg() on the session socket. L2TP and
271 struct l2tp_session *session;
279 /* Get session and tunnel contexts */
281 session = pppol2tp_sock_to_session(sk);
282 if (!session)
285 tunnel = session->tunnel;
292 uhlen + session->hdr_len +
318 l2tp_xmit_skb(session, skb);
348 struct l2tp_session *session;
355 /* Get session and tunnel contexts from the socket */
356 session = pppol2tp_sock_to_session(sk);
357 if (!session)
360 tunnel = session->tunnel;
366 session->hdr_len + /* L2TP header */
377 l2tp_xmit_skb(session, skb);
404 /* Really kill the session socket. (Called from sock_put() if
409 struct l2tp_session *session = sk->sk_user_data;
414 if (session) {
416 if (WARN_ON(session->magic != L2TP_SESSION_MAGIC))
418 l2tp_session_dec_refcount(session);
422 /* Called when the PPPoX socket (session) is closed.
427 struct l2tp_session *session;
445 session = pppol2tp_sock_to_session(sk);
446 if (session) {
449 l2tp_session_delete(session);
451 ps = l2tp_session_priv(session);
467 /* This will delete the session context via
528 struct l2tp_session *session = arg;
531 sk = pppol2tp_session_get_sock(session);
540 static void pppol2tp_session_init(struct l2tp_session *session)
544 session->recv_skb = pppol2tp_recv;
546 session->show = pppol2tp_show;
548 ps = l2tp_session_priv(session);
719 struct l2tp_session *session = NULL;
756 session = l2tp_tunnel_get_session(tunnel, info.session_id);
757 if (session) {
760 if (session->pwtype != L2TP_PWTYPE_PPP) {
765 ps = l2tp_session_priv(session);
767 /* Using a pre-existing session is fine as long as it hasn't
781 session = l2tp_session_create(sizeof(struct pppol2tp_session),
784 if (IS_ERR(session)) {
785 error = PTR_ERR(session);
789 pppol2tp_session_init(session);
790 ps = l2tp_session_priv(session);
791 l2tp_session_inc_refcount(session);
794 error = l2tp_session_register(session, tunnel);
797 kfree(session);
809 if (session->session_id == 0 && session->peer_session_id == 0) {
831 /* This is how we get the session context from the socket. */
832 sk->sk_user_data = session;
836 /* Keep the reference we've grabbed on the session: sk doesn't expect
837 * the session to disappear. pppol2tp_session_destruct() is responsible
847 l2tp_session_delete(session);
852 l2tp_session_dec_refcount(session);
867 struct l2tp_session *session;
875 /* Allocate and initialize a new session context. */
876 session = l2tp_session_create(sizeof(struct pppol2tp_session),
879 if (IS_ERR(session)) {
880 error = PTR_ERR(session);
884 pppol2tp_session_init(session);
886 error = l2tp_session_register(session, tunnel);
893 kfree(session);
907 struct l2tp_session *session;
920 session = pppol2tp_sock_to_session(sk);
921 if (!session)
924 pls = l2tp_session_priv(session);
925 tunnel = session->tunnel;
939 sp.pppol2tp.s_session = session->session_id;
940 sp.pppol2tp.d_session = session->peer_session_id;
957 sp.pppol2tp.s_session = session->session_id;
958 sp.pppol2tp.d_session = session->peer_session_id;
975 sp.pppol2tp.s_session = session->session_id;
976 sp.pppol2tp.d_session = session->peer_session_id;
994 sp.pppol2tp.s_session = session->session_id;
995 sp.pppol2tp.d_session = session->peer_session_id;
1038 struct l2tp_session *session;
1045 /* If session_id is set, search the corresponding session in the
1046 * context of this tunnel and record the session's statistics.
1048 session = l2tp_tunnel_get_session(tunnel, stats->session_id);
1049 if (!session)
1052 if (session->pwtype != L2TP_PWTYPE_PPP) {
1053 l2tp_session_dec_refcount(session);
1057 pppol2tp_copy_stats(stats, &session->stats);
1058 l2tp_session_dec_refcount(session);
1067 struct l2tp_session *session;
1072 session = sock->sk->sk_user_data;
1073 if (!session)
1076 if (WARN_ON(session->magic != L2TP_SESSION_MAGIC))
1080 if (!session->session_id && !session->peer_session_id)
1089 session = sock->sk->sk_user_data;
1090 if (!session)
1093 if (WARN_ON(session->magic != L2TP_SESSION_MAGIC))
1097 if (!session->session_id && !session->peer_session_id)
1105 session = sock->sk->sk_user_data;
1106 if (!session)
1109 if (WARN_ON(session->magic != L2TP_SESSION_MAGIC))
1113 if (!session->session_id && !session->peer_session_id) {
1123 session->tunnel);
1129 pppol2tp_copy_stats(&stats, &session->stats);
1130 stats.session_id = session->session_id;
1132 stats.tunnel_id = session->tunnel->tunnel_id;
1133 stats.using_ipsec = l2tp_tunnel_uses_xfrm(session->tunnel);
1180 struct l2tp_session *session,
1191 session->recv_seq = !!val;
1199 session->send_seq = !!val;
1206 l2tp_session_set_header_len(session, session->tunnel->version);
1214 session->lns_mode = !!val;
1222 session->reorder_timeout = msecs_to_jiffies(val);
1234 * Does API checks, then calls either the tunnel or session setsockopt
1236 * session or the special tunnel type.
1242 struct l2tp_session *session;
1260 /* Get session context from the socket */
1262 session = pppol2tp_sock_to_session(sk);
1263 if (!session)
1268 if (session->session_id == 0 && session->peer_session_id == 0) {
1269 tunnel = session->tunnel;
1272 err = pppol2tp_session_setsockopt(sk, session, optname, val);
1305 struct l2tp_session *session,
1312 *val = session->recv_seq;
1316 *val = session->send_seq;
1320 *val = session->lns_mode;
1329 *val = (int)jiffies_to_msecs(session->reorder_timeout);
1340 * Does API checks, then calls either the tunnel or session getsockopt
1341 * handler, according to whether the PPPoX socket is a for a regular session
1348 struct l2tp_session *session;
1368 /* Get the session context */
1370 session = pppol2tp_sock_to_session(sk);
1371 if (!session)
1375 if (session->session_id == 0 && session->peer_session_id == 0) {
1376 tunnel = session->tunnel;
1381 err = pppol2tp_session_getsockopt(sk, session, optname, &val);
1414 int session_idx; /* index of session within current tunnel */
1416 struct l2tp_session *session; /* NULL means get next tunnel */
1440 if (pd->session)
1441 l2tp_session_dec_refcount(pd->session);
1443 pd->session = l2tp_session_get_nth(pd->tunnel, pd->session_idx);
1446 if (!pd->session) {
1474 /* NULL tunnel and session indicates end of list */
1475 if (!pd->tunnel && !pd->session)
1498 if (pd->session) {
1499 l2tp_session_dec_refcount(pd->session);
1500 pd->session = NULL;
1528 struct l2tp_session *session = v;
1529 struct l2tp_tunnel *tunnel = session->tunnel;
1543 sk = pppol2tp_session_get_sock(session);
1546 user_data_ok = (session == sk->sk_user_data) ? 'Y' : 'N';
1553 session->name, ip, port,
1555 session->session_id,
1557 session->peer_session_id,
1560 session->recv_seq ? 'R' : '-',
1561 session->send_seq ? 'S' : '-',
1562 session->lns_mode ? "LNS" : "LAC",
1564 jiffies_to_msecs(session->reorder_timeout));
1566 session->nr, session->ns,
1567 atomic_long_read(&session->stats.tx_packets),
1568 atomic_long_read(&session->stats.tx_bytes),
1569 atomic_long_read(&session->stats.tx_errors),
1570 atomic_long_read(&session->stats.rx_packets),
1571 atomic_long_read(&session->stats.rx_bytes),
1572 atomic_long_read(&session->stats.rx_errors));
1589 seq_puts(m, "TUNNEL name, user-data-ok session-count\n");
1597 if (!pd->session)
1600 pppol2tp_seq_session_show(m, pd->session);