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