Lines Matching full:tunnel

27  * zero, the socket is treated as a special tunnel management socket.
151 /* Helpers to obtain tunnel/session contexts from sockets.
272 struct l2tp_tunnel *tunnel; in pppol2tp_sendmsg() local
279 /* Get session and tunnel contexts */ in pppol2tp_sendmsg()
285 tunnel = session->tunnel; in pppol2tp_sendmsg()
287 uhlen = (tunnel->encap == L2TP_ENCAPTYPE_UDP) ? sizeof(struct udphdr) : 0; in pppol2tp_sendmsg()
349 struct l2tp_tunnel *tunnel; in pppol2tp_xmit() local
355 /* Get session and tunnel contexts from the socket */ in pppol2tp_xmit()
360 tunnel = session->tunnel; in pppol2tp_xmit()
362 uhlen = (tunnel->encap == L2TP_ENCAPTYPE_UDP) ? sizeof(struct udphdr) : 0; in pppol2tp_xmit()
393 * Session (and tunnel control) socket create/destroy.
637 /* Rough estimation of the maximum payload size a tunnel can transmit without
642 static int pppol2tp_tunnel_mtu(const struct l2tp_tunnel *tunnel) in pppol2tp_tunnel_mtu() argument
646 mtu = l2tp_tunnel_dst_mtu(tunnel); in pppol2tp_tunnel_mtu()
653 /* connect() handler. Attach a PPPoX socket to a tunnel UDP socket
662 struct l2tp_tunnel *tunnel; in pppol2tp_connect() local
692 tunnel = l2tp_tunnel_get(sock_net(sk), info.tunnel_id); in pppol2tp_connect()
693 if (tunnel) in pppol2tp_connect()
696 /* Special case: create tunnel context if session_id and in pppol2tp_connect()
697 * peer_session_id is 0. Otherwise look up tunnel using supplied in pppol2tp_connect()
698 * tunnel id. in pppol2tp_connect()
701 if (!tunnel) { in pppol2tp_connect()
718 &tunnel); in pppol2tp_connect()
722 l2tp_tunnel_inc_refcount(tunnel); in pppol2tp_connect()
723 error = l2tp_tunnel_register(tunnel, sock_net(sk), in pppol2tp_connect()
726 kfree(tunnel); in pppol2tp_connect()
733 /* Error if we can't find the tunnel */ in pppol2tp_connect()
735 if (!tunnel) in pppol2tp_connect()
739 if (!tunnel->sock) in pppol2tp_connect()
743 if (tunnel->peer_tunnel_id == 0) in pppol2tp_connect()
744 tunnel->peer_tunnel_id = info.peer_tunnel_id; in pppol2tp_connect()
746 session = l2tp_tunnel_get_session(tunnel, info.session_id); in pppol2tp_connect()
772 tunnel, info.session_id, in pppol2tp_connect()
784 error = l2tp_session_register(session, tunnel); in pppol2tp_connect()
795 * socket is being created to manage the tunnel. Just set up in pppol2tp_connect()
812 po->chan.mtu = pppol2tp_tunnel_mtu(tunnel); in pppol2tp_connect()
839 l2tp_tunnel_delete(tunnel); in pppol2tp_connect()
844 l2tp_tunnel_dec_refcount(tunnel); in pppol2tp_connect()
853 static int pppol2tp_session_create(struct net *net, struct l2tp_tunnel *tunnel, in pppol2tp_session_create() argument
860 /* Error if tunnel socket is not prepped */ in pppol2tp_session_create()
861 if (!tunnel->sock) { in pppol2tp_session_create()
868 tunnel, session_id, in pppol2tp_session_create()
877 error = l2tp_session_register(session, tunnel); in pppol2tp_session_create()
899 struct l2tp_tunnel *tunnel; in pppol2tp_getname() local
916 tunnel = session->tunnel; in pppol2tp_getname()
918 inet = inet_sk(tunnel->sock); in pppol2tp_getname()
919 if (tunnel->version == 2 && tunnel->sock->sk_family == AF_INET) { in pppol2tp_getname()
926 sp.pppol2tp.fd = tunnel->fd; in pppol2tp_getname()
928 sp.pppol2tp.s_tunnel = tunnel->tunnel_id; in pppol2tp_getname()
929 sp.pppol2tp.d_tunnel = tunnel->peer_tunnel_id; in pppol2tp_getname()
937 } else if (tunnel->version == 2 && tunnel->sock->sk_family == AF_INET6) { in pppol2tp_getname()
944 sp.pppol2tp.fd = tunnel->fd; in pppol2tp_getname()
946 sp.pppol2tp.s_tunnel = tunnel->tunnel_id; in pppol2tp_getname()
947 sp.pppol2tp.d_tunnel = tunnel->peer_tunnel_id; in pppol2tp_getname()
952 memcpy(&sp.pppol2tp.addr.sin6_addr, &tunnel->sock->sk_v6_daddr, in pppol2tp_getname()
953 sizeof(tunnel->sock->sk_v6_daddr)); in pppol2tp_getname()
955 } else if (tunnel->version == 3 && tunnel->sock->sk_family == AF_INET6) { in pppol2tp_getname()
962 sp.pppol2tp.fd = tunnel->fd; in pppol2tp_getname()
964 sp.pppol2tp.s_tunnel = tunnel->tunnel_id; in pppol2tp_getname()
965 sp.pppol2tp.d_tunnel = tunnel->peer_tunnel_id; in pppol2tp_getname()
970 memcpy(&sp.pppol2tp.addr.sin6_addr, &tunnel->sock->sk_v6_daddr, in pppol2tp_getname()
971 sizeof(tunnel->sock->sk_v6_daddr)); in pppol2tp_getname()
974 } else if (tunnel->version == 3) { in pppol2tp_getname()
981 sp.pppol2tp.fd = tunnel->fd; in pppol2tp_getname()
983 sp.pppol2tp.s_tunnel = tunnel->tunnel_id; in pppol2tp_getname()
984 sp.pppol2tp.d_tunnel = tunnel->peer_tunnel_id; in pppol2tp_getname()
1004 * sockets. However, in order to control kernel tunnel features, we allow
1005 * userspace to create a special "tunnel" PPPoX socket which is used for
1006 * control only. Tunnel PPPoX sockets have session_id == 0 and simply allow
1027 struct l2tp_tunnel *tunnel) in pppol2tp_tunnel_copy_stats() argument
1032 pppol2tp_copy_stats(stats, &tunnel->stats); in pppol2tp_tunnel_copy_stats()
1037 * context of this tunnel and record the session's statistics. in pppol2tp_tunnel_copy_stats()
1039 session = l2tp_tunnel_get_session(tunnel, stats->session_id); in pppol2tp_tunnel_copy_stats()
1103 /* Session 0 represents the parent tunnel */ in pppol2tp_ioctl()
1114 session->tunnel); in pppol2tp_ioctl()
1123 stats.tunnel_id = session->tunnel->tunnel_id; in pppol2tp_ioctl()
1124 stats.using_ipsec = l2tp_tunnel_uses_xfrm(session->tunnel); in pppol2tp_ioctl()
1141 * sockets. In order to control kernel tunnel features, we allow userspace to
1142 * create a special "tunnel" PPPoX socket which is used for control only.
1143 * Tunnel PPPoX sockets have session_id == 0 and simply allow the user
1147 /* Tunnel setsockopt() helper.
1150 struct l2tp_tunnel *tunnel, in pppol2tp_tunnel_setsockopt() argument
1157 /* Tunnel debug flags option is deprecated */ in pppol2tp_tunnel_setsockopt()
1197 l2tp_session_set_header_len(session, session->tunnel->version); in pppol2tp_session_setsockopt()
1225 * Does API checks, then calls either the tunnel or session setsockopt
1227 * session or the special tunnel type.
1234 struct l2tp_tunnel *tunnel; in pppol2tp_setsockopt() local
1257 /* Special case: if session_id == 0x0000, treat as operation on tunnel in pppol2tp_setsockopt()
1260 tunnel = session->tunnel; in pppol2tp_setsockopt()
1261 err = pppol2tp_tunnel_setsockopt(sk, tunnel, optname, val); in pppol2tp_setsockopt()
1271 /* Tunnel getsockopt helper. Called with sock locked.
1274 struct l2tp_tunnel *tunnel, in pppol2tp_tunnel_getsockopt() argument
1281 /* Tunnel debug flags option is deprecated */ in pppol2tp_tunnel_getsockopt()
1331 * Does API checks, then calls either the tunnel or session getsockopt
1333 * or the special tunnel type.
1340 struct l2tp_tunnel *tunnel; in pppol2tp_getsockopt() local
1365 /* Special case: if session_id == 0x0000, treat as operation on tunnel */ in pppol2tp_getsockopt()
1367 tunnel = session->tunnel; in pppol2tp_getsockopt()
1368 err = pppol2tp_tunnel_getsockopt(sk, tunnel, optname, &val); in pppol2tp_getsockopt()
1404 int tunnel_idx; /* current tunnel */
1405 int session_idx; /* index of session within current tunnel */
1406 struct l2tp_tunnel *tunnel; member
1407 struct l2tp_session *session; /* NULL means get next tunnel */
1413 if (pd->tunnel) in pppol2tp_next_tunnel()
1414 l2tp_tunnel_dec_refcount(pd->tunnel); in pppol2tp_next_tunnel()
1417 pd->tunnel = l2tp_tunnel_get_nth(net, pd->tunnel_idx); in pppol2tp_next_tunnel()
1421 if (!pd->tunnel || pd->tunnel->version == 2) in pppol2tp_next_tunnel()
1424 l2tp_tunnel_dec_refcount(pd->tunnel); in pppol2tp_next_tunnel()
1434 pd->session = l2tp_session_get_nth(pd->tunnel, pd->session_idx); in pppol2tp_next_session()
1460 if (!pd->tunnel) in pppol2tp_seq_start()
1465 /* NULL tunnel and session indicates end of list */ in pppol2tp_seq_start()
1466 if (!pd->tunnel && !pd->session) in pppol2tp_seq_start()
1493 if (pd->tunnel) { in pppol2tp_seq_stop()
1494 l2tp_tunnel_dec_refcount(pd->tunnel); in pppol2tp_seq_stop()
1495 pd->tunnel = NULL; in pppol2tp_seq_stop()
1501 struct l2tp_tunnel *tunnel = v; in pppol2tp_seq_tunnel_show() local
1504 tunnel->name, in pppol2tp_seq_tunnel_show()
1505 (tunnel == tunnel->sock->sk_user_data) ? 'Y' : 'N', in pppol2tp_seq_tunnel_show()
1506 refcount_read(&tunnel->ref_count) - 1); in pppol2tp_seq_tunnel_show()
1509 atomic_long_read(&tunnel->stats.tx_packets), in pppol2tp_seq_tunnel_show()
1510 atomic_long_read(&tunnel->stats.tx_bytes), in pppol2tp_seq_tunnel_show()
1511 atomic_long_read(&tunnel->stats.tx_errors), in pppol2tp_seq_tunnel_show()
1512 atomic_long_read(&tunnel->stats.rx_packets), in pppol2tp_seq_tunnel_show()
1513 atomic_long_read(&tunnel->stats.rx_bytes), in pppol2tp_seq_tunnel_show()
1514 atomic_long_read(&tunnel->stats.rx_errors)); in pppol2tp_seq_tunnel_show()
1520 struct l2tp_tunnel *tunnel = session->tunnel; in pppol2tp_seq_session_show() local
1527 if (tunnel->sock) { in pppol2tp_seq_session_show()
1528 struct inet_sock *inet = inet_sk(tunnel->sock); in pppol2tp_seq_session_show()
1545 tunnel->tunnel_id, in pppol2tp_seq_session_show()
1547 tunnel->peer_tunnel_id, in pppol2tp_seq_session_show()
1580 seq_puts(m, "TUNNEL name, user-data-ok session-count\n"); in pppol2tp_seq_show()
1589 pppol2tp_seq_tunnel_show(m, pd->tunnel); in pppol2tp_seq_show()