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()
657 struct l2tp_tunnel *tunnel; in pppol2tp_tunnel_get() local
662 tunnel = l2tp_tunnel_get(net, info->tunnel_id); in pppol2tp_tunnel_get()
664 /* Special case: create tunnel context if session_id and in pppol2tp_tunnel_get()
665 * peer_session_id is 0. Otherwise look up tunnel using supplied in pppol2tp_tunnel_get()
666 * tunnel id. in pppol2tp_tunnel_get()
669 if (!tunnel) { in pppol2tp_tunnel_get()
684 &tunnel); in pppol2tp_tunnel_get()
688 l2tp_tunnel_inc_refcount(tunnel); in pppol2tp_tunnel_get()
689 error = l2tp_tunnel_register(tunnel, net, &tcfg); in pppol2tp_tunnel_get()
691 kfree(tunnel); in pppol2tp_tunnel_get()
698 /* Error if we can't find the tunnel */ in pppol2tp_tunnel_get()
699 if (!tunnel) in pppol2tp_tunnel_get()
703 if (!tunnel->sock) { in pppol2tp_tunnel_get()
704 l2tp_tunnel_dec_refcount(tunnel); in pppol2tp_tunnel_get()
709 return tunnel; in pppol2tp_tunnel_get()
712 /* connect() handler. Attach a PPPoX socket to a tunnel UDP socket
721 struct l2tp_tunnel *tunnel; in pppol2tp_connect() local
737 tunnel = pppol2tp_tunnel_get(sock_net(sk), &info, &new_tunnel); in pppol2tp_connect()
738 if (IS_ERR(tunnel)) in pppol2tp_connect()
739 return PTR_ERR(tunnel); in pppol2tp_connect()
753 if (tunnel->peer_tunnel_id == 0) in pppol2tp_connect()
754 tunnel->peer_tunnel_id = info.peer_tunnel_id; in pppol2tp_connect()
756 session = l2tp_tunnel_get_session(tunnel, info.session_id); in pppol2tp_connect()
782 tunnel, info.session_id, in pppol2tp_connect()
794 error = l2tp_session_register(session, tunnel); in pppol2tp_connect()
805 * socket is being created to manage the tunnel. Just set up in pppol2tp_connect()
822 po->chan.mtu = pppol2tp_tunnel_mtu(tunnel); in pppol2tp_connect()
849 l2tp_tunnel_delete(tunnel); in pppol2tp_connect()
853 l2tp_tunnel_dec_refcount(tunnel); in pppol2tp_connect()
862 static int pppol2tp_session_create(struct net *net, struct l2tp_tunnel *tunnel, in pppol2tp_session_create() argument
869 /* Error if tunnel socket is not prepped */ in pppol2tp_session_create()
870 if (!tunnel->sock) { in pppol2tp_session_create()
877 tunnel, session_id, in pppol2tp_session_create()
886 error = l2tp_session_register(session, tunnel); in pppol2tp_session_create()
908 struct l2tp_tunnel *tunnel; in pppol2tp_getname() local
925 tunnel = session->tunnel; in pppol2tp_getname()
927 inet = inet_sk(tunnel->sock); in pppol2tp_getname()
928 if (tunnel->version == 2 && tunnel->sock->sk_family == AF_INET) { in pppol2tp_getname()
935 sp.pppol2tp.fd = tunnel->fd; in pppol2tp_getname()
937 sp.pppol2tp.s_tunnel = tunnel->tunnel_id; in pppol2tp_getname()
938 sp.pppol2tp.d_tunnel = tunnel->peer_tunnel_id; in pppol2tp_getname()
946 } else if (tunnel->version == 2 && tunnel->sock->sk_family == AF_INET6) { in pppol2tp_getname()
953 sp.pppol2tp.fd = tunnel->fd; in pppol2tp_getname()
955 sp.pppol2tp.s_tunnel = tunnel->tunnel_id; in pppol2tp_getname()
956 sp.pppol2tp.d_tunnel = tunnel->peer_tunnel_id; in pppol2tp_getname()
961 memcpy(&sp.pppol2tp.addr.sin6_addr, &tunnel->sock->sk_v6_daddr, in pppol2tp_getname()
962 sizeof(tunnel->sock->sk_v6_daddr)); in pppol2tp_getname()
964 } else if (tunnel->version == 3 && tunnel->sock->sk_family == AF_INET6) { in pppol2tp_getname()
971 sp.pppol2tp.fd = tunnel->fd; in pppol2tp_getname()
973 sp.pppol2tp.s_tunnel = tunnel->tunnel_id; in pppol2tp_getname()
974 sp.pppol2tp.d_tunnel = tunnel->peer_tunnel_id; in pppol2tp_getname()
979 memcpy(&sp.pppol2tp.addr.sin6_addr, &tunnel->sock->sk_v6_daddr, in pppol2tp_getname()
980 sizeof(tunnel->sock->sk_v6_daddr)); in pppol2tp_getname()
983 } else if (tunnel->version == 3) { in pppol2tp_getname()
990 sp.pppol2tp.fd = tunnel->fd; in pppol2tp_getname()
992 sp.pppol2tp.s_tunnel = tunnel->tunnel_id; in pppol2tp_getname()
993 sp.pppol2tp.d_tunnel = tunnel->peer_tunnel_id; in pppol2tp_getname()
1013 * sockets. However, in order to control kernel tunnel features, we allow
1014 * userspace to create a special "tunnel" PPPoX socket which is used for
1015 * control only. Tunnel PPPoX sockets have session_id == 0 and simply allow
1036 struct l2tp_tunnel *tunnel) in pppol2tp_tunnel_copy_stats() argument
1041 pppol2tp_copy_stats(stats, &tunnel->stats); in pppol2tp_tunnel_copy_stats()
1046 * context of this tunnel and record the session's statistics. in pppol2tp_tunnel_copy_stats()
1048 session = l2tp_tunnel_get_session(tunnel, stats->session_id); in pppol2tp_tunnel_copy_stats()
1112 /* Session 0 represents the parent tunnel */ in pppol2tp_ioctl()
1123 session->tunnel); in pppol2tp_ioctl()
1132 stats.tunnel_id = session->tunnel->tunnel_id; in pppol2tp_ioctl()
1133 stats.using_ipsec = l2tp_tunnel_uses_xfrm(session->tunnel); in pppol2tp_ioctl()
1150 * sockets. In order to control kernel tunnel features, we allow userspace to
1151 * create a special "tunnel" PPPoX socket which is used for control only.
1152 * Tunnel PPPoX sockets have session_id == 0 and simply allow the user
1156 /* Tunnel setsockopt() helper.
1159 struct l2tp_tunnel *tunnel, in pppol2tp_tunnel_setsockopt() argument
1166 /* Tunnel debug flags option is deprecated */ in pppol2tp_tunnel_setsockopt()
1206 l2tp_session_set_header_len(session, session->tunnel->version); in pppol2tp_session_setsockopt()
1234 * Does API checks, then calls either the tunnel or session setsockopt
1236 * session or the special tunnel type.
1243 struct l2tp_tunnel *tunnel; in pppol2tp_setsockopt() local
1266 /* Special case: if session_id == 0x0000, treat as operation on tunnel in pppol2tp_setsockopt()
1269 tunnel = session->tunnel; in pppol2tp_setsockopt()
1270 err = pppol2tp_tunnel_setsockopt(sk, tunnel, optname, val); in pppol2tp_setsockopt()
1280 /* Tunnel getsockopt helper. Called with sock locked.
1283 struct l2tp_tunnel *tunnel, in pppol2tp_tunnel_getsockopt() argument
1290 /* Tunnel debug flags option is deprecated */ in pppol2tp_tunnel_getsockopt()
1340 * Does API checks, then calls either the tunnel or session getsockopt
1342 * or the special tunnel type.
1349 struct l2tp_tunnel *tunnel; in pppol2tp_getsockopt() local
1374 /* Special case: if session_id == 0x0000, treat as operation on tunnel */ in pppol2tp_getsockopt()
1376 tunnel = session->tunnel; in pppol2tp_getsockopt()
1377 err = pppol2tp_tunnel_getsockopt(sk, tunnel, optname, &val); in pppol2tp_getsockopt()
1413 int tunnel_idx; /* current tunnel */
1414 int session_idx; /* index of session within current tunnel */
1415 struct l2tp_tunnel *tunnel; member
1416 struct l2tp_session *session; /* NULL means get next tunnel */
1422 if (pd->tunnel) in pppol2tp_next_tunnel()
1423 l2tp_tunnel_dec_refcount(pd->tunnel); in pppol2tp_next_tunnel()
1426 pd->tunnel = l2tp_tunnel_get_nth(net, pd->tunnel_idx); in pppol2tp_next_tunnel()
1430 if (!pd->tunnel || pd->tunnel->version == 2) in pppol2tp_next_tunnel()
1433 l2tp_tunnel_dec_refcount(pd->tunnel); in pppol2tp_next_tunnel()
1443 pd->session = l2tp_session_get_nth(pd->tunnel, pd->session_idx); in pppol2tp_next_session()
1469 if (!pd->tunnel) in pppol2tp_seq_start()
1474 /* NULL tunnel and session indicates end of list */ in pppol2tp_seq_start()
1475 if (!pd->tunnel && !pd->session) in pppol2tp_seq_start()
1502 if (pd->tunnel) { in pppol2tp_seq_stop()
1503 l2tp_tunnel_dec_refcount(pd->tunnel); in pppol2tp_seq_stop()
1504 pd->tunnel = NULL; in pppol2tp_seq_stop()
1510 struct l2tp_tunnel *tunnel = v; in pppol2tp_seq_tunnel_show() local
1513 tunnel->name, in pppol2tp_seq_tunnel_show()
1514 (tunnel == tunnel->sock->sk_user_data) ? 'Y' : 'N', in pppol2tp_seq_tunnel_show()
1515 refcount_read(&tunnel->ref_count) - 1); in pppol2tp_seq_tunnel_show()
1518 atomic_long_read(&tunnel->stats.tx_packets), in pppol2tp_seq_tunnel_show()
1519 atomic_long_read(&tunnel->stats.tx_bytes), in pppol2tp_seq_tunnel_show()
1520 atomic_long_read(&tunnel->stats.tx_errors), in pppol2tp_seq_tunnel_show()
1521 atomic_long_read(&tunnel->stats.rx_packets), in pppol2tp_seq_tunnel_show()
1522 atomic_long_read(&tunnel->stats.rx_bytes), in pppol2tp_seq_tunnel_show()
1523 atomic_long_read(&tunnel->stats.rx_errors)); in pppol2tp_seq_tunnel_show()
1529 struct l2tp_tunnel *tunnel = session->tunnel; in pppol2tp_seq_session_show() local
1536 if (tunnel->sock) { in pppol2tp_seq_session_show()
1537 struct inet_sock *inet = inet_sk(tunnel->sock); in pppol2tp_seq_session_show()
1554 tunnel->tunnel_id, in pppol2tp_seq_session_show()
1556 tunnel->peer_tunnel_id, in pppol2tp_seq_session_show()
1589 seq_puts(m, "TUNNEL name, user-data-ok session-count\n"); in pppol2tp_seq_show()
1598 pppol2tp_seq_tunnel_show(m, pd->tunnel); in pppol2tp_seq_show()