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.
273 struct l2tp_tunnel *tunnel; in pppol2tp_sendmsg() local
280 /* Get session and tunnel contexts */ in pppol2tp_sendmsg()
286 tunnel = session->tunnel; in pppol2tp_sendmsg()
288 uhlen = (tunnel->encap == L2TP_ENCAPTYPE_UDP) ? sizeof(struct udphdr) : 0; in pppol2tp_sendmsg()
350 struct l2tp_tunnel *tunnel; in pppol2tp_xmit() local
356 /* Get session and tunnel contexts from the socket */ in pppol2tp_xmit()
361 tunnel = session->tunnel; in pppol2tp_xmit()
363 uhlen = (tunnel->encap == L2TP_ENCAPTYPE_UDP) ? sizeof(struct udphdr) : 0; in pppol2tp_xmit()
394 * Session (and tunnel control) socket create/destroy.
638 /* Rough estimation of the maximum payload size a tunnel can transmit without
643 static int pppol2tp_tunnel_mtu(const struct l2tp_tunnel *tunnel) in pppol2tp_tunnel_mtu() argument
647 mtu = l2tp_tunnel_dst_mtu(tunnel); in pppol2tp_tunnel_mtu()
654 /* connect() handler. Attach a PPPoX socket to a tunnel UDP socket
663 struct l2tp_tunnel *tunnel; in pppol2tp_connect() local
693 tunnel = l2tp_tunnel_get(sock_net(sk), info.tunnel_id); in pppol2tp_connect()
694 if (tunnel) in pppol2tp_connect()
697 /* Special case: create tunnel context if session_id and in pppol2tp_connect()
698 * peer_session_id is 0. Otherwise look up tunnel using supplied in pppol2tp_connect()
699 * tunnel id. in pppol2tp_connect()
702 if (!tunnel) { in pppol2tp_connect()
719 &tunnel); in pppol2tp_connect()
723 l2tp_tunnel_inc_refcount(tunnel); in pppol2tp_connect()
724 error = l2tp_tunnel_register(tunnel, sock_net(sk), in pppol2tp_connect()
727 kfree(tunnel); in pppol2tp_connect()
734 /* Error if we can't find the tunnel */ in pppol2tp_connect()
736 if (!tunnel) in pppol2tp_connect()
740 if (!tunnel->sock) in pppol2tp_connect()
744 if (tunnel->peer_tunnel_id == 0) in pppol2tp_connect()
745 tunnel->peer_tunnel_id = info.peer_tunnel_id; in pppol2tp_connect()
747 session = l2tp_tunnel_get_session(tunnel, info.session_id); in pppol2tp_connect()
773 tunnel, info.session_id, in pppol2tp_connect()
785 error = l2tp_session_register(session, tunnel); in pppol2tp_connect()
796 * socket is being created to manage the tunnel. Just set up in pppol2tp_connect()
813 po->chan.mtu = pppol2tp_tunnel_mtu(tunnel); in pppol2tp_connect()
840 l2tp_tunnel_delete(tunnel); in pppol2tp_connect()
845 l2tp_tunnel_dec_refcount(tunnel); in pppol2tp_connect()
854 static int pppol2tp_session_create(struct net *net, struct l2tp_tunnel *tunnel, in pppol2tp_session_create() argument
861 /* Error if tunnel socket is not prepped */ in pppol2tp_session_create()
862 if (!tunnel->sock) { in pppol2tp_session_create()
869 tunnel, session_id, in pppol2tp_session_create()
878 error = l2tp_session_register(session, tunnel); in pppol2tp_session_create()
900 struct l2tp_tunnel *tunnel; in pppol2tp_getname() local
917 tunnel = session->tunnel; in pppol2tp_getname()
919 inet = inet_sk(tunnel->sock); in pppol2tp_getname()
920 if (tunnel->version == 2 && tunnel->sock->sk_family == AF_INET) { in pppol2tp_getname()
927 sp.pppol2tp.fd = tunnel->fd; in pppol2tp_getname()
929 sp.pppol2tp.s_tunnel = tunnel->tunnel_id; in pppol2tp_getname()
930 sp.pppol2tp.d_tunnel = tunnel->peer_tunnel_id; in pppol2tp_getname()
938 } else if (tunnel->version == 2 && tunnel->sock->sk_family == AF_INET6) { in pppol2tp_getname()
945 sp.pppol2tp.fd = tunnel->fd; in pppol2tp_getname()
947 sp.pppol2tp.s_tunnel = tunnel->tunnel_id; in pppol2tp_getname()
948 sp.pppol2tp.d_tunnel = tunnel->peer_tunnel_id; in pppol2tp_getname()
953 memcpy(&sp.pppol2tp.addr.sin6_addr, &tunnel->sock->sk_v6_daddr, in pppol2tp_getname()
954 sizeof(tunnel->sock->sk_v6_daddr)); in pppol2tp_getname()
956 } else if (tunnel->version == 3 && tunnel->sock->sk_family == AF_INET6) { in pppol2tp_getname()
963 sp.pppol2tp.fd = tunnel->fd; in pppol2tp_getname()
965 sp.pppol2tp.s_tunnel = tunnel->tunnel_id; in pppol2tp_getname()
966 sp.pppol2tp.d_tunnel = tunnel->peer_tunnel_id; in pppol2tp_getname()
971 memcpy(&sp.pppol2tp.addr.sin6_addr, &tunnel->sock->sk_v6_daddr, in pppol2tp_getname()
972 sizeof(tunnel->sock->sk_v6_daddr)); in pppol2tp_getname()
975 } else if (tunnel->version == 3) { in pppol2tp_getname()
982 sp.pppol2tp.fd = tunnel->fd; in pppol2tp_getname()
984 sp.pppol2tp.s_tunnel = tunnel->tunnel_id; in pppol2tp_getname()
985 sp.pppol2tp.d_tunnel = tunnel->peer_tunnel_id; in pppol2tp_getname()
1005 * sockets. However, in order to control kernel tunnel features, we allow
1006 * userspace to create a special "tunnel" PPPoX socket which is used for
1007 * control only. Tunnel PPPoX sockets have session_id == 0 and simply allow
1028 struct l2tp_tunnel *tunnel) in pppol2tp_tunnel_copy_stats() argument
1033 pppol2tp_copy_stats(stats, &tunnel->stats); in pppol2tp_tunnel_copy_stats()
1038 * context of this tunnel and record the session's statistics. in pppol2tp_tunnel_copy_stats()
1040 session = l2tp_tunnel_get_session(tunnel, stats->session_id); in pppol2tp_tunnel_copy_stats()
1104 /* Session 0 represents the parent tunnel */ in pppol2tp_ioctl()
1115 session->tunnel); in pppol2tp_ioctl()
1124 stats.tunnel_id = session->tunnel->tunnel_id; in pppol2tp_ioctl()
1125 stats.using_ipsec = l2tp_tunnel_uses_xfrm(session->tunnel); in pppol2tp_ioctl()
1142 * sockets. In order to control kernel tunnel features, we allow userspace to
1143 * create a special "tunnel" PPPoX socket which is used for control only.
1144 * Tunnel PPPoX sockets have session_id == 0 and simply allow the user
1148 /* Tunnel setsockopt() helper.
1151 struct l2tp_tunnel *tunnel, in pppol2tp_tunnel_setsockopt() argument
1158 /* Tunnel debug flags option is deprecated */ in pppol2tp_tunnel_setsockopt()
1198 l2tp_session_set_header_len(session, session->tunnel->version); in pppol2tp_session_setsockopt()
1226 * Does API checks, then calls either the tunnel or session setsockopt
1228 * session or the special tunnel type.
1235 struct l2tp_tunnel *tunnel; in pppol2tp_setsockopt() local
1258 /* Special case: if session_id == 0x0000, treat as operation on tunnel in pppol2tp_setsockopt()
1261 tunnel = session->tunnel; in pppol2tp_setsockopt()
1262 err = pppol2tp_tunnel_setsockopt(sk, tunnel, optname, val); in pppol2tp_setsockopt()
1272 /* Tunnel getsockopt helper. Called with sock locked.
1275 struct l2tp_tunnel *tunnel, in pppol2tp_tunnel_getsockopt() argument
1282 /* Tunnel debug flags option is deprecated */ in pppol2tp_tunnel_getsockopt()
1332 * Does API checks, then calls either the tunnel or session getsockopt
1334 * or the special tunnel type.
1341 struct l2tp_tunnel *tunnel; in pppol2tp_getsockopt() local
1366 /* Special case: if session_id == 0x0000, treat as operation on tunnel */ in pppol2tp_getsockopt()
1368 tunnel = session->tunnel; in pppol2tp_getsockopt()
1369 err = pppol2tp_tunnel_getsockopt(sk, tunnel, optname, &val); in pppol2tp_getsockopt()
1405 int tunnel_idx; /* current tunnel */
1406 int session_idx; /* index of session within current tunnel */
1407 struct l2tp_tunnel *tunnel; member
1408 struct l2tp_session *session; /* NULL means get next tunnel */
1414 if (pd->tunnel) in pppol2tp_next_tunnel()
1415 l2tp_tunnel_dec_refcount(pd->tunnel); in pppol2tp_next_tunnel()
1418 pd->tunnel = l2tp_tunnel_get_nth(net, pd->tunnel_idx); in pppol2tp_next_tunnel()
1422 if (!pd->tunnel || pd->tunnel->version == 2) in pppol2tp_next_tunnel()
1425 l2tp_tunnel_dec_refcount(pd->tunnel); in pppol2tp_next_tunnel()
1435 pd->session = l2tp_session_get_nth(pd->tunnel, pd->session_idx); in pppol2tp_next_session()
1461 if (!pd->tunnel) in pppol2tp_seq_start()
1466 /* NULL tunnel and session indicates end of list */ in pppol2tp_seq_start()
1467 if (!pd->tunnel && !pd->session) in pppol2tp_seq_start()
1494 if (pd->tunnel) { in pppol2tp_seq_stop()
1495 l2tp_tunnel_dec_refcount(pd->tunnel); in pppol2tp_seq_stop()
1496 pd->tunnel = NULL; in pppol2tp_seq_stop()
1502 struct l2tp_tunnel *tunnel = v; in pppol2tp_seq_tunnel_show() local
1505 tunnel->name, in pppol2tp_seq_tunnel_show()
1506 (tunnel == tunnel->sock->sk_user_data) ? 'Y' : 'N', in pppol2tp_seq_tunnel_show()
1507 refcount_read(&tunnel->ref_count) - 1); in pppol2tp_seq_tunnel_show()
1510 atomic_long_read(&tunnel->stats.tx_packets), in pppol2tp_seq_tunnel_show()
1511 atomic_long_read(&tunnel->stats.tx_bytes), in pppol2tp_seq_tunnel_show()
1512 atomic_long_read(&tunnel->stats.tx_errors), in pppol2tp_seq_tunnel_show()
1513 atomic_long_read(&tunnel->stats.rx_packets), in pppol2tp_seq_tunnel_show()
1514 atomic_long_read(&tunnel->stats.rx_bytes), in pppol2tp_seq_tunnel_show()
1515 atomic_long_read(&tunnel->stats.rx_errors)); in pppol2tp_seq_tunnel_show()
1521 struct l2tp_tunnel *tunnel = session->tunnel; in pppol2tp_seq_session_show() local
1528 if (tunnel->sock) { in pppol2tp_seq_session_show()
1529 struct inet_sock *inet = inet_sk(tunnel->sock); in pppol2tp_seq_session_show()
1546 tunnel->tunnel_id, in pppol2tp_seq_session_show()
1548 tunnel->peer_tunnel_id, in pppol2tp_seq_session_show()
1581 seq_puts(m, "TUNNEL name, user-data-ok session-count\n"); in pppol2tp_seq_show()
1590 pppol2tp_seq_tunnel_show(m, pd->tunnel); in pppol2tp_seq_show()