sysctl_net_ipv4.c revision 95766fff6b9a78d11fc2d3812dd035381690b55d
1/* 2 * sysctl_net_ipv4.c: sysctl interface to net IPV4 subsystem. 3 * 4 * $Id: sysctl_net_ipv4.c,v 1.50 2001/10/20 00:00:11 davem Exp $ 5 * 6 * Begun April 1, 1996, Mike Shaver. 7 * Added /proc/sys/net/ipv4 directory entry (empty =) ). [MS] 8 */ 9 10#include <linux/mm.h> 11#include <linux/module.h> 12#include <linux/sysctl.h> 13#include <linux/igmp.h> 14#include <linux/inetdevice.h> 15#include <linux/seqlock.h> 16#include <linux/init.h> 17#include <net/snmp.h> 18#include <net/icmp.h> 19#include <net/ip.h> 20#include <net/route.h> 21#include <net/tcp.h> 22#include <net/udp.h> 23#include <net/cipso_ipv4.h> 24#include <net/inet_frag.h> 25 26static int zero; 27static int tcp_retr1_max = 255; 28static int ip_local_port_range_min[] = { 1, 1 }; 29static int ip_local_port_range_max[] = { 65535, 65535 }; 30 31extern seqlock_t sysctl_port_range_lock; 32extern int sysctl_local_port_range[2]; 33 34/* Update system visible IP port range */ 35static void set_local_port_range(int range[2]) 36{ 37 write_seqlock(&sysctl_port_range_lock); 38 sysctl_local_port_range[0] = range[0]; 39 sysctl_local_port_range[1] = range[1]; 40 write_sequnlock(&sysctl_port_range_lock); 41} 42 43/* Validate changes from /proc interface. */ 44static int ipv4_local_port_range(ctl_table *table, int write, struct file *filp, 45 void __user *buffer, 46 size_t *lenp, loff_t *ppos) 47{ 48 int ret; 49 int range[2] = { sysctl_local_port_range[0], 50 sysctl_local_port_range[1] }; 51 ctl_table tmp = { 52 .data = &range, 53 .maxlen = sizeof(range), 54 .mode = table->mode, 55 .extra1 = &ip_local_port_range_min, 56 .extra2 = &ip_local_port_range_max, 57 }; 58 59 ret = proc_dointvec_minmax(&tmp, write, filp, buffer, lenp, ppos); 60 61 if (write && ret == 0) { 62 if (range[1] < range[0]) 63 ret = -EINVAL; 64 else 65 set_local_port_range(range); 66 } 67 68 return ret; 69} 70 71/* Validate changes from sysctl interface. */ 72static int ipv4_sysctl_local_port_range(ctl_table *table, int __user *name, 73 int nlen, void __user *oldval, 74 size_t __user *oldlenp, 75 void __user *newval, size_t newlen) 76{ 77 int ret; 78 int range[2] = { sysctl_local_port_range[0], 79 sysctl_local_port_range[1] }; 80 ctl_table tmp = { 81 .data = &range, 82 .maxlen = sizeof(range), 83 .mode = table->mode, 84 .extra1 = &ip_local_port_range_min, 85 .extra2 = &ip_local_port_range_max, 86 }; 87 88 ret = sysctl_intvec(&tmp, name, nlen, oldval, oldlenp, newval, newlen); 89 if (ret == 0 && newval && newlen) { 90 if (range[1] < range[0]) 91 ret = -EINVAL; 92 else 93 set_local_port_range(range); 94 } 95 return ret; 96} 97 98 99static int proc_tcp_congestion_control(ctl_table *ctl, int write, struct file * filp, 100 void __user *buffer, size_t *lenp, loff_t *ppos) 101{ 102 char val[TCP_CA_NAME_MAX]; 103 ctl_table tbl = { 104 .data = val, 105 .maxlen = TCP_CA_NAME_MAX, 106 }; 107 int ret; 108 109 tcp_get_default_congestion_control(val); 110 111 ret = proc_dostring(&tbl, write, filp, buffer, lenp, ppos); 112 if (write && ret == 0) 113 ret = tcp_set_default_congestion_control(val); 114 return ret; 115} 116 117static int sysctl_tcp_congestion_control(ctl_table *table, int __user *name, 118 int nlen, void __user *oldval, 119 size_t __user *oldlenp, 120 void __user *newval, size_t newlen) 121{ 122 char val[TCP_CA_NAME_MAX]; 123 ctl_table tbl = { 124 .data = val, 125 .maxlen = TCP_CA_NAME_MAX, 126 }; 127 int ret; 128 129 tcp_get_default_congestion_control(val); 130 ret = sysctl_string(&tbl, name, nlen, oldval, oldlenp, newval, newlen); 131 if (ret == 1 && newval && newlen) 132 ret = tcp_set_default_congestion_control(val); 133 return ret; 134} 135 136static int proc_tcp_available_congestion_control(ctl_table *ctl, 137 int write, struct file * filp, 138 void __user *buffer, size_t *lenp, 139 loff_t *ppos) 140{ 141 ctl_table tbl = { .maxlen = TCP_CA_BUF_MAX, }; 142 int ret; 143 144 tbl.data = kmalloc(tbl.maxlen, GFP_USER); 145 if (!tbl.data) 146 return -ENOMEM; 147 tcp_get_available_congestion_control(tbl.data, TCP_CA_BUF_MAX); 148 ret = proc_dostring(&tbl, write, filp, buffer, lenp, ppos); 149 kfree(tbl.data); 150 return ret; 151} 152 153static int proc_allowed_congestion_control(ctl_table *ctl, 154 int write, struct file * filp, 155 void __user *buffer, size_t *lenp, 156 loff_t *ppos) 157{ 158 ctl_table tbl = { .maxlen = TCP_CA_BUF_MAX }; 159 int ret; 160 161 tbl.data = kmalloc(tbl.maxlen, GFP_USER); 162 if (!tbl.data) 163 return -ENOMEM; 164 165 tcp_get_allowed_congestion_control(tbl.data, tbl.maxlen); 166 ret = proc_dostring(&tbl, write, filp, buffer, lenp, ppos); 167 if (write && ret == 0) 168 ret = tcp_set_allowed_congestion_control(tbl.data); 169 kfree(tbl.data); 170 return ret; 171} 172 173static int strategy_allowed_congestion_control(ctl_table *table, int __user *name, 174 int nlen, void __user *oldval, 175 size_t __user *oldlenp, 176 void __user *newval, 177 size_t newlen) 178{ 179 ctl_table tbl = { .maxlen = TCP_CA_BUF_MAX }; 180 int ret; 181 182 tbl.data = kmalloc(tbl.maxlen, GFP_USER); 183 if (!tbl.data) 184 return -ENOMEM; 185 186 tcp_get_available_congestion_control(tbl.data, tbl.maxlen); 187 ret = sysctl_string(&tbl, name, nlen, oldval, oldlenp, newval, newlen); 188 if (ret == 0 && newval && newlen) 189 ret = tcp_set_allowed_congestion_control(tbl.data); 190 kfree(tbl.data); 191 192 return ret; 193 194} 195 196static struct ctl_table ipv4_table[] = { 197 { 198 .ctl_name = NET_IPV4_TCP_TIMESTAMPS, 199 .procname = "tcp_timestamps", 200 .data = &sysctl_tcp_timestamps, 201 .maxlen = sizeof(int), 202 .mode = 0644, 203 .proc_handler = &proc_dointvec 204 }, 205 { 206 .ctl_name = NET_IPV4_TCP_WINDOW_SCALING, 207 .procname = "tcp_window_scaling", 208 .data = &sysctl_tcp_window_scaling, 209 .maxlen = sizeof(int), 210 .mode = 0644, 211 .proc_handler = &proc_dointvec 212 }, 213 { 214 .ctl_name = NET_IPV4_TCP_SACK, 215 .procname = "tcp_sack", 216 .data = &sysctl_tcp_sack, 217 .maxlen = sizeof(int), 218 .mode = 0644, 219 .proc_handler = &proc_dointvec 220 }, 221 { 222 .ctl_name = NET_IPV4_TCP_RETRANS_COLLAPSE, 223 .procname = "tcp_retrans_collapse", 224 .data = &sysctl_tcp_retrans_collapse, 225 .maxlen = sizeof(int), 226 .mode = 0644, 227 .proc_handler = &proc_dointvec 228 }, 229 { 230 .ctl_name = NET_IPV4_DEFAULT_TTL, 231 .procname = "ip_default_ttl", 232 .data = &sysctl_ip_default_ttl, 233 .maxlen = sizeof(int), 234 .mode = 0644, 235 .proc_handler = &ipv4_doint_and_flush, 236 .strategy = &ipv4_doint_and_flush_strategy, 237 }, 238 { 239 .ctl_name = NET_IPV4_NO_PMTU_DISC, 240 .procname = "ip_no_pmtu_disc", 241 .data = &ipv4_config.no_pmtu_disc, 242 .maxlen = sizeof(int), 243 .mode = 0644, 244 .proc_handler = &proc_dointvec 245 }, 246 { 247 .ctl_name = NET_IPV4_NONLOCAL_BIND, 248 .procname = "ip_nonlocal_bind", 249 .data = &sysctl_ip_nonlocal_bind, 250 .maxlen = sizeof(int), 251 .mode = 0644, 252 .proc_handler = &proc_dointvec 253 }, 254 { 255 .ctl_name = NET_IPV4_TCP_SYN_RETRIES, 256 .procname = "tcp_syn_retries", 257 .data = &sysctl_tcp_syn_retries, 258 .maxlen = sizeof(int), 259 .mode = 0644, 260 .proc_handler = &proc_dointvec 261 }, 262 { 263 .ctl_name = NET_TCP_SYNACK_RETRIES, 264 .procname = "tcp_synack_retries", 265 .data = &sysctl_tcp_synack_retries, 266 .maxlen = sizeof(int), 267 .mode = 0644, 268 .proc_handler = &proc_dointvec 269 }, 270 { 271 .ctl_name = NET_TCP_MAX_ORPHANS, 272 .procname = "tcp_max_orphans", 273 .data = &sysctl_tcp_max_orphans, 274 .maxlen = sizeof(int), 275 .mode = 0644, 276 .proc_handler = &proc_dointvec 277 }, 278 { 279 .ctl_name = NET_TCP_MAX_TW_BUCKETS, 280 .procname = "tcp_max_tw_buckets", 281 .data = &tcp_death_row.sysctl_max_tw_buckets, 282 .maxlen = sizeof(int), 283 .mode = 0644, 284 .proc_handler = &proc_dointvec 285 }, 286 { 287 .ctl_name = NET_IPV4_IPFRAG_HIGH_THRESH, 288 .procname = "ipfrag_high_thresh", 289 .data = &ip4_frags_ctl.high_thresh, 290 .maxlen = sizeof(int), 291 .mode = 0644, 292 .proc_handler = &proc_dointvec 293 }, 294 { 295 .ctl_name = NET_IPV4_IPFRAG_LOW_THRESH, 296 .procname = "ipfrag_low_thresh", 297 .data = &ip4_frags_ctl.low_thresh, 298 .maxlen = sizeof(int), 299 .mode = 0644, 300 .proc_handler = &proc_dointvec 301 }, 302 { 303 .ctl_name = NET_IPV4_DYNADDR, 304 .procname = "ip_dynaddr", 305 .data = &sysctl_ip_dynaddr, 306 .maxlen = sizeof(int), 307 .mode = 0644, 308 .proc_handler = &proc_dointvec 309 }, 310 { 311 .ctl_name = NET_IPV4_IPFRAG_TIME, 312 .procname = "ipfrag_time", 313 .data = &ip4_frags_ctl.timeout, 314 .maxlen = sizeof(int), 315 .mode = 0644, 316 .proc_handler = &proc_dointvec_jiffies, 317 .strategy = &sysctl_jiffies 318 }, 319 { 320 .ctl_name = NET_IPV4_TCP_KEEPALIVE_TIME, 321 .procname = "tcp_keepalive_time", 322 .data = &sysctl_tcp_keepalive_time, 323 .maxlen = sizeof(int), 324 .mode = 0644, 325 .proc_handler = &proc_dointvec_jiffies, 326 .strategy = &sysctl_jiffies 327 }, 328 { 329 .ctl_name = NET_IPV4_TCP_KEEPALIVE_PROBES, 330 .procname = "tcp_keepalive_probes", 331 .data = &sysctl_tcp_keepalive_probes, 332 .maxlen = sizeof(int), 333 .mode = 0644, 334 .proc_handler = &proc_dointvec 335 }, 336 { 337 .ctl_name = NET_IPV4_TCP_KEEPALIVE_INTVL, 338 .procname = "tcp_keepalive_intvl", 339 .data = &sysctl_tcp_keepalive_intvl, 340 .maxlen = sizeof(int), 341 .mode = 0644, 342 .proc_handler = &proc_dointvec_jiffies, 343 .strategy = &sysctl_jiffies 344 }, 345 { 346 .ctl_name = NET_IPV4_TCP_RETRIES1, 347 .procname = "tcp_retries1", 348 .data = &sysctl_tcp_retries1, 349 .maxlen = sizeof(int), 350 .mode = 0644, 351 .proc_handler = &proc_dointvec_minmax, 352 .strategy = &sysctl_intvec, 353 .extra2 = &tcp_retr1_max 354 }, 355 { 356 .ctl_name = NET_IPV4_TCP_RETRIES2, 357 .procname = "tcp_retries2", 358 .data = &sysctl_tcp_retries2, 359 .maxlen = sizeof(int), 360 .mode = 0644, 361 .proc_handler = &proc_dointvec 362 }, 363 { 364 .ctl_name = NET_IPV4_TCP_FIN_TIMEOUT, 365 .procname = "tcp_fin_timeout", 366 .data = &sysctl_tcp_fin_timeout, 367 .maxlen = sizeof(int), 368 .mode = 0644, 369 .proc_handler = &proc_dointvec_jiffies, 370 .strategy = &sysctl_jiffies 371 }, 372#ifdef CONFIG_SYN_COOKIES 373 { 374 .ctl_name = NET_TCP_SYNCOOKIES, 375 .procname = "tcp_syncookies", 376 .data = &sysctl_tcp_syncookies, 377 .maxlen = sizeof(int), 378 .mode = 0644, 379 .proc_handler = &proc_dointvec 380 }, 381#endif 382 { 383 .ctl_name = NET_TCP_TW_RECYCLE, 384 .procname = "tcp_tw_recycle", 385 .data = &tcp_death_row.sysctl_tw_recycle, 386 .maxlen = sizeof(int), 387 .mode = 0644, 388 .proc_handler = &proc_dointvec 389 }, 390 { 391 .ctl_name = NET_TCP_ABORT_ON_OVERFLOW, 392 .procname = "tcp_abort_on_overflow", 393 .data = &sysctl_tcp_abort_on_overflow, 394 .maxlen = sizeof(int), 395 .mode = 0644, 396 .proc_handler = &proc_dointvec 397 }, 398 { 399 .ctl_name = NET_TCP_STDURG, 400 .procname = "tcp_stdurg", 401 .data = &sysctl_tcp_stdurg, 402 .maxlen = sizeof(int), 403 .mode = 0644, 404 .proc_handler = &proc_dointvec 405 }, 406 { 407 .ctl_name = NET_TCP_RFC1337, 408 .procname = "tcp_rfc1337", 409 .data = &sysctl_tcp_rfc1337, 410 .maxlen = sizeof(int), 411 .mode = 0644, 412 .proc_handler = &proc_dointvec 413 }, 414 { 415 .ctl_name = NET_TCP_MAX_SYN_BACKLOG, 416 .procname = "tcp_max_syn_backlog", 417 .data = &sysctl_max_syn_backlog, 418 .maxlen = sizeof(int), 419 .mode = 0644, 420 .proc_handler = &proc_dointvec 421 }, 422 { 423 .ctl_name = NET_IPV4_LOCAL_PORT_RANGE, 424 .procname = "ip_local_port_range", 425 .data = &sysctl_local_port_range, 426 .maxlen = sizeof(sysctl_local_port_range), 427 .mode = 0644, 428 .proc_handler = &ipv4_local_port_range, 429 .strategy = &ipv4_sysctl_local_port_range, 430 }, 431 { 432 .ctl_name = NET_IPV4_ICMP_ECHO_IGNORE_ALL, 433 .procname = "icmp_echo_ignore_all", 434 .data = &sysctl_icmp_echo_ignore_all, 435 .maxlen = sizeof(int), 436 .mode = 0644, 437 .proc_handler = &proc_dointvec 438 }, 439 { 440 .ctl_name = NET_IPV4_ICMP_ECHO_IGNORE_BROADCASTS, 441 .procname = "icmp_echo_ignore_broadcasts", 442 .data = &sysctl_icmp_echo_ignore_broadcasts, 443 .maxlen = sizeof(int), 444 .mode = 0644, 445 .proc_handler = &proc_dointvec 446 }, 447 { 448 .ctl_name = NET_IPV4_ICMP_IGNORE_BOGUS_ERROR_RESPONSES, 449 .procname = "icmp_ignore_bogus_error_responses", 450 .data = &sysctl_icmp_ignore_bogus_error_responses, 451 .maxlen = sizeof(int), 452 .mode = 0644, 453 .proc_handler = &proc_dointvec 454 }, 455 { 456 .ctl_name = NET_IPV4_ICMP_ERRORS_USE_INBOUND_IFADDR, 457 .procname = "icmp_errors_use_inbound_ifaddr", 458 .data = &sysctl_icmp_errors_use_inbound_ifaddr, 459 .maxlen = sizeof(int), 460 .mode = 0644, 461 .proc_handler = &proc_dointvec 462 }, 463 { 464 .ctl_name = NET_IPV4_ROUTE, 465 .procname = "route", 466 .maxlen = 0, 467 .mode = 0555, 468 .child = ipv4_route_table 469 }, 470#ifdef CONFIG_IP_MULTICAST 471 { 472 .ctl_name = NET_IPV4_IGMP_MAX_MEMBERSHIPS, 473 .procname = "igmp_max_memberships", 474 .data = &sysctl_igmp_max_memberships, 475 .maxlen = sizeof(int), 476 .mode = 0644, 477 .proc_handler = &proc_dointvec 478 }, 479 480#endif 481 { 482 .ctl_name = NET_IPV4_IGMP_MAX_MSF, 483 .procname = "igmp_max_msf", 484 .data = &sysctl_igmp_max_msf, 485 .maxlen = sizeof(int), 486 .mode = 0644, 487 .proc_handler = &proc_dointvec 488 }, 489 { 490 .ctl_name = NET_IPV4_INET_PEER_THRESHOLD, 491 .procname = "inet_peer_threshold", 492 .data = &inet_peer_threshold, 493 .maxlen = sizeof(int), 494 .mode = 0644, 495 .proc_handler = &proc_dointvec 496 }, 497 { 498 .ctl_name = NET_IPV4_INET_PEER_MINTTL, 499 .procname = "inet_peer_minttl", 500 .data = &inet_peer_minttl, 501 .maxlen = sizeof(int), 502 .mode = 0644, 503 .proc_handler = &proc_dointvec_jiffies, 504 .strategy = &sysctl_jiffies 505 }, 506 { 507 .ctl_name = NET_IPV4_INET_PEER_MAXTTL, 508 .procname = "inet_peer_maxttl", 509 .data = &inet_peer_maxttl, 510 .maxlen = sizeof(int), 511 .mode = 0644, 512 .proc_handler = &proc_dointvec_jiffies, 513 .strategy = &sysctl_jiffies 514 }, 515 { 516 .ctl_name = NET_IPV4_INET_PEER_GC_MINTIME, 517 .procname = "inet_peer_gc_mintime", 518 .data = &inet_peer_gc_mintime, 519 .maxlen = sizeof(int), 520 .mode = 0644, 521 .proc_handler = &proc_dointvec_jiffies, 522 .strategy = &sysctl_jiffies 523 }, 524 { 525 .ctl_name = NET_IPV4_INET_PEER_GC_MAXTIME, 526 .procname = "inet_peer_gc_maxtime", 527 .data = &inet_peer_gc_maxtime, 528 .maxlen = sizeof(int), 529 .mode = 0644, 530 .proc_handler = &proc_dointvec_jiffies, 531 .strategy = &sysctl_jiffies 532 }, 533 { 534 .ctl_name = NET_TCP_ORPHAN_RETRIES, 535 .procname = "tcp_orphan_retries", 536 .data = &sysctl_tcp_orphan_retries, 537 .maxlen = sizeof(int), 538 .mode = 0644, 539 .proc_handler = &proc_dointvec 540 }, 541 { 542 .ctl_name = NET_TCP_FACK, 543 .procname = "tcp_fack", 544 .data = &sysctl_tcp_fack, 545 .maxlen = sizeof(int), 546 .mode = 0644, 547 .proc_handler = &proc_dointvec 548 }, 549 { 550 .ctl_name = NET_TCP_REORDERING, 551 .procname = "tcp_reordering", 552 .data = &sysctl_tcp_reordering, 553 .maxlen = sizeof(int), 554 .mode = 0644, 555 .proc_handler = &proc_dointvec 556 }, 557 { 558 .ctl_name = NET_TCP_ECN, 559 .procname = "tcp_ecn", 560 .data = &sysctl_tcp_ecn, 561 .maxlen = sizeof(int), 562 .mode = 0644, 563 .proc_handler = &proc_dointvec 564 }, 565 { 566 .ctl_name = NET_TCP_DSACK, 567 .procname = "tcp_dsack", 568 .data = &sysctl_tcp_dsack, 569 .maxlen = sizeof(int), 570 .mode = 0644, 571 .proc_handler = &proc_dointvec 572 }, 573 { 574 .ctl_name = NET_TCP_MEM, 575 .procname = "tcp_mem", 576 .data = &sysctl_tcp_mem, 577 .maxlen = sizeof(sysctl_tcp_mem), 578 .mode = 0644, 579 .proc_handler = &proc_dointvec 580 }, 581 { 582 .ctl_name = NET_TCP_WMEM, 583 .procname = "tcp_wmem", 584 .data = &sysctl_tcp_wmem, 585 .maxlen = sizeof(sysctl_tcp_wmem), 586 .mode = 0644, 587 .proc_handler = &proc_dointvec 588 }, 589 { 590 .ctl_name = NET_TCP_RMEM, 591 .procname = "tcp_rmem", 592 .data = &sysctl_tcp_rmem, 593 .maxlen = sizeof(sysctl_tcp_rmem), 594 .mode = 0644, 595 .proc_handler = &proc_dointvec 596 }, 597 { 598 .ctl_name = NET_TCP_APP_WIN, 599 .procname = "tcp_app_win", 600 .data = &sysctl_tcp_app_win, 601 .maxlen = sizeof(int), 602 .mode = 0644, 603 .proc_handler = &proc_dointvec 604 }, 605 { 606 .ctl_name = NET_TCP_ADV_WIN_SCALE, 607 .procname = "tcp_adv_win_scale", 608 .data = &sysctl_tcp_adv_win_scale, 609 .maxlen = sizeof(int), 610 .mode = 0644, 611 .proc_handler = &proc_dointvec 612 }, 613 { 614 .ctl_name = NET_IPV4_ICMP_RATELIMIT, 615 .procname = "icmp_ratelimit", 616 .data = &sysctl_icmp_ratelimit, 617 .maxlen = sizeof(int), 618 .mode = 0644, 619 .proc_handler = &proc_dointvec 620 }, 621 { 622 .ctl_name = NET_IPV4_ICMP_RATEMASK, 623 .procname = "icmp_ratemask", 624 .data = &sysctl_icmp_ratemask, 625 .maxlen = sizeof(int), 626 .mode = 0644, 627 .proc_handler = &proc_dointvec 628 }, 629 { 630 .ctl_name = NET_TCP_TW_REUSE, 631 .procname = "tcp_tw_reuse", 632 .data = &sysctl_tcp_tw_reuse, 633 .maxlen = sizeof(int), 634 .mode = 0644, 635 .proc_handler = &proc_dointvec 636 }, 637 { 638 .ctl_name = NET_TCP_FRTO, 639 .procname = "tcp_frto", 640 .data = &sysctl_tcp_frto, 641 .maxlen = sizeof(int), 642 .mode = 0644, 643 .proc_handler = &proc_dointvec 644 }, 645 { 646 .ctl_name = NET_TCP_FRTO_RESPONSE, 647 .procname = "tcp_frto_response", 648 .data = &sysctl_tcp_frto_response, 649 .maxlen = sizeof(int), 650 .mode = 0644, 651 .proc_handler = &proc_dointvec 652 }, 653 { 654 .ctl_name = NET_TCP_LOW_LATENCY, 655 .procname = "tcp_low_latency", 656 .data = &sysctl_tcp_low_latency, 657 .maxlen = sizeof(int), 658 .mode = 0644, 659 .proc_handler = &proc_dointvec 660 }, 661 { 662 .ctl_name = NET_IPV4_IPFRAG_SECRET_INTERVAL, 663 .procname = "ipfrag_secret_interval", 664 .data = &ip4_frags_ctl.secret_interval, 665 .maxlen = sizeof(int), 666 .mode = 0644, 667 .proc_handler = &proc_dointvec_jiffies, 668 .strategy = &sysctl_jiffies 669 }, 670 { 671 .procname = "ipfrag_max_dist", 672 .data = &sysctl_ipfrag_max_dist, 673 .maxlen = sizeof(int), 674 .mode = 0644, 675 .proc_handler = &proc_dointvec_minmax, 676 .extra1 = &zero 677 }, 678 { 679 .ctl_name = NET_TCP_NO_METRICS_SAVE, 680 .procname = "tcp_no_metrics_save", 681 .data = &sysctl_tcp_nometrics_save, 682 .maxlen = sizeof(int), 683 .mode = 0644, 684 .proc_handler = &proc_dointvec, 685 }, 686 { 687 .ctl_name = NET_TCP_MODERATE_RCVBUF, 688 .procname = "tcp_moderate_rcvbuf", 689 .data = &sysctl_tcp_moderate_rcvbuf, 690 .maxlen = sizeof(int), 691 .mode = 0644, 692 .proc_handler = &proc_dointvec, 693 }, 694 { 695 .ctl_name = NET_TCP_TSO_WIN_DIVISOR, 696 .procname = "tcp_tso_win_divisor", 697 .data = &sysctl_tcp_tso_win_divisor, 698 .maxlen = sizeof(int), 699 .mode = 0644, 700 .proc_handler = &proc_dointvec, 701 }, 702 { 703 .ctl_name = NET_TCP_CONG_CONTROL, 704 .procname = "tcp_congestion_control", 705 .mode = 0644, 706 .maxlen = TCP_CA_NAME_MAX, 707 .proc_handler = &proc_tcp_congestion_control, 708 .strategy = &sysctl_tcp_congestion_control, 709 }, 710 { 711 .ctl_name = NET_TCP_ABC, 712 .procname = "tcp_abc", 713 .data = &sysctl_tcp_abc, 714 .maxlen = sizeof(int), 715 .mode = 0644, 716 .proc_handler = &proc_dointvec, 717 }, 718 { 719 .ctl_name = NET_TCP_MTU_PROBING, 720 .procname = "tcp_mtu_probing", 721 .data = &sysctl_tcp_mtu_probing, 722 .maxlen = sizeof(int), 723 .mode = 0644, 724 .proc_handler = &proc_dointvec, 725 }, 726 { 727 .ctl_name = NET_TCP_BASE_MSS, 728 .procname = "tcp_base_mss", 729 .data = &sysctl_tcp_base_mss, 730 .maxlen = sizeof(int), 731 .mode = 0644, 732 .proc_handler = &proc_dointvec, 733 }, 734 { 735 .ctl_name = NET_IPV4_TCP_WORKAROUND_SIGNED_WINDOWS, 736 .procname = "tcp_workaround_signed_windows", 737 .data = &sysctl_tcp_workaround_signed_windows, 738 .maxlen = sizeof(int), 739 .mode = 0644, 740 .proc_handler = &proc_dointvec 741 }, 742#ifdef CONFIG_NET_DMA 743 { 744 .ctl_name = NET_TCP_DMA_COPYBREAK, 745 .procname = "tcp_dma_copybreak", 746 .data = &sysctl_tcp_dma_copybreak, 747 .maxlen = sizeof(int), 748 .mode = 0644, 749 .proc_handler = &proc_dointvec 750 }, 751#endif 752 { 753 .ctl_name = NET_TCP_SLOW_START_AFTER_IDLE, 754 .procname = "tcp_slow_start_after_idle", 755 .data = &sysctl_tcp_slow_start_after_idle, 756 .maxlen = sizeof(int), 757 .mode = 0644, 758 .proc_handler = &proc_dointvec 759 }, 760#ifdef CONFIG_NETLABEL 761 { 762 .ctl_name = NET_CIPSOV4_CACHE_ENABLE, 763 .procname = "cipso_cache_enable", 764 .data = &cipso_v4_cache_enabled, 765 .maxlen = sizeof(int), 766 .mode = 0644, 767 .proc_handler = &proc_dointvec, 768 }, 769 { 770 .ctl_name = NET_CIPSOV4_CACHE_BUCKET_SIZE, 771 .procname = "cipso_cache_bucket_size", 772 .data = &cipso_v4_cache_bucketsize, 773 .maxlen = sizeof(int), 774 .mode = 0644, 775 .proc_handler = &proc_dointvec, 776 }, 777 { 778 .ctl_name = NET_CIPSOV4_RBM_OPTFMT, 779 .procname = "cipso_rbm_optfmt", 780 .data = &cipso_v4_rbm_optfmt, 781 .maxlen = sizeof(int), 782 .mode = 0644, 783 .proc_handler = &proc_dointvec, 784 }, 785 { 786 .ctl_name = NET_CIPSOV4_RBM_STRICTVALID, 787 .procname = "cipso_rbm_strictvalid", 788 .data = &cipso_v4_rbm_strictvalid, 789 .maxlen = sizeof(int), 790 .mode = 0644, 791 .proc_handler = &proc_dointvec, 792 }, 793#endif /* CONFIG_NETLABEL */ 794 { 795 .procname = "tcp_available_congestion_control", 796 .maxlen = TCP_CA_BUF_MAX, 797 .mode = 0444, 798 .proc_handler = &proc_tcp_available_congestion_control, 799 }, 800 { 801 .ctl_name = NET_TCP_ALLOWED_CONG_CONTROL, 802 .procname = "tcp_allowed_congestion_control", 803 .maxlen = TCP_CA_BUF_MAX, 804 .mode = 0644, 805 .proc_handler = &proc_allowed_congestion_control, 806 .strategy = &strategy_allowed_congestion_control, 807 }, 808 { 809 .ctl_name = NET_TCP_MAX_SSTHRESH, 810 .procname = "tcp_max_ssthresh", 811 .data = &sysctl_tcp_max_ssthresh, 812 .maxlen = sizeof(int), 813 .mode = 0644, 814 .proc_handler = &proc_dointvec, 815 }, 816 { 817 .ctl_name = CTL_UNNUMBERED, 818 .procname = "udp_mem", 819 .data = &sysctl_udp_mem, 820 .maxlen = sizeof(sysctl_udp_mem), 821 .mode = 0644, 822 .proc_handler = &proc_dointvec_minmax, 823 .strategy = &sysctl_intvec, 824 .extra1 = &zero 825 }, 826 { 827 .ctl_name = CTL_UNNUMBERED, 828 .procname = "udp_rmem_min", 829 .data = &sysctl_udp_rmem_min, 830 .maxlen = sizeof(sysctl_udp_rmem_min), 831 .mode = 0644, 832 .proc_handler = &proc_dointvec_minmax, 833 .strategy = &sysctl_intvec, 834 .extra1 = &zero 835 }, 836 { 837 .ctl_name = CTL_UNNUMBERED, 838 .procname = "udp_wmem_min", 839 .data = &sysctl_udp_wmem_min, 840 .maxlen = sizeof(sysctl_udp_wmem_min), 841 .mode = 0644, 842 .proc_handler = &proc_dointvec_minmax, 843 .strategy = &sysctl_intvec, 844 .extra1 = &zero 845 }, 846 { .ctl_name = 0 } 847}; 848 849static __initdata struct ctl_path net_ipv4_path[] = { 850 { .procname = "net", .ctl_name = CTL_NET, }, 851 { .procname = "ipv4", .ctl_name = NET_IPV4, }, 852 { }, 853}; 854 855static __init int sysctl_ipv4_init(void) 856{ 857 struct ctl_table_header *hdr; 858 859 hdr = register_sysctl_paths(net_ipv4_path, ipv4_table); 860 return hdr == NULL ? -ENOMEM : 0; 861} 862 863__initcall(sysctl_ipv4_init); 864