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 --- |