protocol.c (5796254e467bf1cff002df65fbb53ecef6a0e060) protocol.c (9e47df005cab63e545671dba8dfd6852fff1c2cf)
1// SPDX-License-Identifier: GPL-2.0-or-later
2/* SCTP kernel implementation
3 * (C) Copyright IBM Corp. 2001, 2004
4 * Copyright (c) 1999-2000 Cisco, Inc.
5 * Copyright (c) 1999-2001 Motorola, Inc.
6 * Copyright (c) 2001 Intel Corp.
7 * Copyright (c) 2001 Nokia, Inc.
8 * Copyright (c) 2001 La Monte H.P. Yarroll

--- 836 unchanged lines hidden (view full) ---

845{
846 SCTP_INPUT_CB(skb)->encap_port = udp_hdr(skb)->source;
847
848 skb_set_transport_header(skb, sizeof(struct udphdr));
849 sctp_rcv(skb);
850 return 0;
851}
852
1// SPDX-License-Identifier: GPL-2.0-or-later
2/* SCTP kernel implementation
3 * (C) Copyright IBM Corp. 2001, 2004
4 * Copyright (c) 1999-2000 Cisco, Inc.
5 * Copyright (c) 1999-2001 Motorola, Inc.
6 * Copyright (c) 2001 Intel Corp.
7 * Copyright (c) 2001 Nokia, Inc.
8 * Copyright (c) 2001 La Monte H.P. Yarroll

--- 836 unchanged lines hidden (view full) ---

845{
846 SCTP_INPUT_CB(skb)->encap_port = udp_hdr(skb)->source;
847
848 skb_set_transport_header(skb, sizeof(struct udphdr));
849 sctp_rcv(skb);
850 return 0;
851}
852
853static int sctp_udp_err_lookup(struct sock *sk, struct sk_buff *skb)
854{
855 struct sctp_association *asoc;
856 struct sctp_transport *t;
857 int family;
858
859 skb->transport_header += sizeof(struct udphdr);
860 family = (ip_hdr(skb)->version == 4) ? AF_INET : AF_INET6;
861 sk = sctp_err_lookup(dev_net(skb->dev), family, skb, sctp_hdr(skb),
862 &asoc, &t);
863 if (!sk)
864 return -ENOENT;
865
866 sctp_err_finish(sk, t);
867 return 0;
868}
869
870int sctp_udp_sock_start(struct net *net)
871{
872 struct udp_tunnel_sock_cfg tuncfg = {NULL};
873 struct udp_port_cfg udp_conf = {0};
874 struct socket *sock;
875 int err;
876
877 udp_conf.family = AF_INET;
878 udp_conf.local_ip.s_addr = htonl(INADDR_ANY);
879 udp_conf.local_udp_port = htons(net->sctp.udp_port);
880 err = udp_sock_create(net, &udp_conf, &sock);
881 if (err) {
882 pr_err("Failed to create the SCTP UDP tunneling v4 sock\n");
883 return err;
884 }
885
886 tuncfg.encap_type = 1;
887 tuncfg.encap_rcv = sctp_udp_rcv;
853int sctp_udp_sock_start(struct net *net)
854{
855 struct udp_tunnel_sock_cfg tuncfg = {NULL};
856 struct udp_port_cfg udp_conf = {0};
857 struct socket *sock;
858 int err;
859
860 udp_conf.family = AF_INET;
861 udp_conf.local_ip.s_addr = htonl(INADDR_ANY);
862 udp_conf.local_udp_port = htons(net->sctp.udp_port);
863 err = udp_sock_create(net, &udp_conf, &sock);
864 if (err) {
865 pr_err("Failed to create the SCTP UDP tunneling v4 sock\n");
866 return err;
867 }
868
869 tuncfg.encap_type = 1;
870 tuncfg.encap_rcv = sctp_udp_rcv;
888 tuncfg.encap_err_lookup = sctp_udp_err_lookup;
871 tuncfg.encap_err_lookup = sctp_udp_v4_err;
889 setup_udp_tunnel_sock(net, sock, &tuncfg);
890 net->sctp.udp4_sock = sock->sk;
891
892#if IS_ENABLED(CONFIG_IPV6)
893 memset(&udp_conf, 0, sizeof(udp_conf));
894
895 udp_conf.family = AF_INET6;
896 udp_conf.local_ip6 = in6addr_any;

--- 5 unchanged lines hidden (view full) ---

902 pr_err("Failed to create the SCTP UDP tunneling v6 sock\n");
903 udp_tunnel_sock_release(net->sctp.udp4_sock->sk_socket);
904 net->sctp.udp4_sock = NULL;
905 return err;
906 }
907
908 tuncfg.encap_type = 1;
909 tuncfg.encap_rcv = sctp_udp_rcv;
872 setup_udp_tunnel_sock(net, sock, &tuncfg);
873 net->sctp.udp4_sock = sock->sk;
874
875#if IS_ENABLED(CONFIG_IPV6)
876 memset(&udp_conf, 0, sizeof(udp_conf));
877
878 udp_conf.family = AF_INET6;
879 udp_conf.local_ip6 = in6addr_any;

--- 5 unchanged lines hidden (view full) ---

885 pr_err("Failed to create the SCTP UDP tunneling v6 sock\n");
886 udp_tunnel_sock_release(net->sctp.udp4_sock->sk_socket);
887 net->sctp.udp4_sock = NULL;
888 return err;
889 }
890
891 tuncfg.encap_type = 1;
892 tuncfg.encap_rcv = sctp_udp_rcv;
910 tuncfg.encap_err_lookup = sctp_udp_err_lookup;
893 tuncfg.encap_err_lookup = sctp_udp_v6_err;
911 setup_udp_tunnel_sock(net, sock, &tuncfg);
912 net->sctp.udp6_sock = sock->sk;
913#endif
914
915 return 0;
916}
917
918void sctp_udp_sock_stop(struct net *net)

--- 822 unchanged lines hidden ---
894 setup_udp_tunnel_sock(net, sock, &tuncfg);
895 net->sctp.udp6_sock = sock->sk;
896#endif
897
898 return 0;
899}
900
901void sctp_udp_sock_stop(struct net *net)

--- 822 unchanged lines hidden ---