Merge tag 'gfs2-4.17.fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/gfs2...
[linux-2.6-block.git] / net / sctp / protocol.c
CommitLineData
60c778b2 1/* SCTP kernel implementation
1da177e4
LT
2 * (C) Copyright IBM Corp. 2001, 2004
3 * Copyright (c) 1999-2000 Cisco, Inc.
4 * Copyright (c) 1999-2001 Motorola, Inc.
5 * Copyright (c) 2001 Intel Corp.
6 * Copyright (c) 2001 Nokia, Inc.
7 * Copyright (c) 2001 La Monte H.P. Yarroll
8 *
60c778b2 9 * This file is part of the SCTP kernel implementation
1da177e4
LT
10 *
11 * Initialization/cleanup for SCTP protocol support.
12 *
60c778b2 13 * This SCTP implementation is free software;
1da177e4
LT
14 * you can redistribute it and/or modify it under the terms of
15 * the GNU General Public License as published by
16 * the Free Software Foundation; either version 2, or (at your option)
17 * any later version.
18 *
60c778b2 19 * This SCTP implementation is distributed in the hope that it
1da177e4
LT
20 * will be useful, but WITHOUT ANY WARRANTY; without even the implied
21 * ************************
22 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
23 * See the GNU General Public License for more details.
24 *
25 * You should have received a copy of the GNU General Public License
4b2f13a2
JK
26 * along with GNU CC; see the file COPYING. If not, see
27 * <http://www.gnu.org/licenses/>.
1da177e4
LT
28 *
29 * Please send any bug reports or fixes you make to the
30 * email address(es):
91705c61 31 * lksctp developers <linux-sctp@vger.kernel.org>
1da177e4 32 *
1da177e4
LT
33 * Written or modified by:
34 * La Monte H.P. Yarroll <piggy@acm.org>
35 * Karl Knutson <karl@athena.chicago.il.us>
36 * Jon Grimm <jgrimm@us.ibm.com>
37 * Sridhar Samudrala <sri@us.ibm.com>
38 * Daisy Chang <daisyc@us.ibm.com>
39 * Ardelle Fan <ardelle.fan@intel.com>
1da177e4
LT
40 */
41
145ce502
JP
42#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
43
1da177e4
LT
44#include <linux/module.h>
45#include <linux/init.h>
46#include <linux/netdevice.h>
47#include <linux/inetdevice.h>
48#include <linux/seq_file.h>
4d93df0a 49#include <linux/bootmem.h>
845525a6
VY
50#include <linux/highmem.h>
51#include <linux/swap.h>
5a0e3ad6 52#include <linux/slab.h>
457c4cbc 53#include <net/net_namespace.h>
1da177e4
LT
54#include <net/protocol.h>
55#include <net/ip.h>
56#include <net/ipv6.h>
14c85021 57#include <net/route.h>
1da177e4
LT
58#include <net/sctp/sctp.h>
59#include <net/addrconf.h>
60#include <net/inet_common.h>
61#include <net/inet_ecn.h>
62
d9749fb5
NH
63#define MAX_SCTP_PORT_HASH_ENTRIES (64 * 1024)
64
1da177e4 65/* Global data structures. */
4cbf1cae 66struct sctp_globals sctp_globals __read_mostly;
1da177e4
LT
67
68struct idr sctp_assocs_id;
69DEFINE_SPINLOCK(sctp_assocs_id_lock);
70
1da177e4
LT
71static struct sctp_pf *sctp_pf_inet6_specific;
72static struct sctp_pf *sctp_pf_inet_specific;
73static struct sctp_af *sctp_af_v4_specific;
74static struct sctp_af *sctp_af_v6_specific;
75
e18b890b
CL
76struct kmem_cache *sctp_chunk_cachep __read_mostly;
77struct kmem_cache *sctp_bucket_cachep __read_mostly;
1da177e4 78
8d987e5c 79long sysctl_sctp_mem[3];
007e3936
VY
80int sysctl_sctp_rmem[3];
81int sysctl_sctp_wmem[3];
4d93df0a 82
1da177e4
LT
83/* Private helper to extract ipv4 address and stash them in
84 * the protocol structure.
85 */
86static void sctp_v4_copy_addrlist(struct list_head *addrlist,
87 struct net_device *dev)
88{
89 struct in_device *in_dev;
90 struct in_ifaddr *ifa;
91 struct sctp_sockaddr_entry *addr;
92
93 rcu_read_lock();
e5ed6399 94 if ((in_dev = __in_dev_get_rcu(dev)) == NULL) {
1da177e4
LT
95 rcu_read_unlock();
96 return;
97 }
98
99 for (ifa = in_dev->ifa_list; ifa; ifa = ifa->ifa_next) {
100 /* Add the address to the local list. */
939cfa75 101 addr = kzalloc(sizeof(*addr), GFP_ATOMIC);
1da177e4 102 if (addr) {
2a6fd78a
AV
103 addr->a.v4.sin_family = AF_INET;
104 addr->a.v4.sin_port = 0;
105 addr->a.v4.sin_addr.s_addr = ifa->ifa_local;
29303547
VY
106 addr->valid = 1;
107 INIT_LIST_HEAD(&addr->list);
1da177e4
LT
108 list_add_tail(&addr->list, addrlist);
109 }
110 }
111
112 rcu_read_unlock();
113}
114
115/* Extract our IP addresses from the system and stash them in the
116 * protocol structure.
117 */
4db67e80 118static void sctp_get_local_addr_list(struct net *net)
1da177e4
LT
119{
120 struct net_device *dev;
121 struct list_head *pos;
122 struct sctp_af *af;
123
c6d14c84 124 rcu_read_lock();
4db67e80 125 for_each_netdev_rcu(net, dev) {
2c0740e4 126 list_for_each(pos, &sctp_address_families) {
1da177e4 127 af = list_entry(pos, struct sctp_af, list);
4db67e80 128 af->copy_addrlist(&net->sctp.local_addr_list, dev);
1da177e4
LT
129 }
130 }
c6d14c84 131 rcu_read_unlock();
1da177e4
LT
132}
133
1da177e4 134/* Free the existing local addresses. */
4db67e80 135static void sctp_free_local_addr_list(struct net *net)
1da177e4
LT
136{
137 struct sctp_sockaddr_entry *addr;
138 struct list_head *pos, *temp;
139
4db67e80 140 list_for_each_safe(pos, temp, &net->sctp.local_addr_list) {
1da177e4
LT
141 addr = list_entry(pos, struct sctp_sockaddr_entry, list);
142 list_del(pos);
143 kfree(addr);
144 }
145}
146
1da177e4 147/* Copy the local addresses which are valid for 'scope' into 'bp'. */
4db67e80 148int sctp_copy_local_addr_list(struct net *net, struct sctp_bind_addr *bp,
1c662018 149 enum sctp_scope scope, gfp_t gfp, int copy_flags)
1da177e4
LT
150{
151 struct sctp_sockaddr_entry *addr;
2e3ce5bc 152 union sctp_addr laddr;
1da177e4 153 int error = 0;
1da177e4 154
29303547 155 rcu_read_lock();
4db67e80 156 list_for_each_entry_rcu(addr, &net->sctp.local_addr_list, list) {
29303547
VY
157 if (!addr->valid)
158 continue;
165f2cf6
XL
159 if (!sctp_in_scope(net, &addr->a, scope))
160 continue;
161
162 /* Now that the address is in scope, check to see if
163 * the address type is really supported by the local
164 * sock as well as the remote peer.
165 */
166 if (addr->a.sa.sa_family == AF_INET &&
167 !(copy_flags & SCTP_ADDR4_PEERSUPP))
168 continue;
169 if (addr->a.sa.sa_family == AF_INET6 &&
170 (!(copy_flags & SCTP_ADDR6_ALLOWED) ||
171 !(copy_flags & SCTP_ADDR6_PEERSUPP)))
172 continue;
173
2e3ce5bc
XL
174 laddr = addr->a;
175 /* also works for setting ipv6 address port */
176 laddr.v4.sin_port = htons(bp->port);
177 if (sctp_bind_addr_state(bp, &laddr) != -1)
b8607805
XL
178 continue;
179
165f2cf6
XL
180 error = sctp_add_bind_addr(bp, &addr->a, sizeof(addr->a),
181 SCTP_ADDR_SRC, GFP_ATOMIC);
182 if (error)
183 break;
1da177e4
LT
184 }
185
29303547 186 rcu_read_unlock();
1da177e4
LT
187 return error;
188}
189
190/* Initialize a sctp_addr from in incoming skb. */
191static void sctp_v4_from_skb(union sctp_addr *addr, struct sk_buff *skb,
192 int is_saddr)
193{
0630c56e
MRL
194 /* Always called on head skb, so this is safe */
195 struct sctphdr *sh = sctp_hdr(skb);
196 struct sockaddr_in *sa = &addr->v4;
1da177e4 197
1da177e4
LT
198 addr->v4.sin_family = AF_INET;
199
1da177e4 200 if (is_saddr) {
0630c56e
MRL
201 sa->sin_port = sh->source;
202 sa->sin_addr.s_addr = ip_hdr(skb)->saddr;
1da177e4 203 } else {
0630c56e
MRL
204 sa->sin_port = sh->dest;
205 sa->sin_addr.s_addr = ip_hdr(skb)->daddr;
1da177e4 206 }
1da177e4
LT
207}
208
209/* Initialize an sctp_addr from a socket. */
210static void sctp_v4_from_sk(union sctp_addr *addr, struct sock *sk)
211{
212 addr->v4.sin_family = AF_INET;
7dcdbd95 213 addr->v4.sin_port = 0;
c720c7e8 214 addr->v4.sin_addr.s_addr = inet_sk(sk)->inet_rcv_saddr;
1da177e4
LT
215}
216
217/* Initialize sk->sk_rcv_saddr from sctp_addr. */
218static void sctp_v4_to_sk_saddr(union sctp_addr *addr, struct sock *sk)
219{
c720c7e8 220 inet_sk(sk)->inet_rcv_saddr = addr->v4.sin_addr.s_addr;
1da177e4
LT
221}
222
223/* Initialize sk->sk_daddr from sctp_addr. */
224static void sctp_v4_to_sk_daddr(union sctp_addr *addr, struct sock *sk)
225{
c720c7e8 226 inet_sk(sk)->inet_daddr = addr->v4.sin_addr.s_addr;
1da177e4
LT
227}
228
229/* Initialize a sctp_addr from an address parameter. */
230static void sctp_v4_from_addr_param(union sctp_addr *addr,
231 union sctp_addr_param *param,
dd86d136 232 __be16 port, int iif)
1da177e4
LT
233{
234 addr->v4.sin_family = AF_INET;
235 addr->v4.sin_port = port;
236 addr->v4.sin_addr.s_addr = param->v4.addr.s_addr;
237}
238
239/* Initialize an address parameter from a sctp_addr and return the length
240 * of the address parameter.
241 */
242static int sctp_v4_to_addr_param(const union sctp_addr *addr,
243 union sctp_addr_param *param)
244{
a38905e6 245 int length = sizeof(struct sctp_ipv4addr_param);
1da177e4
LT
246
247 param->v4.param_hdr.type = SCTP_PARAM_IPV4_ADDRESS;
dbc16db1 248 param->v4.param_hdr.length = htons(length);
d808ad9a 249 param->v4.addr.s_addr = addr->v4.sin_addr.s_addr;
1da177e4
LT
250
251 return length;
252}
253
254/* Initialize a sctp_addr from a dst_entry. */
18a353f4 255static void sctp_v4_dst_saddr(union sctp_addr *saddr, struct flowi4 *fl4,
854d43a4 256 __be16 port)
1da177e4 257{
1da177e4
LT
258 saddr->v4.sin_family = AF_INET;
259 saddr->v4.sin_port = port;
18a353f4 260 saddr->v4.sin_addr.s_addr = fl4->saddr;
1da177e4
LT
261}
262
263/* Compare two addresses exactly. */
264static int sctp_v4_cmp_addr(const union sctp_addr *addr1,
265 const union sctp_addr *addr2)
266{
267 if (addr1->sa.sa_family != addr2->sa.sa_family)
268 return 0;
269 if (addr1->v4.sin_port != addr2->v4.sin_port)
270 return 0;
271 if (addr1->v4.sin_addr.s_addr != addr2->v4.sin_addr.s_addr)
272 return 0;
273
274 return 1;
275}
276
277/* Initialize addr struct to INADDR_ANY. */
6fbfa9f9 278static void sctp_v4_inaddr_any(union sctp_addr *addr, __be16 port)
1da177e4
LT
279{
280 addr->v4.sin_family = AF_INET;
e6f1cebf 281 addr->v4.sin_addr.s_addr = htonl(INADDR_ANY);
1da177e4
LT
282 addr->v4.sin_port = port;
283}
284
285/* Is this a wildcard address? */
286static int sctp_v4_is_any(const union sctp_addr *addr)
287{
e6f1cebf 288 return htonl(INADDR_ANY) == addr->v4.sin_addr.s_addr;
1da177e4
LT
289}
290
291/* This function checks if the address is a valid address to be used for
292 * SCTP binding.
293 *
294 * Output:
295 * Return 0 - If the address is a non-unicast or an illegal address.
296 * Return 1 - If the address is a unicast.
297 */
5636bef7
VY
298static int sctp_v4_addr_valid(union sctp_addr *addr,
299 struct sctp_sock *sp,
300 const struct sk_buff *skb)
1da177e4 301{
7dab83de
VY
302 /* IPv4 addresses not allowed */
303 if (sp && ipv6_only_sock(sctp_opt2sk(sp)))
304 return 0;
305
1da177e4 306 /* Is this a non-unicast address or a unusable SCTP address? */
b5cb2bbc 307 if (IS_IPV4_UNUSABLE_ADDRESS(addr->v4.sin_addr.s_addr))
1da177e4
LT
308 return 0;
309
d808ad9a 310 /* Is this a broadcast address? */
511c3f92 311 if (skb && skb_rtable(skb)->rt_flags & RTCF_BROADCAST)
d808ad9a 312 return 0;
5636bef7 313
1da177e4
LT
314 return 1;
315}
316
317/* Should this be available for binding? */
318static int sctp_v4_available(union sctp_addr *addr, struct sctp_sock *sp)
319{
bb2db45b
EB
320 struct net *net = sock_net(&sp->inet.sk);
321 int ret = inet_addr_type(net, addr->v4.sin_addr.s_addr);
1da177e4 322
1da177e4 323
e6f1cebf 324 if (addr->v4.sin_addr.s_addr != htonl(INADDR_ANY) &&
cdac4e07
NH
325 ret != RTN_LOCAL &&
326 !sp->inet.freebind &&
49a60158 327 !net->ipv4.sysctl_ip_nonlocal_bind)
1da177e4 328 return 0;
cdac4e07 329
7dab83de
VY
330 if (ipv6_only_sock(sctp_opt2sk(sp)))
331 return 0;
332
1da177e4
LT
333 return 1;
334}
335
336/* Checking the loopback, private and other address scopes as defined in
337 * RFC 1918. The IPv4 scoping is based on the draft for SCTP IPv4
338 * scoping <draft-stewart-tsvwg-sctp-ipv4-00.txt>.
339 *
340 * Level 0 - unusable SCTP addresses
341 * Level 1 - loopback address
342 * Level 2 - link-local addresses
343 * Level 3 - private addresses.
344 * Level 4 - global addresses
345 * For INIT and INIT-ACK address list, let L be the level of
346 * of requested destination address, sender and receiver
347 * SHOULD include all of its addresses with level greater
348 * than or equal to L.
72388433
BD
349 *
350 * IPv4 scoping can be controlled through sysctl option
351 * net.sctp.addr_scope_policy
1da177e4 352 */
1c662018 353static enum sctp_scope sctp_v4_scope(union sctp_addr *addr)
1da177e4 354{
1c662018 355 enum sctp_scope retval;
1da177e4 356
1da177e4 357 /* Check for unusable SCTP addresses. */
b5cb2bbc 358 if (IS_IPV4_UNUSABLE_ADDRESS(addr->v4.sin_addr.s_addr)) {
1da177e4 359 retval = SCTP_SCOPE_UNUSABLE;
b5cb2bbc 360 } else if (ipv4_is_loopback(addr->v4.sin_addr.s_addr)) {
1da177e4 361 retval = SCTP_SCOPE_LOOPBACK;
b5cb2bbc 362 } else if (ipv4_is_linklocal_169(addr->v4.sin_addr.s_addr)) {
1da177e4 363 retval = SCTP_SCOPE_LINK;
b5cb2bbc
JP
364 } else if (ipv4_is_private_10(addr->v4.sin_addr.s_addr) ||
365 ipv4_is_private_172(addr->v4.sin_addr.s_addr) ||
366 ipv4_is_private_192(addr->v4.sin_addr.s_addr)) {
1da177e4
LT
367 retval = SCTP_SCOPE_PRIVATE;
368 } else {
369 retval = SCTP_SCOPE_GLOBAL;
370 }
371
372 return retval;
373}
374
375/* Returns a valid dst cache entry for the given source and destination ip
376 * addresses. If an association is passed, trys to get a dst entry with a
377 * source address that matches an address in the bind address list.
378 */
da0420be
VY
379static void sctp_v4_get_dst(struct sctp_transport *t, union sctp_addr *saddr,
380 struct flowi *fl, struct sock *sk)
1da177e4 381{
da0420be 382 struct sctp_association *asoc = t->asoc;
1da177e4 383 struct rtable *rt;
9914ae3c 384 struct flowi4 *fl4 = &fl->u.ip4;
1da177e4 385 struct sctp_bind_addr *bp;
1da177e4 386 struct sctp_sockaddr_entry *laddr;
1da177e4 387 struct dst_entry *dst = NULL;
da0420be 388 union sctp_addr *daddr = &t->ipaddr;
1da177e4
LT
389 union sctp_addr dst_saddr;
390
9914ae3c
VY
391 memset(fl4, 0x0, sizeof(struct flowi4));
392 fl4->daddr = daddr->v4.sin_addr.s_addr;
393 fl4->fl4_dport = daddr->v4.sin_port;
394 fl4->flowi4_proto = IPPROTO_SCTP;
1da177e4 395 if (asoc) {
9914ae3c
VY
396 fl4->flowi4_tos = RT_CONN_FLAGS(asoc->base.sk);
397 fl4->flowi4_oif = asoc->base.sk->sk_bound_dev_if;
398 fl4->fl4_sport = htons(asoc->base.bind_addr.port);
1da177e4 399 }
6429d3dc 400 if (saddr) {
9914ae3c
VY
401 fl4->saddr = saddr->v4.sin_addr.s_addr;
402 fl4->fl4_sport = saddr->v4.sin_port;
6429d3dc 403 }
1da177e4 404
bb33381d
DB
405 pr_debug("%s: dst:%pI4, src:%pI4 - ", __func__, &fl4->daddr,
406 &fl4->saddr);
1da177e4 407
bb2db45b 408 rt = ip_route_output_key(sock_net(sk), fl4);
b23dd4fe 409 if (!IS_ERR(rt))
d8d1f30b 410 dst = &rt->dst;
1da177e4
LT
411
412 /* If there is no association or if a source address is passed, no
413 * more validation is required.
414 */
415 if (!asoc || saddr)
416 goto out;
417
418 bp = &asoc->base.bind_addr;
1da177e4
LT
419
420 if (dst) {
421 /* Walk through the bind address list and look for a bind
422 * address that matches the source address of the returned dst.
423 */
18a353f4 424 sctp_v4_dst_saddr(&dst_saddr, fl4, htons(bp->port));
559cf710
VY
425 rcu_read_lock();
426 list_for_each_entry_rcu(laddr, &bp->address_list, list) {
8a07eb0a
MH
427 if (!laddr->valid || (laddr->state == SCTP_ADDR_DEL) ||
428 (laddr->state != SCTP_ADDR_SRC &&
429 !asoc->src_out_of_asoc_ok))
dc022a98 430 continue;
854d43a4 431 if (sctp_v4_cmp_addr(&dst_saddr, &laddr->a))
1da177e4
LT
432 goto out_unlock;
433 }
559cf710 434 rcu_read_unlock();
1da177e4
LT
435
436 /* None of the bound addresses match the source address of the
437 * dst. So release it.
438 */
439 dst_release(dst);
440 dst = NULL;
441 }
442
443 /* Walk through the bind address list and try to get a dst that
444 * matches a bind address as the source address.
445 */
559cf710
VY
446 rcu_read_lock();
447 list_for_each_entry_rcu(laddr, &bp->address_list, list) {
0ca50d12
MRL
448 struct net_device *odev;
449
559cf710
VY
450 if (!laddr->valid)
451 continue;
07868284
MRL
452 if (laddr->state != SCTP_ADDR_SRC ||
453 AF_INET != laddr->a.sa.sa_family)
454 continue;
455
456 fl4->fl4_sport = laddr->a.v4.sin_port;
457 flowi4_update_output(fl4,
458 asoc->base.sk->sk_bound_dev_if,
459 RT_CONN_FLAGS(asoc->base.sk),
460 daddr->v4.sin_addr.s_addr,
461 laddr->a.v4.sin_addr.s_addr);
462
463 rt = ip_route_output_key(sock_net(sk), fl4);
464 if (IS_ERR(rt))
465 continue;
466
0ca50d12
MRL
467 /* Ensure the src address belongs to the output
468 * interface.
469 */
470 odev = __ip_dev_find(sock_net(sk), laddr->a.v4.sin_addr.s_addr,
471 false);
d82f0f1f 472 if (!odev || odev->ifindex != fl4->flowi4_oif) {
4a31a6b1
TR
473 if (!dst)
474 dst = &rt->dst;
475 else
410f0383 476 dst_release(&rt->dst);
0ca50d12 477 continue;
d82f0f1f 478 }
0ca50d12 479
4a31a6b1 480 dst_release(dst);
07868284
MRL
481 dst = &rt->dst;
482 break;
1da177e4
LT
483 }
484
485out_unlock:
559cf710 486 rcu_read_unlock();
1da177e4 487out:
da0420be 488 t->dst = dst;
1da177e4 489 if (dst)
bb33381d
DB
490 pr_debug("rt_dst:%pI4, rt_src:%pI4\n",
491 &fl4->daddr, &fl4->saddr);
1da177e4 492 else
bb33381d 493 pr_debug("no route\n");
1da177e4
LT
494}
495
496/* For v4, the source address is cached in the route entry(dst). So no need
497 * to cache it separately and hence this is an empty routine.
498 */
e5117101 499static void sctp_v4_get_saddr(struct sctp_sock *sk,
9914ae3c 500 struct sctp_transport *t,
9914ae3c 501 struct flowi *fl)
1da177e4 502{
9914ae3c
VY
503 union sctp_addr *saddr = &t->saddr;
504 struct rtable *rt = (struct rtable *)t->dst;
23ec47a0 505
1da177e4
LT
506 if (rt) {
507 saddr->v4.sin_family = AF_INET;
902ebd3e 508 saddr->v4.sin_addr.s_addr = fl->u.ip4.saddr;
1da177e4
LT
509 }
510}
511
512/* What interface did this skb arrive on? */
513static int sctp_v4_skb_iif(const struct sk_buff *skb)
514{
92101b3b 515 return inet_iif(skb);
1da177e4
LT
516}
517
518/* Was this packet marked by Explicit Congestion Notification? */
519static int sctp_v4_is_ce(const struct sk_buff *skb)
520{
eddc9ec5 521 return INET_ECN_is_ce(ip_hdr(skb)->tos);
1da177e4
LT
522}
523
524/* Create and initialize a new sk for the socket returned by accept(). */
525static struct sock *sctp_v4_create_accept_sk(struct sock *sk,
cdfbabfb
DH
526 struct sctp_association *asoc,
527 bool kern)
1da177e4 528{
3b1e0a65 529 struct sock *newsk = sk_alloc(sock_net(sk), PF_INET, GFP_KERNEL,
cdfbabfb 530 sk->sk_prot, kern);
914e1c8b 531 struct inet_sock *newinet;
1da177e4
LT
532
533 if (!newsk)
534 goto out;
535
536 sock_init_data(NULL, newsk);
537
914e1c8b 538 sctp_copy_sock(newsk, sk, asoc);
1da177e4
LT
539 sock_reset_flag(newsk, SOCK_ZAPPED);
540
541 newinet = inet_sk(newsk);
542
c720c7e8 543 newinet->inet_daddr = asoc->peer.primary_addr.v4.sin_addr.s_addr;
1da177e4 544
e6848976 545 sk_refcnt_debug_inc(newsk);
1da177e4
LT
546
547 if (newsk->sk_prot->init(newsk)) {
548 sk_common_release(newsk);
549 newsk = NULL;
550 }
551
552out:
553 return newsk;
554}
555
299ee123 556static int sctp_v4_addr_to_user(struct sctp_sock *sp, union sctp_addr *addr)
1da177e4 557{
299ee123
JG
558 /* No address mapping for V4 sockets */
559 return sizeof(struct sockaddr_in);
1da177e4
LT
560}
561
562/* Dump the v4 addr to the seq file. */
563static void sctp_v4_seq_dump_addr(struct seq_file *seq, union sctp_addr *addr)
564{
21454aaa 565 seq_printf(seq, "%pI4 ", &addr->v4.sin_addr);
1da177e4
LT
566}
567
b9031d9d
VY
568static void sctp_v4_ecn_capable(struct sock *sk)
569{
570 INET_ECN_xmit(sk);
571}
572
9c3b5751 573static void sctp_addr_wq_timeout_handler(struct timer_list *t)
9f7d653b 574{
9c3b5751 575 struct net *net = from_timer(net, t, sctp.addr_wq_timer);
9f7d653b
MH
576 struct sctp_sockaddr_entry *addrw, *temp;
577 struct sctp_sock *sp;
578
4db67e80 579 spin_lock_bh(&net->sctp.addr_wq_lock);
9f7d653b 580
4db67e80 581 list_for_each_entry_safe(addrw, temp, &net->sctp.addr_waitq, list) {
bb33381d
DB
582 pr_debug("%s: the first ent in wq:%p is addr:%pISc for cmd:%d at "
583 "entry:%p\n", __func__, &net->sctp.addr_waitq, &addrw->a.sa,
584 addrw->state, addrw);
9f7d653b 585
dfd56b8b 586#if IS_ENABLED(CONFIG_IPV6)
9f7d653b
MH
587 /* Now we send an ASCONF for each association */
588 /* Note. we currently don't handle link local IPv6 addressees */
589 if (addrw->a.sa.sa_family == AF_INET6) {
590 struct in6_addr *in6;
591
592 if (ipv6_addr_type(&addrw->a.v6.sin6_addr) &
593 IPV6_ADDR_LINKLOCAL)
594 goto free_next;
595
596 in6 = (struct in6_addr *)&addrw->a.v6.sin6_addr;
4db67e80 597 if (ipv6_chk_addr(net, in6, NULL, 0) == 0 &&
9f7d653b
MH
598 addrw->state == SCTP_ADDR_NEW) {
599 unsigned long timeo_val;
600
bb33381d
DB
601 pr_debug("%s: this is on DAD, trying %d sec "
602 "later\n", __func__,
603 SCTP_ADDRESS_TICK_DELAY);
604
9f7d653b
MH
605 timeo_val = jiffies;
606 timeo_val += msecs_to_jiffies(SCTP_ADDRESS_TICK_DELAY);
4db67e80 607 mod_timer(&net->sctp.addr_wq_timer, timeo_val);
9f7d653b
MH
608 break;
609 }
610 }
5d0c90cf 611#endif
4db67e80 612 list_for_each_entry(sp, &net->sctp.auto_asconf_splist, auto_asconf_list) {
9f7d653b
MH
613 struct sock *sk;
614
615 sk = sctp_opt2sk(sp);
616 /* ignore bound-specific endpoints */
617 if (!sctp_is_ep_boundall(sk))
618 continue;
5bc1d1b4 619 bh_lock_sock(sk);
9f7d653b 620 if (sctp_asconf_mgmt(sp, addrw) < 0)
bb33381d 621 pr_debug("%s: sctp_asconf_mgmt failed\n", __func__);
5bc1d1b4 622 bh_unlock_sock(sk);
9f7d653b 623 }
39d84a58 624#if IS_ENABLED(CONFIG_IPV6)
9f7d653b 625free_next:
39d84a58 626#endif
9f7d653b
MH
627 list_del(&addrw->list);
628 kfree(addrw);
629 }
4db67e80 630 spin_unlock_bh(&net->sctp.addr_wq_lock);
9f7d653b
MH
631}
632
4db67e80 633static void sctp_free_addr_wq(struct net *net)
9f7d653b
MH
634{
635 struct sctp_sockaddr_entry *addrw;
636 struct sctp_sockaddr_entry *temp;
637
4db67e80
EB
638 spin_lock_bh(&net->sctp.addr_wq_lock);
639 del_timer(&net->sctp.addr_wq_timer);
640 list_for_each_entry_safe(addrw, temp, &net->sctp.addr_waitq, list) {
9f7d653b
MH
641 list_del(&addrw->list);
642 kfree(addrw);
643 }
4db67e80 644 spin_unlock_bh(&net->sctp.addr_wq_lock);
9f7d653b
MH
645}
646
647/* lookup the entry for the same address in the addr_waitq
648 * sctp_addr_wq MUST be locked
649 */
4db67e80
EB
650static struct sctp_sockaddr_entry *sctp_addr_wq_lookup(struct net *net,
651 struct sctp_sockaddr_entry *addr)
9f7d653b
MH
652{
653 struct sctp_sockaddr_entry *addrw;
654
4db67e80 655 list_for_each_entry(addrw, &net->sctp.addr_waitq, list) {
9f7d653b
MH
656 if (addrw->a.sa.sa_family != addr->a.sa.sa_family)
657 continue;
658 if (addrw->a.sa.sa_family == AF_INET) {
659 if (addrw->a.v4.sin_addr.s_addr ==
660 addr->a.v4.sin_addr.s_addr)
661 return addrw;
662 } else if (addrw->a.sa.sa_family == AF_INET6) {
663 if (ipv6_addr_equal(&addrw->a.v6.sin6_addr,
664 &addr->a.v6.sin6_addr))
665 return addrw;
666 }
667 }
668 return NULL;
669}
670
4db67e80 671void sctp_addr_wq_mgmt(struct net *net, struct sctp_sockaddr_entry *addr, int cmd)
9f7d653b
MH
672{
673 struct sctp_sockaddr_entry *addrw;
674 unsigned long timeo_val;
675
676 /* first, we check if an opposite message already exist in the queue.
677 * If we found such message, it is removed.
678 * This operation is a bit stupid, but the DHCP client attaches the
679 * new address after a couple of addition and deletion of that address
680 */
681
4db67e80 682 spin_lock_bh(&net->sctp.addr_wq_lock);
9f7d653b 683 /* Offsets existing events in addr_wq */
4db67e80 684 addrw = sctp_addr_wq_lookup(net, addr);
9f7d653b
MH
685 if (addrw) {
686 if (addrw->state != cmd) {
bb33381d
DB
687 pr_debug("%s: offsets existing entry for %d, addr:%pISc "
688 "in wq:%p\n", __func__, addrw->state, &addrw->a.sa,
689 &net->sctp.addr_waitq);
690
9f7d653b
MH
691 list_del(&addrw->list);
692 kfree(addrw);
693 }
4db67e80 694 spin_unlock_bh(&net->sctp.addr_wq_lock);
9f7d653b
MH
695 return;
696 }
697
698 /* OK, we have to add the new address to the wait queue */
699 addrw = kmemdup(addr, sizeof(struct sctp_sockaddr_entry), GFP_ATOMIC);
700 if (addrw == NULL) {
4db67e80 701 spin_unlock_bh(&net->sctp.addr_wq_lock);
9f7d653b
MH
702 return;
703 }
704 addrw->state = cmd;
4db67e80 705 list_add_tail(&addrw->list, &net->sctp.addr_waitq);
bb33381d
DB
706
707 pr_debug("%s: add new entry for cmd:%d, addr:%pISc in wq:%p\n",
708 __func__, addrw->state, &addrw->a.sa, &net->sctp.addr_waitq);
9f7d653b 709
4db67e80 710 if (!timer_pending(&net->sctp.addr_wq_timer)) {
9f7d653b
MH
711 timeo_val = jiffies;
712 timeo_val += msecs_to_jiffies(SCTP_ADDRESS_TICK_DELAY);
4db67e80 713 mod_timer(&net->sctp.addr_wq_timer, timeo_val);
9f7d653b 714 }
4db67e80 715 spin_unlock_bh(&net->sctp.addr_wq_lock);
9f7d653b
MH
716}
717
29303547
VY
718/* Event handler for inet address addition/deletion events.
719 * The sctp_local_addr_list needs to be protocted by a spin lock since
720 * multiple notifiers (say IPv4 and IPv6) may be running at the same
721 * time and thus corrupt the list.
722 * The reader side is protected with RCU.
723 */
24123186
AB
724static int sctp_inetaddr_event(struct notifier_block *this, unsigned long ev,
725 void *ptr)
1da177e4 726{
29c7cf96 727 struct in_ifaddr *ifa = (struct in_ifaddr *)ptr;
29303547
VY
728 struct sctp_sockaddr_entry *addr = NULL;
729 struct sctp_sockaddr_entry *temp;
4db67e80 730 struct net *net = dev_net(ifa->ifa_dev->dev);
22626216 731 int found = 0;
1da177e4 732
29c7cf96
SS
733 switch (ev) {
734 case NETDEV_UP:
735 addr = kmalloc(sizeof(struct sctp_sockaddr_entry), GFP_ATOMIC);
736 if (addr) {
737 addr->a.v4.sin_family = AF_INET;
738 addr->a.v4.sin_port = 0;
739 addr->a.v4.sin_addr.s_addr = ifa->ifa_local;
29303547 740 addr->valid = 1;
4db67e80
EB
741 spin_lock_bh(&net->sctp.local_addr_lock);
742 list_add_tail_rcu(&addr->list, &net->sctp.local_addr_list);
743 sctp_addr_wq_mgmt(net, addr, SCTP_ADDR_NEW);
744 spin_unlock_bh(&net->sctp.local_addr_lock);
29c7cf96
SS
745 }
746 break;
747 case NETDEV_DOWN:
4db67e80 748 spin_lock_bh(&net->sctp.local_addr_lock);
29303547 749 list_for_each_entry_safe(addr, temp,
4db67e80 750 &net->sctp.local_addr_list, list) {
a40a7d15
PE
751 if (addr->a.sa.sa_family == AF_INET &&
752 addr->a.v4.sin_addr.s_addr ==
753 ifa->ifa_local) {
4db67e80 754 sctp_addr_wq_mgmt(net, addr, SCTP_ADDR_DEL);
22626216 755 found = 1;
29303547
VY
756 addr->valid = 0;
757 list_del_rcu(&addr->list);
29c7cf96
SS
758 break;
759 }
760 }
4db67e80 761 spin_unlock_bh(&net->sctp.local_addr_lock);
22626216 762 if (found)
1231f0ba 763 kfree_rcu(addr, rcu);
29c7cf96
SS
764 break;
765 }
1da177e4
LT
766
767 return NOTIFY_DONE;
768}
769
770/*
771 * Initialize the control inode/socket with a control endpoint data
772 * structure. This endpoint is reserved exclusively for the OOTB processing.
773 */
2ce95503 774static int sctp_ctl_sock_init(struct net *net)
1da177e4
LT
775{
776 int err;
fb13d9f9 777 sa_family_t family = PF_INET;
1da177e4
LT
778
779 if (sctp_get_pf_specific(PF_INET6))
780 family = PF_INET6;
1da177e4 781
2ce95503
EB
782 err = inet_ctl_sock_create(&net->sctp.ctl_sock, family,
783 SOCK_SEQPACKET, IPPROTO_SCTP, net);
fb13d9f9
BH
784
785 /* If IPv6 socket could not be created, try the IPv4 socket */
786 if (err < 0 && family == PF_INET6)
2ce95503 787 err = inet_ctl_sock_create(&net->sctp.ctl_sock, AF_INET,
fb13d9f9 788 SOCK_SEQPACKET, IPPROTO_SCTP,
2ce95503 789 net);
fb13d9f9 790
1da177e4 791 if (err < 0) {
145ce502 792 pr_err("Failed to create the SCTP control socket\n");
1da177e4
LT
793 return err;
794 }
1da177e4
LT
795 return 0;
796}
797
798/* Register address family specific functions. */
799int sctp_register_af(struct sctp_af *af)
800{
801 switch (af->sa_family) {
802 case AF_INET:
803 if (sctp_af_v4_specific)
804 return 0;
805 sctp_af_v4_specific = af;
806 break;
807 case AF_INET6:
808 if (sctp_af_v6_specific)
809 return 0;
810 sctp_af_v6_specific = af;
811 break;
812 default:
813 return 0;
814 }
815
816 INIT_LIST_HEAD(&af->list);
817 list_add_tail(&af->list, &sctp_address_families);
818 return 1;
819}
820
821/* Get the table of functions for manipulating a particular address
822 * family.
823 */
824struct sctp_af *sctp_get_af_specific(sa_family_t family)
825{
826 switch (family) {
827 case AF_INET:
828 return sctp_af_v4_specific;
829 case AF_INET6:
830 return sctp_af_v6_specific;
831 default:
832 return NULL;
833 }
834}
835
836/* Common code to initialize a AF_INET msg_name. */
837static void sctp_inet_msgname(char *msgname, int *addr_len)
838{
839 struct sockaddr_in *sin;
840
841 sin = (struct sockaddr_in *)msgname;
842 *addr_len = sizeof(struct sockaddr_in);
843 sin->sin_family = AF_INET;
844 memset(sin->sin_zero, 0, sizeof(sin->sin_zero));
845}
846
847/* Copy the primary address of the peer primary address as the msg_name. */
848static void sctp_inet_event_msgname(struct sctp_ulpevent *event, char *msgname,
849 int *addr_len)
850{
851 struct sockaddr_in *sin, *sinfrom;
852
853 if (msgname) {
854 struct sctp_association *asoc;
855
856 asoc = event->asoc;
857 sctp_inet_msgname(msgname, addr_len);
858 sin = (struct sockaddr_in *)msgname;
859 sinfrom = &asoc->peer.primary_addr.v4;
860 sin->sin_port = htons(asoc->peer.port);
861 sin->sin_addr.s_addr = sinfrom->sin_addr.s_addr;
862 }
863}
864
865/* Initialize and copy out a msgname from an inbound skb. */
866static void sctp_inet_skb_msgname(struct sk_buff *skb, char *msgname, int *len)
867{
1da177e4 868 if (msgname) {
2c0fd387
ACM
869 struct sctphdr *sh = sctp_hdr(skb);
870 struct sockaddr_in *sin = (struct sockaddr_in *)msgname;
871
1da177e4 872 sctp_inet_msgname(msgname, len);
1da177e4 873 sin->sin_port = sh->source;
eddc9ec5 874 sin->sin_addr.s_addr = ip_hdr(skb)->saddr;
1da177e4
LT
875 }
876}
877
878/* Do we support this AF? */
879static int sctp_inet_af_supported(sa_family_t family, struct sctp_sock *sp)
880{
881 /* PF_INET only supports AF_INET addresses. */
a02cec21 882 return AF_INET == family;
1da177e4
LT
883}
884
885/* Address matching with wildcards allowed. */
886static int sctp_inet_cmp_addr(const union sctp_addr *addr1,
887 const union sctp_addr *addr2,
888 struct sctp_sock *opt)
889{
890 /* PF_INET only supports AF_INET addresses. */
891 if (addr1->sa.sa_family != addr2->sa.sa_family)
892 return 0;
e6f1cebf
AV
893 if (htonl(INADDR_ANY) == addr1->v4.sin_addr.s_addr ||
894 htonl(INADDR_ANY) == addr2->v4.sin_addr.s_addr)
1da177e4
LT
895 return 1;
896 if (addr1->v4.sin_addr.s_addr == addr2->v4.sin_addr.s_addr)
897 return 1;
898
899 return 0;
900}
901
902/* Verify that provided sockaddr looks bindable. Common verification has
903 * already been taken care of.
904 */
905static int sctp_inet_bind_verify(struct sctp_sock *opt, union sctp_addr *addr)
906{
907 return sctp_v4_available(addr, opt);
908}
909
910/* Verify that sockaddr looks sendable. Common verification has already
911 * been taken care of.
912 */
913static int sctp_inet_send_verify(struct sctp_sock *opt, union sctp_addr *addr)
914{
915 return 1;
916}
917
918/* Fill in Supported Address Type information for INIT and INIT-ACK
919 * chunks. Returns number of addresses supported.
920 */
921static int sctp_inet_supported_addrs(const struct sctp_sock *opt,
3dbe8656 922 __be16 *types)
1da177e4
LT
923{
924 types[0] = SCTP_PARAM_IPV4_ADDRESS;
925 return 1;
926}
927
928/* Wrapper routine that calls the ip transmit routine. */
929static inline int sctp_v4_xmit(struct sk_buff *skb,
f880374c 930 struct sctp_transport *transport)
1da177e4 931{
f880374c
HX
932 struct inet_sock *inet = inet_sk(skb->sk);
933
bb33381d
DB
934 pr_debug("%s: skb:%p, len:%d, src:%pI4, dst:%pI4\n", __func__, skb,
935 skb->len, &transport->fl.u.ip4.saddr, &transport->fl.u.ip4.daddr);
1da177e4 936
f880374c
HX
937 inet->pmtudisc = transport->param_flags & SPP_PMTUD_ENABLE ?
938 IP_PMTUDISC_DO : IP_PMTUDISC_DONT;
939
b01a2407 940 SCTP_INC_STATS(sock_net(&inet->sk), SCTP_MIB_OUTSCTPPACKS);
bb33381d 941
b0270e91 942 return ip_queue_xmit(&inet->sk, skb, &transport->fl);
1da177e4
LT
943}
944
15efbe76 945static struct sctp_af sctp_af_inet;
1da177e4
LT
946
947static struct sctp_pf sctp_pf_inet = {
948 .event_msgname = sctp_inet_event_msgname,
949 .skb_msgname = sctp_inet_skb_msgname,
950 .af_supported = sctp_inet_af_supported,
951 .cmp_addr = sctp_inet_cmp_addr,
952 .bind_verify = sctp_inet_bind_verify,
953 .send_verify = sctp_inet_send_verify,
954 .supported_addrs = sctp_inet_supported_addrs,
955 .create_accept_sk = sctp_v4_create_accept_sk,
299ee123
JG
956 .addr_to_user = sctp_v4_addr_to_user,
957 .to_sk_saddr = sctp_v4_to_sk_saddr,
958 .to_sk_daddr = sctp_v4_to_sk_daddr,
15efbe76 959 .af = &sctp_af_inet
1da177e4
LT
960};
961
962/* Notifier for inetaddr addition/deletion events. */
963static struct notifier_block sctp_inetaddr_notifier = {
964 .notifier_call = sctp_inetaddr_event,
965};
966
967/* Socket operations. */
90ddc4f0 968static const struct proto_ops inet_seqpacket_ops = {
543d9cfe
ACM
969 .family = PF_INET,
970 .owner = THIS_MODULE,
971 .release = inet_release, /* Needs to be wrapped... */
972 .bind = inet_bind,
973 .connect = inet_dgram_connect,
974 .socketpair = sock_no_socketpair,
975 .accept = inet_accept,
976 .getname = inet_getname, /* Semantics are different. */
977 .poll = sctp_poll,
978 .ioctl = inet_ioctl,
979 .listen = sctp_inet_listen,
980 .shutdown = inet_shutdown, /* Looks harmless. */
981 .setsockopt = sock_common_setsockopt, /* IP_SOL IP_OPTION is a problem */
982 .getsockopt = sock_common_getsockopt,
983 .sendmsg = inet_sendmsg,
fd2d180a 984 .recvmsg = inet_recvmsg,
543d9cfe
ACM
985 .mmap = sock_no_mmap,
986 .sendpage = sock_no_sendpage,
3fdadf7d 987#ifdef CONFIG_COMPAT
543d9cfe
ACM
988 .compat_setsockopt = compat_sock_common_setsockopt,
989 .compat_getsockopt = compat_sock_common_getsockopt,
3fdadf7d 990#endif
1da177e4
LT
991};
992
993/* Registration with AF_INET family. */
994static struct inet_protosw sctp_seqpacket_protosw = {
995 .type = SOCK_SEQPACKET,
996 .protocol = IPPROTO_SCTP,
997 .prot = &sctp_prot,
998 .ops = &inet_seqpacket_ops,
1da177e4
LT
999 .flags = SCTP_PROTOSW_FLAG
1000};
1001static struct inet_protosw sctp_stream_protosw = {
1002 .type = SOCK_STREAM,
1003 .protocol = IPPROTO_SCTP,
1004 .prot = &sctp_prot,
1005 .ops = &inet_seqpacket_ops,
1da177e4
LT
1006 .flags = SCTP_PROTOSW_FLAG
1007};
1008
1009/* Register with IP layer. */
32613090 1010static const struct net_protocol sctp_protocol = {
1da177e4
LT
1011 .handler = sctp_rcv,
1012 .err_handler = sctp_v4_err,
1013 .no_policy = 1,
bb2db45b 1014 .netns_ok = 1,
8ed1dc44 1015 .icmp_strict_tag_validation = 1,
1da177e4
LT
1016};
1017
1018/* IPv4 address related functions. */
15efbe76 1019static struct sctp_af sctp_af_inet = {
543d9cfe
ACM
1020 .sa_family = AF_INET,
1021 .sctp_xmit = sctp_v4_xmit,
1022 .setsockopt = ip_setsockopt,
1023 .getsockopt = ip_getsockopt,
1024 .get_dst = sctp_v4_get_dst,
1025 .get_saddr = sctp_v4_get_saddr,
1026 .copy_addrlist = sctp_v4_copy_addrlist,
1027 .from_skb = sctp_v4_from_skb,
1028 .from_sk = sctp_v4_from_sk,
543d9cfe
ACM
1029 .from_addr_param = sctp_v4_from_addr_param,
1030 .to_addr_param = sctp_v4_to_addr_param,
543d9cfe
ACM
1031 .cmp_addr = sctp_v4_cmp_addr,
1032 .addr_valid = sctp_v4_addr_valid,
1033 .inaddr_any = sctp_v4_inaddr_any,
1034 .is_any = sctp_v4_is_any,
1035 .available = sctp_v4_available,
1036 .scope = sctp_v4_scope,
1037 .skb_iif = sctp_v4_skb_iif,
1038 .is_ce = sctp_v4_is_ce,
1039 .seq_dump_addr = sctp_v4_seq_dump_addr,
b9031d9d 1040 .ecn_capable = sctp_v4_ecn_capable,
543d9cfe
ACM
1041 .net_header_len = sizeof(struct iphdr),
1042 .sockaddr_len = sizeof(struct sockaddr_in),
3fdadf7d 1043#ifdef CONFIG_COMPAT
543d9cfe
ACM
1044 .compat_setsockopt = compat_ip_setsockopt,
1045 .compat_getsockopt = compat_ip_getsockopt,
3fdadf7d 1046#endif
1da177e4
LT
1047};
1048
8d72651d 1049struct sctp_pf *sctp_get_pf_specific(sa_family_t family)
1050{
1da177e4
LT
1051 switch (family) {
1052 case PF_INET:
1053 return sctp_pf_inet_specific;
1054 case PF_INET6:
1055 return sctp_pf_inet6_specific;
1056 default:
1057 return NULL;
1058 }
1059}
1060
1061/* Register the PF specific function table. */
1062int sctp_register_pf(struct sctp_pf *pf, sa_family_t family)
1063{
1064 switch (family) {
1065 case PF_INET:
1066 if (sctp_pf_inet_specific)
1067 return 0;
1068 sctp_pf_inet_specific = pf;
1069 break;
1070 case PF_INET6:
1071 if (sctp_pf_inet6_specific)
1072 return 0;
1073 sctp_pf_inet6_specific = pf;
1074 break;
1075 default:
1076 return 0;
1077 }
1078 return 1;
1079}
1080
b01a2407 1081static inline int init_sctp_mibs(struct net *net)
996b1dba 1082{
698365fa
WC
1083 net->sctp.sctp_statistics = alloc_percpu(struct sctp_mib);
1084 if (!net->sctp.sctp_statistics)
1085 return -ENOMEM;
1086 return 0;
1da177e4
LT
1087}
1088
b01a2407 1089static inline void cleanup_sctp_mibs(struct net *net)
1da177e4 1090{
698365fa 1091 free_percpu(net->sctp.sctp_statistics);
1da177e4
LT
1092}
1093
270637ab
VY
1094static void sctp_v4_pf_init(void)
1095{
1096 /* Initialize the SCTP specific PF functions. */
1097 sctp_register_pf(&sctp_pf_inet, PF_INET);
1098 sctp_register_af(&sctp_af_inet);
1099}
1100
1101static void sctp_v4_pf_exit(void)
1102{
1103 list_del(&sctp_af_inet.list);
1104}
1105
1106static int sctp_v4_protosw_init(void)
1107{
1108 int rc;
1109
1110 rc = proto_register(&sctp_prot, 1);
1111 if (rc)
1112 return rc;
1113
1114 /* Register SCTP(UDP and TCP style) with socket layer. */
1115 inet_register_protosw(&sctp_seqpacket_protosw);
1116 inet_register_protosw(&sctp_stream_protosw);
1117
1118 return 0;
1119}
1120
1121static void sctp_v4_protosw_exit(void)
1122{
1123 inet_unregister_protosw(&sctp_stream_protosw);
1124 inet_unregister_protosw(&sctp_seqpacket_protosw);
1125 proto_unregister(&sctp_prot);
1126}
1127
1128static int sctp_v4_add_protocol(void)
1129{
1130 /* Register notifier for inet address additions/deletions. */
1131 register_inetaddr_notifier(&sctp_inetaddr_notifier);
1132
1133 /* Register SCTP with inet layer. */
1134 if (inet_add_protocol(&sctp_protocol, IPPROTO_SCTP) < 0)
1135 return -EAGAIN;
1136
1137 return 0;
1138}
1139
1140static void sctp_v4_del_protocol(void)
1141{
1142 inet_del_protocol(&sctp_protocol, IPPROTO_SCTP);
1143 unregister_inetaddr_notifier(&sctp_inetaddr_notifier);
1144}
1145
8e2d61e0 1146static int __net_init sctp_defaults_init(struct net *net)
4db67e80 1147{
2ce95503
EB
1148 int status;
1149
e1fc3b14
EB
1150 /*
1151 * 14. Suggested SCTP Protocol Parameter Values
1152 */
1153 /* The following protocol parameters are RECOMMENDED: */
1154 /* RTO.Initial - 3 seconds */
1155 net->sctp.rto_initial = SCTP_RTO_INITIAL;
1156 /* RTO.Min - 1 second */
1157 net->sctp.rto_min = SCTP_RTO_MIN;
1158 /* RTO.Max - 60 seconds */
1159 net->sctp.rto_max = SCTP_RTO_MAX;
1160 /* RTO.Alpha - 1/8 */
1161 net->sctp.rto_alpha = SCTP_RTO_ALPHA;
1162 /* RTO.Beta - 1/4 */
1163 net->sctp.rto_beta = SCTP_RTO_BETA;
1164
1165 /* Valid.Cookie.Life - 60 seconds */
1166 net->sctp.valid_cookie_life = SCTP_DEFAULT_COOKIE_LIFE;
1167
1168 /* Whether Cookie Preservative is enabled(1) or not(0) */
1169 net->sctp.cookie_preserve_enable = 1;
1170
3c68198e 1171 /* Default sctp sockets to use md5 as their hmac alg */
0d0863b0 1172#if defined (CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5)
3c68198e 1173 net->sctp.sctp_hmac_alg = "md5";
0d0863b0 1174#elif defined (CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1)
3c68198e
NH
1175 net->sctp.sctp_hmac_alg = "sha1";
1176#else
1177 net->sctp.sctp_hmac_alg = NULL;
1178#endif
1179
e1fc3b14
EB
1180 /* Max.Burst - 4 */
1181 net->sctp.max_burst = SCTP_DEFAULT_MAX_BURST;
1182
566178f8
ZY
1183 /* Enable pf state by default */
1184 net->sctp.pf_enable = 1;
1185
e1fc3b14
EB
1186 /* Association.Max.Retrans - 10 attempts
1187 * Path.Max.Retrans - 5 attempts (per destination address)
1188 * Max.Init.Retransmits - 8 attempts
1189 */
1190 net->sctp.max_retrans_association = 10;
1191 net->sctp.max_retrans_path = 5;
1192 net->sctp.max_retrans_init = 8;
1193
1194 /* Sendbuffer growth - do per-socket accounting */
1195 net->sctp.sndbuf_policy = 0;
1196
1197 /* Rcvbuffer growth - do per-socket accounting */
1198 net->sctp.rcvbuf_policy = 0;
1199
1200 /* HB.interval - 30 seconds */
1201 net->sctp.hb_interval = SCTP_DEFAULT_TIMEOUT_HEARTBEAT;
1202
1203 /* delayed SACK timeout */
1204 net->sctp.sack_timeout = SCTP_DEFAULT_TIMEOUT_SACK;
1205
1206 /* Disable ADDIP by default. */
1207 net->sctp.addip_enable = 0;
1208 net->sctp.addip_noauth = 0;
1209 net->sctp.default_auto_asconf = 0;
1210
1211 /* Enable PR-SCTP by default. */
1212 net->sctp.prsctp_enable = 1;
1213
c28445c3
XL
1214 /* Disable RECONF by default. */
1215 net->sctp.reconf_enable = 0;
1216
e1fc3b14
EB
1217 /* Disable AUTH by default. */
1218 net->sctp.auth_enable = 0;
1219
1220 /* Set SCOPE policy to enabled */
1221 net->sctp.scope_policy = SCTP_SCOPE_POLICY_ENABLE;
1222
1223 /* Set the default rwnd update threshold */
1224 net->sctp.rwnd_upd_shift = SCTP_DEFAULT_RWND_SHIFT;
1225
1226 /* Initialize maximum autoclose timeout. */
1227 net->sctp.max_autoclose = INT_MAX / HZ;
1228
ebb7e95d
EB
1229 status = sctp_sysctl_net_register(net);
1230 if (status)
1231 goto err_sysctl_register;
1232
b01a2407
EB
1233 /* Allocate and initialise sctp mibs. */
1234 status = init_sctp_mibs(net);
1235 if (status)
1236 goto err_init_mibs;
1237
d47d08c8 1238#ifdef CONFIG_PROC_FS
13d782f6
EB
1239 /* Initialize proc fs directory. */
1240 status = sctp_proc_init(net);
1241 if (status)
1242 goto err_init_proc;
d47d08c8 1243#endif
13d782f6
EB
1244
1245 sctp_dbg_objcnt_init(net);
1246
4db67e80
EB
1247 /* Initialize the local address list. */
1248 INIT_LIST_HEAD(&net->sctp.local_addr_list);
1249 spin_lock_init(&net->sctp.local_addr_lock);
1250 sctp_get_local_addr_list(net);
1251
1252 /* Initialize the address event list */
1253 INIT_LIST_HEAD(&net->sctp.addr_waitq);
1254 INIT_LIST_HEAD(&net->sctp.auto_asconf_splist);
1255 spin_lock_init(&net->sctp.addr_wq_lock);
1256 net->sctp.addr_wq_timer.expires = 0;
9c3b5751 1257 timer_setup(&net->sctp.addr_wq_timer, sctp_addr_wq_timeout_handler, 0);
4db67e80
EB
1258
1259 return 0;
2ce95503 1260
7ae665f1 1261#ifdef CONFIG_PROC_FS
13d782f6 1262err_init_proc:
b01a2407 1263 cleanup_sctp_mibs(net);
7ae665f1 1264#endif
b01a2407 1265err_init_mibs:
ebb7e95d
EB
1266 sctp_sysctl_net_unregister(net);
1267err_sysctl_register:
2ce95503 1268 return status;
4db67e80
EB
1269}
1270
8e2d61e0 1271static void __net_exit sctp_defaults_exit(struct net *net)
4db67e80
EB
1272{
1273 /* Free the local address list */
1274 sctp_free_addr_wq(net);
1275 sctp_free_local_addr_list(net);
2ce95503 1276
d47d08c8
AV
1277#ifdef CONFIG_PROC_FS
1278 remove_proc_subtree("sctp", net->proc_net);
1279 net->sctp.proc_net_sctp = NULL;
1280#endif
b01a2407 1281 cleanup_sctp_mibs(net);
ebb7e95d 1282 sctp_sysctl_net_unregister(net);
4db67e80
EB
1283}
1284
8e2d61e0
MRL
1285static struct pernet_operations sctp_defaults_ops = {
1286 .init = sctp_defaults_init,
1287 .exit = sctp_defaults_exit,
1288};
1289
1290static int __net_init sctp_ctrlsock_init(struct net *net)
1291{
1292 int status;
1293
1294 /* Initialize the control inode/socket for handling OOTB packets. */
1295 status = sctp_ctl_sock_init(net);
1296 if (status)
1297 pr_err("Failed to initialize the SCTP control sock\n");
1298
1299 return status;
1300}
1301
1302static void __net_init sctp_ctrlsock_exit(struct net *net)
1303{
1304 /* Free the control endpoint. */
1305 inet_ctl_sock_destroy(net->sctp.ctl_sock);
1306}
1307
1308static struct pernet_operations sctp_ctrlsock_ops = {
1309 .init = sctp_ctrlsock_init,
1310 .exit = sctp_ctrlsock_exit,
4db67e80
EB
1311};
1312
1da177e4 1313/* Initialize the universe into something sensible. */
dda91928 1314static __init int sctp_init(void)
1da177e4
LT
1315{
1316 int i;
1317 int status = -EINVAL;
1318 unsigned long goal;
4d93df0a
NH
1319 unsigned long limit;
1320 int max_share;
1da177e4 1321 int order;
d9749fb5
NH
1322 int num_entries;
1323 int max_entry_order;
1da177e4 1324
b4772ef8 1325 sock_skb_cb_check_size(sizeof(struct sctp_ulpevent));
1da177e4 1326
827bf122 1327 /* Allocate bind_bucket and chunk caches. */
1da177e4
LT
1328 status = -ENOBUFS;
1329 sctp_bucket_cachep = kmem_cache_create("sctp_bind_bucket",
1330 sizeof(struct sctp_bind_bucket),
1331 0, SLAB_HWCACHE_ALIGN,
20c2df83 1332 NULL);
1da177e4 1333 if (!sctp_bucket_cachep)
827bf122 1334 goto out;
1da177e4
LT
1335
1336 sctp_chunk_cachep = kmem_cache_create("sctp_chunk",
1337 sizeof(struct sctp_chunk),
1338 0, SLAB_HWCACHE_ALIGN,
20c2df83 1339 NULL);
1da177e4
LT
1340 if (!sctp_chunk_cachep)
1341 goto err_chunk_cachep;
1342
908c7f19 1343 status = percpu_counter_init(&sctp_sockets_allocated, 0, GFP_KERNEL);
632c928a
EB
1344 if (status)
1345 goto err_percpu_counter_init;
1346
1da177e4
LT
1347 /* Implementation specific variables. */
1348
1349 /* Initialize default stream count setup information. */
1350 sctp_max_instreams = SCTP_DEFAULT_INSTREAMS;
1351 sctp_max_outstreams = SCTP_DEFAULT_OUTSTREAMS;
1352
1353 /* Initialize handle used for association ids. */
1354 idr_init(&sctp_assocs_id);
1355
f03d78db 1356 limit = nr_free_buffer_pages() / 8;
4d93df0a
NH
1357 limit = max(limit, 128UL);
1358 sysctl_sctp_mem[0] = limit / 4 * 3;
1359 sysctl_sctp_mem[1] = limit;
1360 sysctl_sctp_mem[2] = sysctl_sctp_mem[0] * 2;
1361
1362 /* Set per-socket limits to no more than 1/128 the pressure threshold*/
1363 limit = (sysctl_sctp_mem[1]) << (PAGE_SHIFT - 7);
1364 max_share = min(4UL*1024*1024, limit);
1365
845525a6 1366 sysctl_sctp_rmem[0] = SK_MEM_QUANTUM; /* give each asoc 1 page min */
87fb4b7b 1367 sysctl_sctp_rmem[1] = 1500 * SKB_TRUESIZE(1);
4d93df0a
NH
1368 sysctl_sctp_rmem[2] = max(sysctl_sctp_rmem[1], max_share);
1369
3ab224be 1370 sysctl_sctp_wmem[0] = SK_MEM_QUANTUM;
4d93df0a
NH
1371 sysctl_sctp_wmem[1] = 16*1024;
1372 sysctl_sctp_wmem[2] = max(64*1024, max_share);
1373
1da177e4
LT
1374 /* Size and allocate the association hash table.
1375 * The methodology is similar to that of the tcp hash tables.
d9749fb5 1376 * Though not identical. Start by getting a goal size
1da177e4 1377 */
4481374c
JB
1378 if (totalram_pages >= (128 * 1024))
1379 goal = totalram_pages >> (22 - PAGE_SHIFT);
1da177e4 1380 else
4481374c 1381 goal = totalram_pages >> (24 - PAGE_SHIFT);
1da177e4 1382
d9749fb5
NH
1383 /* Then compute the page order for said goal */
1384 order = get_order(goal);
1385
1386 /* Now compute the required page order for the maximum sized table we
1387 * want to create
1388 */
1389 max_entry_order = get_order(MAX_SCTP_PORT_HASH_ENTRIES *
1390 sizeof(struct sctp_bind_hashbucket));
1391
1392 /* Limit the page order by that maximum hash table size */
1393 order = min(order, max_entry_order);
1da177e4 1394
1da177e4
LT
1395 /* Allocate and initialize the endpoint hash table. */
1396 sctp_ep_hashsize = 64;
3b77d661 1397 sctp_ep_hashtable =
1da177e4
LT
1398 kmalloc(64 * sizeof(struct sctp_hashbucket), GFP_KERNEL);
1399 if (!sctp_ep_hashtable) {
145ce502 1400 pr_err("Failed endpoint_hash alloc\n");
1da177e4
LT
1401 status = -ENOMEM;
1402 goto err_ehash_alloc;
1403 }
1404 for (i = 0; i < sctp_ep_hashsize; i++) {
1405 rwlock_init(&sctp_ep_hashtable[i].lock);
d970dbf8 1406 INIT_HLIST_HEAD(&sctp_ep_hashtable[i].chain);
1da177e4
LT
1407 }
1408
d9749fb5
NH
1409 /* Allocate and initialize the SCTP port hash table.
1410 * Note that order is initalized to start at the max sized
1411 * table we want to support. If we can't get that many pages
1412 * reduce the order and try again
1413 */
1da177e4 1414 do {
1da177e4 1415 sctp_port_hashtable = (struct sctp_bind_hashbucket *)
6857a02a 1416 __get_free_pages(GFP_KERNEL | __GFP_NOWARN, order);
1da177e4 1417 } while (!sctp_port_hashtable && --order > 0);
d9749fb5 1418
1da177e4 1419 if (!sctp_port_hashtable) {
145ce502 1420 pr_err("Failed bind hash alloc\n");
1da177e4
LT
1421 status = -ENOMEM;
1422 goto err_bhash_alloc;
1423 }
d9749fb5
NH
1424
1425 /* Now compute the number of entries that will fit in the
1426 * port hash space we allocated
1427 */
1428 num_entries = (1UL << order) * PAGE_SIZE /
1429 sizeof(struct sctp_bind_hashbucket);
1430
1431 /* And finish by rounding it down to the nearest power of two
1432 * this wastes some memory of course, but its needed because
1433 * the hash function operates based on the assumption that
1434 * that the number of entries is a power of two
1435 */
1436 sctp_port_hashsize = rounddown_pow_of_two(num_entries);
1437
1da177e4
LT
1438 for (i = 0; i < sctp_port_hashsize; i++) {
1439 spin_lock_init(&sctp_port_hashtable[i].lock);
d970dbf8 1440 INIT_HLIST_HEAD(&sctp_port_hashtable[i].chain);
1da177e4
LT
1441 }
1442
a5e27d18
WY
1443 status = sctp_transport_hashtable_init();
1444 if (status)
4f008781
XL
1445 goto err_thash_alloc;
1446
d9749fb5
NH
1447 pr_info("Hash tables configured (bind %d/%d)\n", sctp_port_hashsize,
1448 num_entries);
1da177e4 1449
1da177e4
LT
1450 sctp_sysctl_register();
1451
1452 INIT_LIST_HEAD(&sctp_address_families);
270637ab
VY
1453 sctp_v4_pf_init();
1454 sctp_v6_pf_init();
1ba896f6 1455 sctp_sched_ops_init();
1da177e4 1456
8e2d61e0
MRL
1457 status = register_pernet_subsys(&sctp_defaults_ops);
1458 if (status)
1459 goto err_register_defaults;
827bf122 1460
8e2d61e0 1461 status = sctp_v4_protosw_init();
1da177e4 1462 if (status)
270637ab
VY
1463 goto err_protosw_init;
1464
1465 status = sctp_v6_protosw_init();
1466 if (status)
1467 goto err_v6_protosw_init;
1da177e4 1468
8e2d61e0 1469 status = register_pernet_subsys(&sctp_ctrlsock_ops);
4db67e80 1470 if (status)
8e2d61e0 1471 goto err_register_ctrlsock;
4db67e80 1472
270637ab
VY
1473 status = sctp_v4_add_protocol();
1474 if (status)
827bf122 1475 goto err_add_protocol;
827bf122
SS
1476
1477 /* Register SCTP with inet6 layer. */
1478 status = sctp_v6_add_protocol();
1479 if (status)
1480 goto err_v6_add_protocol;
1481
90017acc
MRL
1482 if (sctp_offload_init() < 0)
1483 pr_crit("%s: Cannot add SCTP protocol offload\n", __func__);
1484
1da177e4
LT
1485out:
1486 return status;
827bf122 1487err_v6_add_protocol:
270637ab 1488 sctp_v4_del_protocol();
d1dd5247 1489err_add_protocol:
8e2d61e0
MRL
1490 unregister_pernet_subsys(&sctp_ctrlsock_ops);
1491err_register_ctrlsock:
270637ab
VY
1492 sctp_v6_protosw_exit();
1493err_v6_protosw_init:
1494 sctp_v4_protosw_exit();
1495err_protosw_init:
8e2d61e0
MRL
1496 unregister_pernet_subsys(&sctp_defaults_ops);
1497err_register_defaults:
270637ab
VY
1498 sctp_v4_pf_exit();
1499 sctp_v6_pf_exit();
1da177e4 1500 sctp_sysctl_unregister();
1da177e4
LT
1501 free_pages((unsigned long)sctp_port_hashtable,
1502 get_order(sctp_port_hashsize *
1503 sizeof(struct sctp_bind_hashbucket)));
1504err_bhash_alloc:
4f008781
XL
1505 sctp_transport_hashtable_destroy();
1506err_thash_alloc:
1da177e4
LT
1507 kfree(sctp_ep_hashtable);
1508err_ehash_alloc:
632c928a
EB
1509 percpu_counter_destroy(&sctp_sockets_allocated);
1510err_percpu_counter_init:
1da177e4
LT
1511 kmem_cache_destroy(sctp_chunk_cachep);
1512err_chunk_cachep:
1513 kmem_cache_destroy(sctp_bucket_cachep);
1da177e4
LT
1514 goto out;
1515}
1516
1517/* Exit handler for the SCTP protocol. */
dda91928 1518static __exit void sctp_exit(void)
1da177e4
LT
1519{
1520 /* BUG. This should probably do something useful like clean
1521 * up all the remaining associations and all that memory.
1522 */
1523
827bf122
SS
1524 /* Unregister with inet6/inet layers. */
1525 sctp_v6_del_protocol();
270637ab 1526 sctp_v4_del_protocol();
1da177e4 1527
8e2d61e0 1528 unregister_pernet_subsys(&sctp_ctrlsock_ops);
4db67e80 1529
270637ab
VY
1530 /* Free protosw registrations */
1531 sctp_v6_protosw_exit();
1532 sctp_v4_protosw_exit();
1533
8e2d61e0
MRL
1534 unregister_pernet_subsys(&sctp_defaults_ops);
1535
827bf122 1536 /* Unregister with socket layer. */
270637ab
VY
1537 sctp_v6_pf_exit();
1538 sctp_v4_pf_exit();
827bf122 1539
1da177e4 1540 sctp_sysctl_unregister();
1da177e4 1541
1da177e4
LT
1542 free_pages((unsigned long)sctp_port_hashtable,
1543 get_order(sctp_port_hashsize *
1544 sizeof(struct sctp_bind_hashbucket)));
b5eff712 1545 kfree(sctp_ep_hashtable);
4f008781 1546 sctp_transport_hashtable_destroy();
1da177e4 1547
632c928a 1548 percpu_counter_destroy(&sctp_sockets_allocated);
1da177e4 1549
eaa184a1
JDB
1550 rcu_barrier(); /* Wait for completion of call_rcu()'s */
1551
827bf122
SS
1552 kmem_cache_destroy(sctp_chunk_cachep);
1553 kmem_cache_destroy(sctp_bucket_cachep);
1da177e4
LT
1554}
1555
1556module_init(sctp_init);
1557module_exit(sctp_exit);
1558
bb97d31f
ACM
1559/*
1560 * __stringify doesn't likes enums, so use IPPROTO_SCTP value (132) directly.
1561 */
1562MODULE_ALIAS("net-pf-" __stringify(PF_INET) "-proto-132");
882a382c 1563MODULE_ALIAS("net-pf-" __stringify(PF_INET6) "-proto-132");
91705c61 1564MODULE_AUTHOR("Linux Kernel SCTP developers <linux-sctp@vger.kernel.org>");
1da177e4 1565MODULE_DESCRIPTION("Support for the SCTP protocol (RFC2960)");
71acc0dd
DM
1566module_param_named(no_checksums, sctp_checksum_disable, bool, 0644);
1567MODULE_PARM_DESC(no_checksums, "Disable checksums computing and verification");
1da177e4 1568MODULE_LICENSE("GPL");