1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * sysctl_net_ipv4.c: sysctl interface to net IPV4 subsystem. 4 * 5 * Begun April 1, 1996, Mike Shaver. 6 * Added /proc/sys/net/ipv4 directory entry (empty =) ). [MS] 7 */ 8 9 #include <linux/mm.h> 10 #include <linux/module.h> 11 #include <linux/sysctl.h> 12 #include <linux/igmp.h> 13 #include <linux/inetdevice.h> 14 #include <linux/seqlock.h> 15 #include <linux/init.h> 16 #include <linux/slab.h> 17 #include <linux/nsproxy.h> 18 #include <linux/swap.h> 19 #include <net/snmp.h> 20 #include <net/icmp.h> 21 #include <net/ip.h> 22 #include <net/route.h> 23 #include <net/tcp.h> 24 #include <net/udp.h> 25 #include <net/cipso_ipv4.h> 26 #include <net/inet_frag.h> 27 #include <net/ping.h> 28 #include <net/protocol.h> 29 #include <net/netevent.h> 30 31 static int zero; 32 static int one = 1; 33 static int two = 2; 34 static int four = 4; 35 static int thousand = 1000; 36 static int gso_max_segs = GSO_MAX_SEGS; 37 static int tcp_retr1_max = 255; 38 static int ip_local_port_range_min[] = { 1, 1 }; 39 static int ip_local_port_range_max[] = { 65535, 65535 }; 40 static int tcp_adv_win_scale_min = -31; 41 static int tcp_adv_win_scale_max = 31; 42 static int ip_privileged_port_min; 43 static int ip_privileged_port_max = 65535; 44 static int ip_ttl_min = 1; 45 static int ip_ttl_max = 255; 46 static int tcp_syn_retries_min = 1; 47 static int tcp_syn_retries_max = MAX_TCP_SYNCNT; 48 static int ip_ping_group_range_min[] = { 0, 0 }; 49 static int ip_ping_group_range_max[] = { GID_T_MAX, GID_T_MAX }; 50 static int comp_sack_nr_max = 255; 51 static u32 u32_max_div_HZ = UINT_MAX / HZ; 52 static int one_day_secs = 24 * 3600; 53 54 /* obsolete */ 55 static int sysctl_tcp_low_latency __read_mostly; 56 57 /* Update system visible IP port range */ 58 static void set_local_port_range(struct net *net, int range[2]) 59 { 60 bool same_parity = !((range[0] ^ range[1]) & 1); 61 62 write_seqlock_bh(&net->ipv4.ip_local_ports.lock); 63 if (same_parity && !net->ipv4.ip_local_ports.warned) { 64 net->ipv4.ip_local_ports.warned = true; 65 pr_err_ratelimited("ip_local_port_range: prefer different parity for start/end values.\n"); 66 } 67 net->ipv4.ip_local_ports.range[0] = range[0]; 68 net->ipv4.ip_local_ports.range[1] = range[1]; 69 write_sequnlock_bh(&net->ipv4.ip_local_ports.lock); 70 } 71 72 /* Validate changes from /proc interface. */ 73 static int ipv4_local_port_range(struct ctl_table *table, int write, 74 void __user *buffer, 75 size_t *lenp, loff_t *ppos) 76 { 77 struct net *net = 78 container_of(table->data, struct net, ipv4.ip_local_ports.range); 79 int ret; 80 int range[2]; 81 struct ctl_table tmp = { 82 .data = &range, 83 .maxlen = sizeof(range), 84 .mode = table->mode, 85 .extra1 = &ip_local_port_range_min, 86 .extra2 = &ip_local_port_range_max, 87 }; 88 89 inet_get_local_port_range(net, &range[0], &range[1]); 90 91 ret = proc_dointvec_minmax(&tmp, write, buffer, lenp, ppos); 92 93 if (write && ret == 0) { 94 /* Ensure that the upper limit is not smaller than the lower, 95 * and that the lower does not encroach upon the privileged 96 * port limit. 97 */ 98 if ((range[1] < range[0]) || 99 (range[0] < net->ipv4.sysctl_ip_prot_sock)) 100 ret = -EINVAL; 101 else 102 set_local_port_range(net, range); 103 } 104 105 return ret; 106 } 107 108 /* Validate changes from /proc interface. */ 109 static int ipv4_privileged_ports(struct ctl_table *table, int write, 110 void __user *buffer, size_t *lenp, loff_t *ppos) 111 { 112 struct net *net = container_of(table->data, struct net, 113 ipv4.sysctl_ip_prot_sock); 114 int ret; 115 int pports; 116 int range[2]; 117 struct ctl_table tmp = { 118 .data = &pports, 119 .maxlen = sizeof(pports), 120 .mode = table->mode, 121 .extra1 = &ip_privileged_port_min, 122 .extra2 = &ip_privileged_port_max, 123 }; 124 125 pports = net->ipv4.sysctl_ip_prot_sock; 126 127 ret = proc_dointvec_minmax(&tmp, write, buffer, lenp, ppos); 128 129 if (write && ret == 0) { 130 inet_get_local_port_range(net, &range[0], &range[1]); 131 /* Ensure that the local port range doesn't overlap with the 132 * privileged port range. 133 */ 134 if (range[0] < pports) 135 ret = -EINVAL; 136 else 137 net->ipv4.sysctl_ip_prot_sock = pports; 138 } 139 140 return ret; 141 } 142 143 static void inet_get_ping_group_range_table(struct ctl_table *table, kgid_t *low, kgid_t *high) 144 { 145 kgid_t *data = table->data; 146 struct net *net = 147 container_of(table->data, struct net, ipv4.ping_group_range.range); 148 unsigned int seq; 149 do { 150 seq = read_seqbegin(&net->ipv4.ping_group_range.lock); 151 152 *low = data[0]; 153 *high = data[1]; 154 } while (read_seqretry(&net->ipv4.ping_group_range.lock, seq)); 155 } 156 157 /* Update system visible IP port range */ 158 static void set_ping_group_range(struct ctl_table *table, kgid_t low, kgid_t high) 159 { 160 kgid_t *data = table->data; 161 struct net *net = 162 container_of(table->data, struct net, ipv4.ping_group_range.range); 163 write_seqlock(&net->ipv4.ping_group_range.lock); 164 data[0] = low; 165 data[1] = high; 166 write_sequnlock(&net->ipv4.ping_group_range.lock); 167 } 168 169 /* Validate changes from /proc interface. */ 170 static int ipv4_ping_group_range(struct ctl_table *table, int write, 171 void __user *buffer, 172 size_t *lenp, loff_t *ppos) 173 { 174 struct user_namespace *user_ns = current_user_ns(); 175 int ret; 176 gid_t urange[2]; 177 kgid_t low, high; 178 struct ctl_table tmp = { 179 .data = &urange, 180 .maxlen = sizeof(urange), 181 .mode = table->mode, 182 .extra1 = &ip_ping_group_range_min, 183 .extra2 = &ip_ping_group_range_max, 184 }; 185 186 inet_get_ping_group_range_table(table, &low, &high); 187 urange[0] = from_kgid_munged(user_ns, low); 188 urange[1] = from_kgid_munged(user_ns, high); 189 ret = proc_dointvec_minmax(&tmp, write, buffer, lenp, ppos); 190 191 if (write && ret == 0) { 192 low = make_kgid(user_ns, urange[0]); 193 high = make_kgid(user_ns, urange[1]); 194 if (!gid_valid(low) || !gid_valid(high)) 195 return -EINVAL; 196 if (urange[1] < urange[0] || gid_lt(high, low)) { 197 low = make_kgid(&init_user_ns, 1); 198 high = make_kgid(&init_user_ns, 0); 199 } 200 set_ping_group_range(table, low, high); 201 } 202 203 return ret; 204 } 205 206 static int ipv4_fwd_update_priority(struct ctl_table *table, int write, 207 void __user *buffer, 208 size_t *lenp, loff_t *ppos) 209 { 210 struct net *net; 211 int ret; 212 213 net = container_of(table->data, struct net, 214 ipv4.sysctl_ip_fwd_update_priority); 215 ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos); 216 if (write && ret == 0) 217 call_netevent_notifiers(NETEVENT_IPV4_FWD_UPDATE_PRIORITY_UPDATE, 218 net); 219 220 return ret; 221 } 222 223 static int proc_tcp_congestion_control(struct ctl_table *ctl, int write, 224 void __user *buffer, size_t *lenp, loff_t *ppos) 225 { 226 struct net *net = container_of(ctl->data, struct net, 227 ipv4.tcp_congestion_control); 228 char val[TCP_CA_NAME_MAX]; 229 struct ctl_table tbl = { 230 .data = val, 231 .maxlen = TCP_CA_NAME_MAX, 232 }; 233 int ret; 234 235 tcp_get_default_congestion_control(net, val); 236 237 ret = proc_dostring(&tbl, write, buffer, lenp, ppos); 238 if (write && ret == 0) 239 ret = tcp_set_default_congestion_control(net, val); 240 return ret; 241 } 242 243 static int proc_tcp_available_congestion_control(struct ctl_table *ctl, 244 int write, 245 void __user *buffer, size_t *lenp, 246 loff_t *ppos) 247 { 248 struct ctl_table tbl = { .maxlen = TCP_CA_BUF_MAX, }; 249 int ret; 250 251 tbl.data = kmalloc(tbl.maxlen, GFP_USER); 252 if (!tbl.data) 253 return -ENOMEM; 254 tcp_get_available_congestion_control(tbl.data, TCP_CA_BUF_MAX); 255 ret = proc_dostring(&tbl, write, buffer, lenp, ppos); 256 kfree(tbl.data); 257 return ret; 258 } 259 260 static int proc_allowed_congestion_control(struct ctl_table *ctl, 261 int write, 262 void __user *buffer, size_t *lenp, 263 loff_t *ppos) 264 { 265 struct ctl_table tbl = { .maxlen = TCP_CA_BUF_MAX }; 266 int ret; 267 268 tbl.data = kmalloc(tbl.maxlen, GFP_USER); 269 if (!tbl.data) 270 return -ENOMEM; 271 272 tcp_get_allowed_congestion_control(tbl.data, tbl.maxlen); 273 ret = proc_dostring(&tbl, write, buffer, lenp, ppos); 274 if (write && ret == 0) 275 ret = tcp_set_allowed_congestion_control(tbl.data); 276 kfree(tbl.data); 277 return ret; 278 } 279 280 static int proc_tcp_fastopen_key(struct ctl_table *table, int write, 281 void __user *buffer, size_t *lenp, 282 loff_t *ppos) 283 { 284 struct net *net = container_of(table->data, struct net, 285 ipv4.sysctl_tcp_fastopen); 286 struct ctl_table tbl = { .maxlen = (TCP_FASTOPEN_KEY_LENGTH * 2 + 10) }; 287 struct tcp_fastopen_context *ctxt; 288 u32 user_key[4]; /* 16 bytes, matching TCP_FASTOPEN_KEY_LENGTH */ 289 __le32 key[4]; 290 int ret, i; 291 292 tbl.data = kmalloc(tbl.maxlen, GFP_KERNEL); 293 if (!tbl.data) 294 return -ENOMEM; 295 296 rcu_read_lock(); 297 ctxt = rcu_dereference(net->ipv4.tcp_fastopen_ctx); 298 if (ctxt) 299 memcpy(key, ctxt->key, TCP_FASTOPEN_KEY_LENGTH); 300 else 301 memset(key, 0, sizeof(key)); 302 rcu_read_unlock(); 303 304 for (i = 0; i < ARRAY_SIZE(key); i++) 305 user_key[i] = le32_to_cpu(key[i]); 306 307 snprintf(tbl.data, tbl.maxlen, "%08x-%08x-%08x-%08x", 308 user_key[0], user_key[1], user_key[2], user_key[3]); 309 ret = proc_dostring(&tbl, write, buffer, lenp, ppos); 310 311 if (write && ret == 0) { 312 if (sscanf(tbl.data, "%x-%x-%x-%x", user_key, user_key + 1, 313 user_key + 2, user_key + 3) != 4) { 314 ret = -EINVAL; 315 goto bad_key; 316 } 317 318 for (i = 0; i < ARRAY_SIZE(user_key); i++) 319 key[i] = cpu_to_le32(user_key[i]); 320 321 tcp_fastopen_reset_cipher(net, NULL, key, 322 TCP_FASTOPEN_KEY_LENGTH); 323 } 324 325 bad_key: 326 pr_debug("proc FO key set 0x%x-%x-%x-%x <- 0x%s: %u\n", 327 user_key[0], user_key[1], user_key[2], user_key[3], 328 (char *)tbl.data, ret); 329 kfree(tbl.data); 330 return ret; 331 } 332 333 static void proc_configure_early_demux(int enabled, int protocol) 334 { 335 struct net_protocol *ipprot; 336 #if IS_ENABLED(CONFIG_IPV6) 337 struct inet6_protocol *ip6prot; 338 #endif 339 340 rcu_read_lock(); 341 342 ipprot = rcu_dereference(inet_protos[protocol]); 343 if (ipprot) 344 ipprot->early_demux = enabled ? ipprot->early_demux_handler : 345 NULL; 346 347 #if IS_ENABLED(CONFIG_IPV6) 348 ip6prot = rcu_dereference(inet6_protos[protocol]); 349 if (ip6prot) 350 ip6prot->early_demux = enabled ? ip6prot->early_demux_handler : 351 NULL; 352 #endif 353 rcu_read_unlock(); 354 } 355 356 static int proc_tcp_early_demux(struct ctl_table *table, int write, 357 void __user *buffer, size_t *lenp, loff_t *ppos) 358 { 359 int ret = 0; 360 361 ret = proc_dointvec(table, write, buffer, lenp, ppos); 362 363 if (write && !ret) { 364 int enabled = init_net.ipv4.sysctl_tcp_early_demux; 365 366 proc_configure_early_demux(enabled, IPPROTO_TCP); 367 } 368 369 return ret; 370 } 371 372 static int proc_udp_early_demux(struct ctl_table *table, int write, 373 void __user *buffer, size_t *lenp, loff_t *ppos) 374 { 375 int ret = 0; 376 377 ret = proc_dointvec(table, write, buffer, lenp, ppos); 378 379 if (write && !ret) { 380 int enabled = init_net.ipv4.sysctl_udp_early_demux; 381 382 proc_configure_early_demux(enabled, IPPROTO_UDP); 383 } 384 385 return ret; 386 } 387 388 static int proc_tfo_blackhole_detect_timeout(struct ctl_table *table, 389 int write, 390 void __user *buffer, 391 size_t *lenp, loff_t *ppos) 392 { 393 struct net *net = container_of(table->data, struct net, 394 ipv4.sysctl_tcp_fastopen_blackhole_timeout); 395 int ret; 396 397 ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos); 398 if (write && ret == 0) 399 atomic_set(&net->ipv4.tfo_active_disable_times, 0); 400 401 return ret; 402 } 403 404 static int proc_tcp_available_ulp(struct ctl_table *ctl, 405 int write, 406 void __user *buffer, size_t *lenp, 407 loff_t *ppos) 408 { 409 struct ctl_table tbl = { .maxlen = TCP_ULP_BUF_MAX, }; 410 int ret; 411 412 tbl.data = kmalloc(tbl.maxlen, GFP_USER); 413 if (!tbl.data) 414 return -ENOMEM; 415 tcp_get_available_ulp(tbl.data, TCP_ULP_BUF_MAX); 416 ret = proc_dostring(&tbl, write, buffer, lenp, ppos); 417 kfree(tbl.data); 418 419 return ret; 420 } 421 422 #ifdef CONFIG_IP_ROUTE_MULTIPATH 423 static int proc_fib_multipath_hash_policy(struct ctl_table *table, int write, 424 void __user *buffer, size_t *lenp, 425 loff_t *ppos) 426 { 427 struct net *net = container_of(table->data, struct net, 428 ipv4.sysctl_fib_multipath_hash_policy); 429 int ret; 430 431 ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos); 432 if (write && ret == 0) 433 call_netevent_notifiers(NETEVENT_IPV4_MPATH_HASH_UPDATE, net); 434 435 return ret; 436 } 437 #endif 438 439 static struct ctl_table ipv4_table[] = { 440 { 441 .procname = "tcp_max_orphans", 442 .data = &sysctl_tcp_max_orphans, 443 .maxlen = sizeof(int), 444 .mode = 0644, 445 .proc_handler = proc_dointvec 446 }, 447 { 448 .procname = "inet_peer_threshold", 449 .data = &inet_peer_threshold, 450 .maxlen = sizeof(int), 451 .mode = 0644, 452 .proc_handler = proc_dointvec 453 }, 454 { 455 .procname = "inet_peer_minttl", 456 .data = &inet_peer_minttl, 457 .maxlen = sizeof(int), 458 .mode = 0644, 459 .proc_handler = proc_dointvec_jiffies, 460 }, 461 { 462 .procname = "inet_peer_maxttl", 463 .data = &inet_peer_maxttl, 464 .maxlen = sizeof(int), 465 .mode = 0644, 466 .proc_handler = proc_dointvec_jiffies, 467 }, 468 { 469 .procname = "tcp_mem", 470 .maxlen = sizeof(sysctl_tcp_mem), 471 .data = &sysctl_tcp_mem, 472 .mode = 0644, 473 .proc_handler = proc_doulongvec_minmax, 474 }, 475 { 476 .procname = "tcp_low_latency", 477 .data = &sysctl_tcp_low_latency, 478 .maxlen = sizeof(int), 479 .mode = 0644, 480 .proc_handler = proc_dointvec 481 }, 482 #ifdef CONFIG_NETLABEL 483 { 484 .procname = "cipso_cache_enable", 485 .data = &cipso_v4_cache_enabled, 486 .maxlen = sizeof(int), 487 .mode = 0644, 488 .proc_handler = proc_dointvec, 489 }, 490 { 491 .procname = "cipso_cache_bucket_size", 492 .data = &cipso_v4_cache_bucketsize, 493 .maxlen = sizeof(int), 494 .mode = 0644, 495 .proc_handler = proc_dointvec, 496 }, 497 { 498 .procname = "cipso_rbm_optfmt", 499 .data = &cipso_v4_rbm_optfmt, 500 .maxlen = sizeof(int), 501 .mode = 0644, 502 .proc_handler = proc_dointvec, 503 }, 504 { 505 .procname = "cipso_rbm_strictvalid", 506 .data = &cipso_v4_rbm_strictvalid, 507 .maxlen = sizeof(int), 508 .mode = 0644, 509 .proc_handler = proc_dointvec, 510 }, 511 #endif /* CONFIG_NETLABEL */ 512 { 513 .procname = "tcp_available_congestion_control", 514 .maxlen = TCP_CA_BUF_MAX, 515 .mode = 0444, 516 .proc_handler = proc_tcp_available_congestion_control, 517 }, 518 { 519 .procname = "tcp_allowed_congestion_control", 520 .maxlen = TCP_CA_BUF_MAX, 521 .mode = 0644, 522 .proc_handler = proc_allowed_congestion_control, 523 }, 524 { 525 .procname = "tcp_available_ulp", 526 .maxlen = TCP_ULP_BUF_MAX, 527 .mode = 0444, 528 .proc_handler = proc_tcp_available_ulp, 529 }, 530 { 531 .procname = "icmp_msgs_per_sec", 532 .data = &sysctl_icmp_msgs_per_sec, 533 .maxlen = sizeof(int), 534 .mode = 0644, 535 .proc_handler = proc_dointvec_minmax, 536 .extra1 = &zero, 537 }, 538 { 539 .procname = "icmp_msgs_burst", 540 .data = &sysctl_icmp_msgs_burst, 541 .maxlen = sizeof(int), 542 .mode = 0644, 543 .proc_handler = proc_dointvec_minmax, 544 .extra1 = &zero, 545 }, 546 { 547 .procname = "udp_mem", 548 .data = &sysctl_udp_mem, 549 .maxlen = sizeof(sysctl_udp_mem), 550 .mode = 0644, 551 .proc_handler = proc_doulongvec_minmax, 552 }, 553 { 554 .procname = "fib_sync_mem", 555 .data = &sysctl_fib_sync_mem, 556 .maxlen = sizeof(sysctl_fib_sync_mem), 557 .mode = 0644, 558 .proc_handler = proc_douintvec_minmax, 559 .extra1 = &sysctl_fib_sync_mem_min, 560 .extra2 = &sysctl_fib_sync_mem_max, 561 }, 562 { 563 .procname = "tcp_rx_skb_cache", 564 .data = &tcp_rx_skb_cache_key.key, 565 .mode = 0644, 566 .proc_handler = proc_do_static_key, 567 }, 568 { 569 .procname = "tcp_tx_skb_cache", 570 .data = &tcp_tx_skb_cache_key.key, 571 .mode = 0644, 572 .proc_handler = proc_do_static_key, 573 }, 574 { } 575 }; 576 577 static struct ctl_table ipv4_net_table[] = { 578 { 579 .procname = "icmp_echo_ignore_all", 580 .data = &init_net.ipv4.sysctl_icmp_echo_ignore_all, 581 .maxlen = sizeof(int), 582 .mode = 0644, 583 .proc_handler = proc_dointvec 584 }, 585 { 586 .procname = "icmp_echo_ignore_broadcasts", 587 .data = &init_net.ipv4.sysctl_icmp_echo_ignore_broadcasts, 588 .maxlen = sizeof(int), 589 .mode = 0644, 590 .proc_handler = proc_dointvec 591 }, 592 { 593 .procname = "icmp_ignore_bogus_error_responses", 594 .data = &init_net.ipv4.sysctl_icmp_ignore_bogus_error_responses, 595 .maxlen = sizeof(int), 596 .mode = 0644, 597 .proc_handler = proc_dointvec 598 }, 599 { 600 .procname = "icmp_errors_use_inbound_ifaddr", 601 .data = &init_net.ipv4.sysctl_icmp_errors_use_inbound_ifaddr, 602 .maxlen = sizeof(int), 603 .mode = 0644, 604 .proc_handler = proc_dointvec 605 }, 606 { 607 .procname = "icmp_ratelimit", 608 .data = &init_net.ipv4.sysctl_icmp_ratelimit, 609 .maxlen = sizeof(int), 610 .mode = 0644, 611 .proc_handler = proc_dointvec_ms_jiffies, 612 }, 613 { 614 .procname = "icmp_ratemask", 615 .data = &init_net.ipv4.sysctl_icmp_ratemask, 616 .maxlen = sizeof(int), 617 .mode = 0644, 618 .proc_handler = proc_dointvec 619 }, 620 { 621 .procname = "ping_group_range", 622 .data = &init_net.ipv4.ping_group_range.range, 623 .maxlen = sizeof(gid_t)*2, 624 .mode = 0644, 625 .proc_handler = ipv4_ping_group_range, 626 }, 627 #ifdef CONFIG_NET_L3_MASTER_DEV 628 { 629 .procname = "raw_l3mdev_accept", 630 .data = &init_net.ipv4.sysctl_raw_l3mdev_accept, 631 .maxlen = sizeof(int), 632 .mode = 0644, 633 .proc_handler = proc_dointvec_minmax, 634 .extra1 = &zero, 635 .extra2 = &one, 636 }, 637 #endif 638 { 639 .procname = "tcp_ecn", 640 .data = &init_net.ipv4.sysctl_tcp_ecn, 641 .maxlen = sizeof(int), 642 .mode = 0644, 643 .proc_handler = proc_dointvec 644 }, 645 { 646 .procname = "tcp_ecn_fallback", 647 .data = &init_net.ipv4.sysctl_tcp_ecn_fallback, 648 .maxlen = sizeof(int), 649 .mode = 0644, 650 .proc_handler = proc_dointvec 651 }, 652 { 653 .procname = "ip_dynaddr", 654 .data = &init_net.ipv4.sysctl_ip_dynaddr, 655 .maxlen = sizeof(int), 656 .mode = 0644, 657 .proc_handler = proc_dointvec 658 }, 659 { 660 .procname = "ip_early_demux", 661 .data = &init_net.ipv4.sysctl_ip_early_demux, 662 .maxlen = sizeof(int), 663 .mode = 0644, 664 .proc_handler = proc_dointvec 665 }, 666 { 667 .procname = "udp_early_demux", 668 .data = &init_net.ipv4.sysctl_udp_early_demux, 669 .maxlen = sizeof(int), 670 .mode = 0644, 671 .proc_handler = proc_udp_early_demux 672 }, 673 { 674 .procname = "tcp_early_demux", 675 .data = &init_net.ipv4.sysctl_tcp_early_demux, 676 .maxlen = sizeof(int), 677 .mode = 0644, 678 .proc_handler = proc_tcp_early_demux 679 }, 680 { 681 .procname = "ip_default_ttl", 682 .data = &init_net.ipv4.sysctl_ip_default_ttl, 683 .maxlen = sizeof(int), 684 .mode = 0644, 685 .proc_handler = proc_dointvec_minmax, 686 .extra1 = &ip_ttl_min, 687 .extra2 = &ip_ttl_max, 688 }, 689 { 690 .procname = "ip_local_port_range", 691 .maxlen = sizeof(init_net.ipv4.ip_local_ports.range), 692 .data = &init_net.ipv4.ip_local_ports.range, 693 .mode = 0644, 694 .proc_handler = ipv4_local_port_range, 695 }, 696 { 697 .procname = "ip_local_reserved_ports", 698 .data = &init_net.ipv4.sysctl_local_reserved_ports, 699 .maxlen = 65536, 700 .mode = 0644, 701 .proc_handler = proc_do_large_bitmap, 702 }, 703 { 704 .procname = "ip_no_pmtu_disc", 705 .data = &init_net.ipv4.sysctl_ip_no_pmtu_disc, 706 .maxlen = sizeof(int), 707 .mode = 0644, 708 .proc_handler = proc_dointvec 709 }, 710 { 711 .procname = "ip_forward_use_pmtu", 712 .data = &init_net.ipv4.sysctl_ip_fwd_use_pmtu, 713 .maxlen = sizeof(int), 714 .mode = 0644, 715 .proc_handler = proc_dointvec, 716 }, 717 { 718 .procname = "ip_forward_update_priority", 719 .data = &init_net.ipv4.sysctl_ip_fwd_update_priority, 720 .maxlen = sizeof(int), 721 .mode = 0644, 722 .proc_handler = ipv4_fwd_update_priority, 723 .extra1 = &zero, 724 .extra2 = &one, 725 }, 726 { 727 .procname = "ip_nonlocal_bind", 728 .data = &init_net.ipv4.sysctl_ip_nonlocal_bind, 729 .maxlen = sizeof(int), 730 .mode = 0644, 731 .proc_handler = proc_dointvec 732 }, 733 { 734 .procname = "fwmark_reflect", 735 .data = &init_net.ipv4.sysctl_fwmark_reflect, 736 .maxlen = sizeof(int), 737 .mode = 0644, 738 .proc_handler = proc_dointvec, 739 }, 740 { 741 .procname = "tcp_fwmark_accept", 742 .data = &init_net.ipv4.sysctl_tcp_fwmark_accept, 743 .maxlen = sizeof(int), 744 .mode = 0644, 745 .proc_handler = proc_dointvec, 746 }, 747 #ifdef CONFIG_NET_L3_MASTER_DEV 748 { 749 .procname = "tcp_l3mdev_accept", 750 .data = &init_net.ipv4.sysctl_tcp_l3mdev_accept, 751 .maxlen = sizeof(int), 752 .mode = 0644, 753 .proc_handler = proc_dointvec_minmax, 754 .extra1 = &zero, 755 .extra2 = &one, 756 }, 757 #endif 758 { 759 .procname = "tcp_mtu_probing", 760 .data = &init_net.ipv4.sysctl_tcp_mtu_probing, 761 .maxlen = sizeof(int), 762 .mode = 0644, 763 .proc_handler = proc_dointvec, 764 }, 765 { 766 .procname = "tcp_base_mss", 767 .data = &init_net.ipv4.sysctl_tcp_base_mss, 768 .maxlen = sizeof(int), 769 .mode = 0644, 770 .proc_handler = proc_dointvec, 771 }, 772 { 773 .procname = "tcp_probe_threshold", 774 .data = &init_net.ipv4.sysctl_tcp_probe_threshold, 775 .maxlen = sizeof(int), 776 .mode = 0644, 777 .proc_handler = proc_dointvec, 778 }, 779 { 780 .procname = "tcp_probe_interval", 781 .data = &init_net.ipv4.sysctl_tcp_probe_interval, 782 .maxlen = sizeof(u32), 783 .mode = 0644, 784 .proc_handler = proc_douintvec_minmax, 785 .extra2 = &u32_max_div_HZ, 786 }, 787 { 788 .procname = "igmp_link_local_mcast_reports", 789 .data = &init_net.ipv4.sysctl_igmp_llm_reports, 790 .maxlen = sizeof(int), 791 .mode = 0644, 792 .proc_handler = proc_dointvec 793 }, 794 { 795 .procname = "igmp_max_memberships", 796 .data = &init_net.ipv4.sysctl_igmp_max_memberships, 797 .maxlen = sizeof(int), 798 .mode = 0644, 799 .proc_handler = proc_dointvec 800 }, 801 { 802 .procname = "igmp_max_msf", 803 .data = &init_net.ipv4.sysctl_igmp_max_msf, 804 .maxlen = sizeof(int), 805 .mode = 0644, 806 .proc_handler = proc_dointvec 807 }, 808 #ifdef CONFIG_IP_MULTICAST 809 { 810 .procname = "igmp_qrv", 811 .data = &init_net.ipv4.sysctl_igmp_qrv, 812 .maxlen = sizeof(int), 813 .mode = 0644, 814 .proc_handler = proc_dointvec_minmax, 815 .extra1 = &one 816 }, 817 #endif 818 { 819 .procname = "tcp_congestion_control", 820 .data = &init_net.ipv4.tcp_congestion_control, 821 .mode = 0644, 822 .maxlen = TCP_CA_NAME_MAX, 823 .proc_handler = proc_tcp_congestion_control, 824 }, 825 { 826 .procname = "tcp_keepalive_time", 827 .data = &init_net.ipv4.sysctl_tcp_keepalive_time, 828 .maxlen = sizeof(int), 829 .mode = 0644, 830 .proc_handler = proc_dointvec_jiffies, 831 }, 832 { 833 .procname = "tcp_keepalive_probes", 834 .data = &init_net.ipv4.sysctl_tcp_keepalive_probes, 835 .maxlen = sizeof(int), 836 .mode = 0644, 837 .proc_handler = proc_dointvec 838 }, 839 { 840 .procname = "tcp_keepalive_intvl", 841 .data = &init_net.ipv4.sysctl_tcp_keepalive_intvl, 842 .maxlen = sizeof(int), 843 .mode = 0644, 844 .proc_handler = proc_dointvec_jiffies, 845 }, 846 { 847 .procname = "tcp_syn_retries", 848 .data = &init_net.ipv4.sysctl_tcp_syn_retries, 849 .maxlen = sizeof(int), 850 .mode = 0644, 851 .proc_handler = proc_dointvec_minmax, 852 .extra1 = &tcp_syn_retries_min, 853 .extra2 = &tcp_syn_retries_max 854 }, 855 { 856 .procname = "tcp_synack_retries", 857 .data = &init_net.ipv4.sysctl_tcp_synack_retries, 858 .maxlen = sizeof(int), 859 .mode = 0644, 860 .proc_handler = proc_dointvec 861 }, 862 #ifdef CONFIG_SYN_COOKIES 863 { 864 .procname = "tcp_syncookies", 865 .data = &init_net.ipv4.sysctl_tcp_syncookies, 866 .maxlen = sizeof(int), 867 .mode = 0644, 868 .proc_handler = proc_dointvec 869 }, 870 #endif 871 { 872 .procname = "tcp_reordering", 873 .data = &init_net.ipv4.sysctl_tcp_reordering, 874 .maxlen = sizeof(int), 875 .mode = 0644, 876 .proc_handler = proc_dointvec 877 }, 878 { 879 .procname = "tcp_retries1", 880 .data = &init_net.ipv4.sysctl_tcp_retries1, 881 .maxlen = sizeof(int), 882 .mode = 0644, 883 .proc_handler = proc_dointvec_minmax, 884 .extra2 = &tcp_retr1_max 885 }, 886 { 887 .procname = "tcp_retries2", 888 .data = &init_net.ipv4.sysctl_tcp_retries2, 889 .maxlen = sizeof(int), 890 .mode = 0644, 891 .proc_handler = proc_dointvec 892 }, 893 { 894 .procname = "tcp_orphan_retries", 895 .data = &init_net.ipv4.sysctl_tcp_orphan_retries, 896 .maxlen = sizeof(int), 897 .mode = 0644, 898 .proc_handler = proc_dointvec 899 }, 900 { 901 .procname = "tcp_fin_timeout", 902 .data = &init_net.ipv4.sysctl_tcp_fin_timeout, 903 .maxlen = sizeof(int), 904 .mode = 0644, 905 .proc_handler = proc_dointvec_jiffies, 906 }, 907 { 908 .procname = "tcp_notsent_lowat", 909 .data = &init_net.ipv4.sysctl_tcp_notsent_lowat, 910 .maxlen = sizeof(unsigned int), 911 .mode = 0644, 912 .proc_handler = proc_douintvec, 913 }, 914 { 915 .procname = "tcp_tw_reuse", 916 .data = &init_net.ipv4.sysctl_tcp_tw_reuse, 917 .maxlen = sizeof(int), 918 .mode = 0644, 919 .proc_handler = proc_dointvec_minmax, 920 .extra1 = &zero, 921 .extra2 = &two, 922 }, 923 { 924 .procname = "tcp_max_tw_buckets", 925 .data = &init_net.ipv4.tcp_death_row.sysctl_max_tw_buckets, 926 .maxlen = sizeof(int), 927 .mode = 0644, 928 .proc_handler = proc_dointvec 929 }, 930 { 931 .procname = "tcp_max_syn_backlog", 932 .data = &init_net.ipv4.sysctl_max_syn_backlog, 933 .maxlen = sizeof(int), 934 .mode = 0644, 935 .proc_handler = proc_dointvec 936 }, 937 { 938 .procname = "tcp_fastopen", 939 .data = &init_net.ipv4.sysctl_tcp_fastopen, 940 .maxlen = sizeof(int), 941 .mode = 0644, 942 .proc_handler = proc_dointvec, 943 }, 944 { 945 .procname = "tcp_fastopen_key", 946 .mode = 0600, 947 .data = &init_net.ipv4.sysctl_tcp_fastopen, 948 .maxlen = ((TCP_FASTOPEN_KEY_LENGTH * 2) + 10), 949 .proc_handler = proc_tcp_fastopen_key, 950 }, 951 { 952 .procname = "tcp_fastopen_blackhole_timeout_sec", 953 .data = &init_net.ipv4.sysctl_tcp_fastopen_blackhole_timeout, 954 .maxlen = sizeof(int), 955 .mode = 0644, 956 .proc_handler = proc_tfo_blackhole_detect_timeout, 957 .extra1 = &zero, 958 }, 959 #ifdef CONFIG_IP_ROUTE_MULTIPATH 960 { 961 .procname = "fib_multipath_use_neigh", 962 .data = &init_net.ipv4.sysctl_fib_multipath_use_neigh, 963 .maxlen = sizeof(int), 964 .mode = 0644, 965 .proc_handler = proc_dointvec_minmax, 966 .extra1 = &zero, 967 .extra2 = &one, 968 }, 969 { 970 .procname = "fib_multipath_hash_policy", 971 .data = &init_net.ipv4.sysctl_fib_multipath_hash_policy, 972 .maxlen = sizeof(int), 973 .mode = 0644, 974 .proc_handler = proc_fib_multipath_hash_policy, 975 .extra1 = &zero, 976 .extra2 = &one, 977 }, 978 #endif 979 { 980 .procname = "ip_unprivileged_port_start", 981 .maxlen = sizeof(int), 982 .data = &init_net.ipv4.sysctl_ip_prot_sock, 983 .mode = 0644, 984 .proc_handler = ipv4_privileged_ports, 985 }, 986 #ifdef CONFIG_NET_L3_MASTER_DEV 987 { 988 .procname = "udp_l3mdev_accept", 989 .data = &init_net.ipv4.sysctl_udp_l3mdev_accept, 990 .maxlen = sizeof(int), 991 .mode = 0644, 992 .proc_handler = proc_dointvec_minmax, 993 .extra1 = &zero, 994 .extra2 = &one, 995 }, 996 #endif 997 { 998 .procname = "tcp_sack", 999 .data = &init_net.ipv4.sysctl_tcp_sack, 1000 .maxlen = sizeof(int), 1001 .mode = 0644, 1002 .proc_handler = proc_dointvec 1003 }, 1004 { 1005 .procname = "tcp_window_scaling", 1006 .data = &init_net.ipv4.sysctl_tcp_window_scaling, 1007 .maxlen = sizeof(int), 1008 .mode = 0644, 1009 .proc_handler = proc_dointvec 1010 }, 1011 { 1012 .procname = "tcp_timestamps", 1013 .data = &init_net.ipv4.sysctl_tcp_timestamps, 1014 .maxlen = sizeof(int), 1015 .mode = 0644, 1016 .proc_handler = proc_dointvec 1017 }, 1018 { 1019 .procname = "tcp_early_retrans", 1020 .data = &init_net.ipv4.sysctl_tcp_early_retrans, 1021 .maxlen = sizeof(int), 1022 .mode = 0644, 1023 .proc_handler = proc_dointvec_minmax, 1024 .extra1 = &zero, 1025 .extra2 = &four, 1026 }, 1027 { 1028 .procname = "tcp_recovery", 1029 .data = &init_net.ipv4.sysctl_tcp_recovery, 1030 .maxlen = sizeof(int), 1031 .mode = 0644, 1032 .proc_handler = proc_dointvec, 1033 }, 1034 { 1035 .procname = "tcp_thin_linear_timeouts", 1036 .data = &init_net.ipv4.sysctl_tcp_thin_linear_timeouts, 1037 .maxlen = sizeof(int), 1038 .mode = 0644, 1039 .proc_handler = proc_dointvec 1040 }, 1041 { 1042 .procname = "tcp_slow_start_after_idle", 1043 .data = &init_net.ipv4.sysctl_tcp_slow_start_after_idle, 1044 .maxlen = sizeof(int), 1045 .mode = 0644, 1046 .proc_handler = proc_dointvec 1047 }, 1048 { 1049 .procname = "tcp_retrans_collapse", 1050 .data = &init_net.ipv4.sysctl_tcp_retrans_collapse, 1051 .maxlen = sizeof(int), 1052 .mode = 0644, 1053 .proc_handler = proc_dointvec 1054 }, 1055 { 1056 .procname = "tcp_stdurg", 1057 .data = &init_net.ipv4.sysctl_tcp_stdurg, 1058 .maxlen = sizeof(int), 1059 .mode = 0644, 1060 .proc_handler = proc_dointvec 1061 }, 1062 { 1063 .procname = "tcp_rfc1337", 1064 .data = &init_net.ipv4.sysctl_tcp_rfc1337, 1065 .maxlen = sizeof(int), 1066 .mode = 0644, 1067 .proc_handler = proc_dointvec 1068 }, 1069 { 1070 .procname = "tcp_abort_on_overflow", 1071 .data = &init_net.ipv4.sysctl_tcp_abort_on_overflow, 1072 .maxlen = sizeof(int), 1073 .mode = 0644, 1074 .proc_handler = proc_dointvec 1075 }, 1076 { 1077 .procname = "tcp_fack", 1078 .data = &init_net.ipv4.sysctl_tcp_fack, 1079 .maxlen = sizeof(int), 1080 .mode = 0644, 1081 .proc_handler = proc_dointvec 1082 }, 1083 { 1084 .procname = "tcp_max_reordering", 1085 .data = &init_net.ipv4.sysctl_tcp_max_reordering, 1086 .maxlen = sizeof(int), 1087 .mode = 0644, 1088 .proc_handler = proc_dointvec 1089 }, 1090 { 1091 .procname = "tcp_dsack", 1092 .data = &init_net.ipv4.sysctl_tcp_dsack, 1093 .maxlen = sizeof(int), 1094 .mode = 0644, 1095 .proc_handler = proc_dointvec 1096 }, 1097 { 1098 .procname = "tcp_app_win", 1099 .data = &init_net.ipv4.sysctl_tcp_app_win, 1100 .maxlen = sizeof(int), 1101 .mode = 0644, 1102 .proc_handler = proc_dointvec 1103 }, 1104 { 1105 .procname = "tcp_adv_win_scale", 1106 .data = &init_net.ipv4.sysctl_tcp_adv_win_scale, 1107 .maxlen = sizeof(int), 1108 .mode = 0644, 1109 .proc_handler = proc_dointvec_minmax, 1110 .extra1 = &tcp_adv_win_scale_min, 1111 .extra2 = &tcp_adv_win_scale_max, 1112 }, 1113 { 1114 .procname = "tcp_frto", 1115 .data = &init_net.ipv4.sysctl_tcp_frto, 1116 .maxlen = sizeof(int), 1117 .mode = 0644, 1118 .proc_handler = proc_dointvec 1119 }, 1120 { 1121 .procname = "tcp_no_metrics_save", 1122 .data = &init_net.ipv4.sysctl_tcp_nometrics_save, 1123 .maxlen = sizeof(int), 1124 .mode = 0644, 1125 .proc_handler = proc_dointvec, 1126 }, 1127 { 1128 .procname = "tcp_moderate_rcvbuf", 1129 .data = &init_net.ipv4.sysctl_tcp_moderate_rcvbuf, 1130 .maxlen = sizeof(int), 1131 .mode = 0644, 1132 .proc_handler = proc_dointvec, 1133 }, 1134 { 1135 .procname = "tcp_tso_win_divisor", 1136 .data = &init_net.ipv4.sysctl_tcp_tso_win_divisor, 1137 .maxlen = sizeof(int), 1138 .mode = 0644, 1139 .proc_handler = proc_dointvec, 1140 }, 1141 { 1142 .procname = "tcp_workaround_signed_windows", 1143 .data = &init_net.ipv4.sysctl_tcp_workaround_signed_windows, 1144 .maxlen = sizeof(int), 1145 .mode = 0644, 1146 .proc_handler = proc_dointvec 1147 }, 1148 { 1149 .procname = "tcp_limit_output_bytes", 1150 .data = &init_net.ipv4.sysctl_tcp_limit_output_bytes, 1151 .maxlen = sizeof(int), 1152 .mode = 0644, 1153 .proc_handler = proc_dointvec 1154 }, 1155 { 1156 .procname = "tcp_challenge_ack_limit", 1157 .data = &init_net.ipv4.sysctl_tcp_challenge_ack_limit, 1158 .maxlen = sizeof(int), 1159 .mode = 0644, 1160 .proc_handler = proc_dointvec 1161 }, 1162 { 1163 .procname = "tcp_min_tso_segs", 1164 .data = &init_net.ipv4.sysctl_tcp_min_tso_segs, 1165 .maxlen = sizeof(int), 1166 .mode = 0644, 1167 .proc_handler = proc_dointvec_minmax, 1168 .extra1 = &one, 1169 .extra2 = &gso_max_segs, 1170 }, 1171 { 1172 .procname = "tcp_min_rtt_wlen", 1173 .data = &init_net.ipv4.sysctl_tcp_min_rtt_wlen, 1174 .maxlen = sizeof(int), 1175 .mode = 0644, 1176 .proc_handler = proc_dointvec_minmax, 1177 .extra1 = &zero, 1178 .extra2 = &one_day_secs 1179 }, 1180 { 1181 .procname = "tcp_autocorking", 1182 .data = &init_net.ipv4.sysctl_tcp_autocorking, 1183 .maxlen = sizeof(int), 1184 .mode = 0644, 1185 .proc_handler = proc_dointvec_minmax, 1186 .extra1 = &zero, 1187 .extra2 = &one, 1188 }, 1189 { 1190 .procname = "tcp_invalid_ratelimit", 1191 .data = &init_net.ipv4.sysctl_tcp_invalid_ratelimit, 1192 .maxlen = sizeof(int), 1193 .mode = 0644, 1194 .proc_handler = proc_dointvec_ms_jiffies, 1195 }, 1196 { 1197 .procname = "tcp_pacing_ss_ratio", 1198 .data = &init_net.ipv4.sysctl_tcp_pacing_ss_ratio, 1199 .maxlen = sizeof(int), 1200 .mode = 0644, 1201 .proc_handler = proc_dointvec_minmax, 1202 .extra1 = &zero, 1203 .extra2 = &thousand, 1204 }, 1205 { 1206 .procname = "tcp_pacing_ca_ratio", 1207 .data = &init_net.ipv4.sysctl_tcp_pacing_ca_ratio, 1208 .maxlen = sizeof(int), 1209 .mode = 0644, 1210 .proc_handler = proc_dointvec_minmax, 1211 .extra1 = &zero, 1212 .extra2 = &thousand, 1213 }, 1214 { 1215 .procname = "tcp_wmem", 1216 .data = &init_net.ipv4.sysctl_tcp_wmem, 1217 .maxlen = sizeof(init_net.ipv4.sysctl_tcp_wmem), 1218 .mode = 0644, 1219 .proc_handler = proc_dointvec_minmax, 1220 .extra1 = &one, 1221 }, 1222 { 1223 .procname = "tcp_rmem", 1224 .data = &init_net.ipv4.sysctl_tcp_rmem, 1225 .maxlen = sizeof(init_net.ipv4.sysctl_tcp_rmem), 1226 .mode = 0644, 1227 .proc_handler = proc_dointvec_minmax, 1228 .extra1 = &one, 1229 }, 1230 { 1231 .procname = "tcp_comp_sack_delay_ns", 1232 .data = &init_net.ipv4.sysctl_tcp_comp_sack_delay_ns, 1233 .maxlen = sizeof(unsigned long), 1234 .mode = 0644, 1235 .proc_handler = proc_doulongvec_minmax, 1236 }, 1237 { 1238 .procname = "tcp_comp_sack_nr", 1239 .data = &init_net.ipv4.sysctl_tcp_comp_sack_nr, 1240 .maxlen = sizeof(int), 1241 .mode = 0644, 1242 .proc_handler = proc_dointvec_minmax, 1243 .extra1 = &zero, 1244 .extra2 = &comp_sack_nr_max, 1245 }, 1246 { 1247 .procname = "udp_rmem_min", 1248 .data = &init_net.ipv4.sysctl_udp_rmem_min, 1249 .maxlen = sizeof(init_net.ipv4.sysctl_udp_rmem_min), 1250 .mode = 0644, 1251 .proc_handler = proc_dointvec_minmax, 1252 .extra1 = &one 1253 }, 1254 { 1255 .procname = "udp_wmem_min", 1256 .data = &init_net.ipv4.sysctl_udp_wmem_min, 1257 .maxlen = sizeof(init_net.ipv4.sysctl_udp_wmem_min), 1258 .mode = 0644, 1259 .proc_handler = proc_dointvec_minmax, 1260 .extra1 = &one 1261 }, 1262 { } 1263 }; 1264 1265 static __net_init int ipv4_sysctl_init_net(struct net *net) 1266 { 1267 struct ctl_table *table; 1268 1269 table = ipv4_net_table; 1270 if (!net_eq(net, &init_net)) { 1271 int i; 1272 1273 table = kmemdup(table, sizeof(ipv4_net_table), GFP_KERNEL); 1274 if (!table) 1275 goto err_alloc; 1276 1277 /* Update the variables to point into the current struct net */ 1278 for (i = 0; i < ARRAY_SIZE(ipv4_net_table) - 1; i++) 1279 table[i].data += (void *)net - (void *)&init_net; 1280 } 1281 1282 net->ipv4.ipv4_hdr = register_net_sysctl(net, "net/ipv4", table); 1283 if (!net->ipv4.ipv4_hdr) 1284 goto err_reg; 1285 1286 net->ipv4.sysctl_local_reserved_ports = kzalloc(65536 / 8, GFP_KERNEL); 1287 if (!net->ipv4.sysctl_local_reserved_ports) 1288 goto err_ports; 1289 1290 return 0; 1291 1292 err_ports: 1293 unregister_net_sysctl_table(net->ipv4.ipv4_hdr); 1294 err_reg: 1295 if (!net_eq(net, &init_net)) 1296 kfree(table); 1297 err_alloc: 1298 return -ENOMEM; 1299 } 1300 1301 static __net_exit void ipv4_sysctl_exit_net(struct net *net) 1302 { 1303 struct ctl_table *table; 1304 1305 kfree(net->ipv4.sysctl_local_reserved_ports); 1306 table = net->ipv4.ipv4_hdr->ctl_table_arg; 1307 unregister_net_sysctl_table(net->ipv4.ipv4_hdr); 1308 kfree(table); 1309 } 1310 1311 static __net_initdata struct pernet_operations ipv4_sysctl_ops = { 1312 .init = ipv4_sysctl_init_net, 1313 .exit = ipv4_sysctl_exit_net, 1314 }; 1315 1316 static __init int sysctl_ipv4_init(void) 1317 { 1318 struct ctl_table_header *hdr; 1319 1320 hdr = register_net_sysctl(&init_net, "net/ipv4", ipv4_table); 1321 if (!hdr) 1322 return -ENOMEM; 1323 1324 if (register_pernet_subsys(&ipv4_sysctl_ops)) { 1325 unregister_net_sysctl_table(hdr); 1326 return -ENOMEM; 1327 } 1328 1329 return 0; 1330 } 1331 1332 __initcall(sysctl_ipv4_init); 1333