sysctl_net_ipv4.c revision 1c2fb7f93cb20621772bf304f3dba0849942e5db
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/config.h> 14#include <net/snmp.h> 15#include <net/ip.h> 16#include <net/route.h> 17#include <net/tcp.h> 18 19/* From af_inet.c */ 20extern int sysctl_ip_nonlocal_bind; 21 22/* From icmp.c */ 23extern int sysctl_icmp_echo_ignore_all; 24extern int sysctl_icmp_echo_ignore_broadcasts; 25extern int sysctl_icmp_ignore_bogus_error_responses; 26extern int sysctl_icmp_errors_use_inbound_ifaddr; 27 28/* From ip_fragment.c */ 29extern int sysctl_ipfrag_low_thresh; 30extern int sysctl_ipfrag_high_thresh; 31extern int sysctl_ipfrag_time; 32extern int sysctl_ipfrag_secret_interval; 33 34/* From ip_output.c */ 35extern int sysctl_ip_dynaddr; 36 37/* From icmp.c */ 38extern int sysctl_icmp_ratelimit; 39extern int sysctl_icmp_ratemask; 40 41/* From igmp.c */ 42extern int sysctl_igmp_max_memberships; 43extern int sysctl_igmp_max_msf; 44 45/* From inetpeer.c */ 46extern int inet_peer_threshold; 47extern int inet_peer_minttl; 48extern int inet_peer_maxttl; 49extern int inet_peer_gc_mintime; 50extern int inet_peer_gc_maxtime; 51 52#ifdef CONFIG_SYSCTL 53static int tcp_retr1_max = 255; 54static int ip_local_port_range_min[] = { 1, 1 }; 55static int ip_local_port_range_max[] = { 65535, 65535 }; 56#endif 57 58struct ipv4_config ipv4_config; 59 60extern ctl_table ipv4_route_table[]; 61 62#ifdef CONFIG_SYSCTL 63 64static 65int ipv4_sysctl_forward(ctl_table *ctl, int write, struct file * filp, 66 void __user *buffer, size_t *lenp, loff_t *ppos) 67{ 68 int val = ipv4_devconf.forwarding; 69 int ret; 70 71 ret = proc_dointvec(ctl, write, filp, buffer, lenp, ppos); 72 73 if (write && ipv4_devconf.forwarding != val) 74 inet_forward_change(); 75 76 return ret; 77} 78 79static int ipv4_sysctl_forward_strategy(ctl_table *table, 80 int __user *name, int nlen, 81 void __user *oldval, size_t __user *oldlenp, 82 void __user *newval, size_t newlen, 83 void **context) 84{ 85 int *valp = table->data; 86 int new; 87 88 if (!newval || !newlen) 89 return 0; 90 91 if (newlen != sizeof(int)) 92 return -EINVAL; 93 94 if (get_user(new, (int __user *)newval)) 95 return -EFAULT; 96 97 if (new == *valp) 98 return 0; 99 100 if (oldval && oldlenp) { 101 size_t len; 102 103 if (get_user(len, oldlenp)) 104 return -EFAULT; 105 106 if (len) { 107 if (len > table->maxlen) 108 len = table->maxlen; 109 if (copy_to_user(oldval, valp, len)) 110 return -EFAULT; 111 if (put_user(len, oldlenp)) 112 return -EFAULT; 113 } 114 } 115 116 *valp = new; 117 inet_forward_change(); 118 return 1; 119} 120 121ctl_table ipv4_table[] = { 122 { 123 .ctl_name = NET_IPV4_TCP_TIMESTAMPS, 124 .procname = "tcp_timestamps", 125 .data = &sysctl_tcp_timestamps, 126 .maxlen = sizeof(int), 127 .mode = 0644, 128 .proc_handler = &proc_dointvec 129 }, 130 { 131 .ctl_name = NET_IPV4_TCP_WINDOW_SCALING, 132 .procname = "tcp_window_scaling", 133 .data = &sysctl_tcp_window_scaling, 134 .maxlen = sizeof(int), 135 .mode = 0644, 136 .proc_handler = &proc_dointvec 137 }, 138 { 139 .ctl_name = NET_IPV4_TCP_SACK, 140 .procname = "tcp_sack", 141 .data = &sysctl_tcp_sack, 142 .maxlen = sizeof(int), 143 .mode = 0644, 144 .proc_handler = &proc_dointvec 145 }, 146 { 147 .ctl_name = NET_IPV4_TCP_RETRANS_COLLAPSE, 148 .procname = "tcp_retrans_collapse", 149 .data = &sysctl_tcp_retrans_collapse, 150 .maxlen = sizeof(int), 151 .mode = 0644, 152 .proc_handler = &proc_dointvec 153 }, 154 { 155 .ctl_name = NET_IPV4_FORWARD, 156 .procname = "ip_forward", 157 .data = &ipv4_devconf.forwarding, 158 .maxlen = sizeof(int), 159 .mode = 0644, 160 .proc_handler = &ipv4_sysctl_forward, 161 .strategy = &ipv4_sysctl_forward_strategy 162 }, 163 { 164 .ctl_name = NET_IPV4_DEFAULT_TTL, 165 .procname = "ip_default_ttl", 166 .data = &sysctl_ip_default_ttl, 167 .maxlen = sizeof(int), 168 .mode = 0644, 169 .proc_handler = &ipv4_doint_and_flush, 170 .strategy = &ipv4_doint_and_flush_strategy, 171 }, 172 { 173 .ctl_name = NET_IPV4_AUTOCONFIG, 174 .procname = "ip_autoconfig", 175 .data = &ipv4_config.autoconfig, 176 .maxlen = sizeof(int), 177 .mode = 0644, 178 .proc_handler = &proc_dointvec 179 }, 180 { 181 .ctl_name = NET_IPV4_NO_PMTU_DISC, 182 .procname = "ip_no_pmtu_disc", 183 .data = &ipv4_config.no_pmtu_disc, 184 .maxlen = sizeof(int), 185 .mode = 0644, 186 .proc_handler = &proc_dointvec 187 }, 188 { 189 .ctl_name = NET_IPV4_NONLOCAL_BIND, 190 .procname = "ip_nonlocal_bind", 191 .data = &sysctl_ip_nonlocal_bind, 192 .maxlen = sizeof(int), 193 .mode = 0644, 194 .proc_handler = &proc_dointvec 195 }, 196 { 197 .ctl_name = NET_IPV4_TCP_SYN_RETRIES, 198 .procname = "tcp_syn_retries", 199 .data = &sysctl_tcp_syn_retries, 200 .maxlen = sizeof(int), 201 .mode = 0644, 202 .proc_handler = &proc_dointvec 203 }, 204 { 205 .ctl_name = NET_TCP_SYNACK_RETRIES, 206 .procname = "tcp_synack_retries", 207 .data = &sysctl_tcp_synack_retries, 208 .maxlen = sizeof(int), 209 .mode = 0644, 210 .proc_handler = &proc_dointvec 211 }, 212 { 213 .ctl_name = NET_TCP_MAX_ORPHANS, 214 .procname = "tcp_max_orphans", 215 .data = &sysctl_tcp_max_orphans, 216 .maxlen = sizeof(int), 217 .mode = 0644, 218 .proc_handler = &proc_dointvec 219 }, 220 { 221 .ctl_name = NET_TCP_MAX_TW_BUCKETS, 222 .procname = "tcp_max_tw_buckets", 223 .data = &sysctl_tcp_max_tw_buckets, 224 .maxlen = sizeof(int), 225 .mode = 0644, 226 .proc_handler = &proc_dointvec 227 }, 228 { 229 .ctl_name = NET_IPV4_IPFRAG_HIGH_THRESH, 230 .procname = "ipfrag_high_thresh", 231 .data = &sysctl_ipfrag_high_thresh, 232 .maxlen = sizeof(int), 233 .mode = 0644, 234 .proc_handler = &proc_dointvec 235 }, 236 { 237 .ctl_name = NET_IPV4_IPFRAG_LOW_THRESH, 238 .procname = "ipfrag_low_thresh", 239 .data = &sysctl_ipfrag_low_thresh, 240 .maxlen = sizeof(int), 241 .mode = 0644, 242 .proc_handler = &proc_dointvec 243 }, 244 { 245 .ctl_name = NET_IPV4_DYNADDR, 246 .procname = "ip_dynaddr", 247 .data = &sysctl_ip_dynaddr, 248 .maxlen = sizeof(int), 249 .mode = 0644, 250 .proc_handler = &proc_dointvec 251 }, 252 { 253 .ctl_name = NET_IPV4_IPFRAG_TIME, 254 .procname = "ipfrag_time", 255 .data = &sysctl_ipfrag_time, 256 .maxlen = sizeof(int), 257 .mode = 0644, 258 .proc_handler = &proc_dointvec_jiffies, 259 .strategy = &sysctl_jiffies 260 }, 261 { 262 .ctl_name = NET_IPV4_TCP_KEEPALIVE_TIME, 263 .procname = "tcp_keepalive_time", 264 .data = &sysctl_tcp_keepalive_time, 265 .maxlen = sizeof(int), 266 .mode = 0644, 267 .proc_handler = &proc_dointvec_jiffies, 268 .strategy = &sysctl_jiffies 269 }, 270 { 271 .ctl_name = NET_IPV4_TCP_KEEPALIVE_PROBES, 272 .procname = "tcp_keepalive_probes", 273 .data = &sysctl_tcp_keepalive_probes, 274 .maxlen = sizeof(int), 275 .mode = 0644, 276 .proc_handler = &proc_dointvec 277 }, 278 { 279 .ctl_name = NET_IPV4_TCP_KEEPALIVE_INTVL, 280 .procname = "tcp_keepalive_intvl", 281 .data = &sysctl_tcp_keepalive_intvl, 282 .maxlen = sizeof(int), 283 .mode = 0644, 284 .proc_handler = &proc_dointvec_jiffies, 285 .strategy = &sysctl_jiffies 286 }, 287 { 288 .ctl_name = NET_IPV4_TCP_RETRIES1, 289 .procname = "tcp_retries1", 290 .data = &sysctl_tcp_retries1, 291 .maxlen = sizeof(int), 292 .mode = 0644, 293 .proc_handler = &proc_dointvec_minmax, 294 .strategy = &sysctl_intvec, 295 .extra2 = &tcp_retr1_max 296 }, 297 { 298 .ctl_name = NET_IPV4_TCP_RETRIES2, 299 .procname = "tcp_retries2", 300 .data = &sysctl_tcp_retries2, 301 .maxlen = sizeof(int), 302 .mode = 0644, 303 .proc_handler = &proc_dointvec 304 }, 305 { 306 .ctl_name = NET_IPV4_TCP_FIN_TIMEOUT, 307 .procname = "tcp_fin_timeout", 308 .data = &sysctl_tcp_fin_timeout, 309 .maxlen = sizeof(int), 310 .mode = 0644, 311 .proc_handler = &proc_dointvec_jiffies, 312 .strategy = &sysctl_jiffies 313 }, 314#ifdef CONFIG_SYN_COOKIES 315 { 316 .ctl_name = NET_TCP_SYNCOOKIES, 317 .procname = "tcp_syncookies", 318 .data = &sysctl_tcp_syncookies, 319 .maxlen = sizeof(int), 320 .mode = 0644, 321 .proc_handler = &proc_dointvec 322 }, 323#endif 324 { 325 .ctl_name = NET_TCP_TW_RECYCLE, 326 .procname = "tcp_tw_recycle", 327 .data = &sysctl_tcp_tw_recycle, 328 .maxlen = sizeof(int), 329 .mode = 0644, 330 .proc_handler = &proc_dointvec 331 }, 332 { 333 .ctl_name = NET_TCP_ABORT_ON_OVERFLOW, 334 .procname = "tcp_abort_on_overflow", 335 .data = &sysctl_tcp_abort_on_overflow, 336 .maxlen = sizeof(int), 337 .mode = 0644, 338 .proc_handler = &proc_dointvec 339 }, 340 { 341 .ctl_name = NET_TCP_STDURG, 342 .procname = "tcp_stdurg", 343 .data = &sysctl_tcp_stdurg, 344 .maxlen = sizeof(int), 345 .mode = 0644, 346 .proc_handler = &proc_dointvec 347 }, 348 { 349 .ctl_name = NET_TCP_RFC1337, 350 .procname = "tcp_rfc1337", 351 .data = &sysctl_tcp_rfc1337, 352 .maxlen = sizeof(int), 353 .mode = 0644, 354 .proc_handler = &proc_dointvec 355 }, 356 { 357 .ctl_name = NET_TCP_MAX_SYN_BACKLOG, 358 .procname = "tcp_max_syn_backlog", 359 .data = &sysctl_max_syn_backlog, 360 .maxlen = sizeof(int), 361 .mode = 0644, 362 .proc_handler = &proc_dointvec 363 }, 364 { 365 .ctl_name = NET_IPV4_LOCAL_PORT_RANGE, 366 .procname = "ip_local_port_range", 367 .data = &sysctl_local_port_range, 368 .maxlen = sizeof(sysctl_local_port_range), 369 .mode = 0644, 370 .proc_handler = &proc_dointvec_minmax, 371 .strategy = &sysctl_intvec, 372 .extra1 = ip_local_port_range_min, 373 .extra2 = ip_local_port_range_max 374 }, 375 { 376 .ctl_name = NET_IPV4_ICMP_ECHO_IGNORE_ALL, 377 .procname = "icmp_echo_ignore_all", 378 .data = &sysctl_icmp_echo_ignore_all, 379 .maxlen = sizeof(int), 380 .mode = 0644, 381 .proc_handler = &proc_dointvec 382 }, 383 { 384 .ctl_name = NET_IPV4_ICMP_ECHO_IGNORE_BROADCASTS, 385 .procname = "icmp_echo_ignore_broadcasts", 386 .data = &sysctl_icmp_echo_ignore_broadcasts, 387 .maxlen = sizeof(int), 388 .mode = 0644, 389 .proc_handler = &proc_dointvec 390 }, 391 { 392 .ctl_name = NET_IPV4_ICMP_IGNORE_BOGUS_ERROR_RESPONSES, 393 .procname = "icmp_ignore_bogus_error_responses", 394 .data = &sysctl_icmp_ignore_bogus_error_responses, 395 .maxlen = sizeof(int), 396 .mode = 0644, 397 .proc_handler = &proc_dointvec 398 }, 399 { 400 .ctl_name = NET_IPV4_ICMP_ERRORS_USE_INBOUND_IFADDR, 401 .procname = "icmp_errors_use_inbound_ifaddr", 402 .data = &sysctl_icmp_errors_use_inbound_ifaddr, 403 .maxlen = sizeof(int), 404 .mode = 0644, 405 .proc_handler = &proc_dointvec 406 }, 407 { 408 .ctl_name = NET_IPV4_ROUTE, 409 .procname = "route", 410 .maxlen = 0, 411 .mode = 0555, 412 .child = ipv4_route_table 413 }, 414#ifdef CONFIG_IP_MULTICAST 415 { 416 .ctl_name = NET_IPV4_IGMP_MAX_MEMBERSHIPS, 417 .procname = "igmp_max_memberships", 418 .data = &sysctl_igmp_max_memberships, 419 .maxlen = sizeof(int), 420 .mode = 0644, 421 .proc_handler = &proc_dointvec 422 }, 423 424#endif 425 { 426 .ctl_name = NET_IPV4_IGMP_MAX_MSF, 427 .procname = "igmp_max_msf", 428 .data = &sysctl_igmp_max_msf, 429 .maxlen = sizeof(int), 430 .mode = 0644, 431 .proc_handler = &proc_dointvec 432 }, 433 { 434 .ctl_name = NET_IPV4_INET_PEER_THRESHOLD, 435 .procname = "inet_peer_threshold", 436 .data = &inet_peer_threshold, 437 .maxlen = sizeof(int), 438 .mode = 0644, 439 .proc_handler = &proc_dointvec 440 }, 441 { 442 .ctl_name = NET_IPV4_INET_PEER_MINTTL, 443 .procname = "inet_peer_minttl", 444 .data = &inet_peer_minttl, 445 .maxlen = sizeof(int), 446 .mode = 0644, 447 .proc_handler = &proc_dointvec_jiffies, 448 .strategy = &sysctl_jiffies 449 }, 450 { 451 .ctl_name = NET_IPV4_INET_PEER_MAXTTL, 452 .procname = "inet_peer_maxttl", 453 .data = &inet_peer_maxttl, 454 .maxlen = sizeof(int), 455 .mode = 0644, 456 .proc_handler = &proc_dointvec_jiffies, 457 .strategy = &sysctl_jiffies 458 }, 459 { 460 .ctl_name = NET_IPV4_INET_PEER_GC_MINTIME, 461 .procname = "inet_peer_gc_mintime", 462 .data = &inet_peer_gc_mintime, 463 .maxlen = sizeof(int), 464 .mode = 0644, 465 .proc_handler = &proc_dointvec_jiffies, 466 .strategy = &sysctl_jiffies 467 }, 468 { 469 .ctl_name = NET_IPV4_INET_PEER_GC_MAXTIME, 470 .procname = "inet_peer_gc_maxtime", 471 .data = &inet_peer_gc_maxtime, 472 .maxlen = sizeof(int), 473 .mode = 0644, 474 .proc_handler = &proc_dointvec_jiffies, 475 .strategy = &sysctl_jiffies 476 }, 477 { 478 .ctl_name = NET_TCP_ORPHAN_RETRIES, 479 .procname = "tcp_orphan_retries", 480 .data = &sysctl_tcp_orphan_retries, 481 .maxlen = sizeof(int), 482 .mode = 0644, 483 .proc_handler = &proc_dointvec 484 }, 485 { 486 .ctl_name = NET_TCP_FACK, 487 .procname = "tcp_fack", 488 .data = &sysctl_tcp_fack, 489 .maxlen = sizeof(int), 490 .mode = 0644, 491 .proc_handler = &proc_dointvec 492 }, 493 { 494 .ctl_name = NET_TCP_REORDERING, 495 .procname = "tcp_reordering", 496 .data = &sysctl_tcp_reordering, 497 .maxlen = sizeof(int), 498 .mode = 0644, 499 .proc_handler = &proc_dointvec 500 }, 501 { 502 .ctl_name = NET_TCP_ECN, 503 .procname = "tcp_ecn", 504 .data = &sysctl_tcp_ecn, 505 .maxlen = sizeof(int), 506 .mode = 0644, 507 .proc_handler = &proc_dointvec 508 }, 509 { 510 .ctl_name = NET_TCP_DSACK, 511 .procname = "tcp_dsack", 512 .data = &sysctl_tcp_dsack, 513 .maxlen = sizeof(int), 514 .mode = 0644, 515 .proc_handler = &proc_dointvec 516 }, 517 { 518 .ctl_name = NET_TCP_MEM, 519 .procname = "tcp_mem", 520 .data = &sysctl_tcp_mem, 521 .maxlen = sizeof(sysctl_tcp_mem), 522 .mode = 0644, 523 .proc_handler = &proc_dointvec 524 }, 525 { 526 .ctl_name = NET_TCP_WMEM, 527 .procname = "tcp_wmem", 528 .data = &sysctl_tcp_wmem, 529 .maxlen = sizeof(sysctl_tcp_wmem), 530 .mode = 0644, 531 .proc_handler = &proc_dointvec 532 }, 533 { 534 .ctl_name = NET_TCP_RMEM, 535 .procname = "tcp_rmem", 536 .data = &sysctl_tcp_rmem, 537 .maxlen = sizeof(sysctl_tcp_rmem), 538 .mode = 0644, 539 .proc_handler = &proc_dointvec 540 }, 541 { 542 .ctl_name = NET_TCP_APP_WIN, 543 .procname = "tcp_app_win", 544 .data = &sysctl_tcp_app_win, 545 .maxlen = sizeof(int), 546 .mode = 0644, 547 .proc_handler = &proc_dointvec 548 }, 549 { 550 .ctl_name = NET_TCP_ADV_WIN_SCALE, 551 .procname = "tcp_adv_win_scale", 552 .data = &sysctl_tcp_adv_win_scale, 553 .maxlen = sizeof(int), 554 .mode = 0644, 555 .proc_handler = &proc_dointvec 556 }, 557 { 558 .ctl_name = NET_IPV4_ICMP_RATELIMIT, 559 .procname = "icmp_ratelimit", 560 .data = &sysctl_icmp_ratelimit, 561 .maxlen = sizeof(int), 562 .mode = 0644, 563 .proc_handler = &proc_dointvec 564 }, 565 { 566 .ctl_name = NET_IPV4_ICMP_RATEMASK, 567 .procname = "icmp_ratemask", 568 .data = &sysctl_icmp_ratemask, 569 .maxlen = sizeof(int), 570 .mode = 0644, 571 .proc_handler = &proc_dointvec 572 }, 573 { 574 .ctl_name = NET_TCP_TW_REUSE, 575 .procname = "tcp_tw_reuse", 576 .data = &sysctl_tcp_tw_reuse, 577 .maxlen = sizeof(int), 578 .mode = 0644, 579 .proc_handler = &proc_dointvec 580 }, 581 { 582 .ctl_name = NET_TCP_FRTO, 583 .procname = "tcp_frto", 584 .data = &sysctl_tcp_frto, 585 .maxlen = sizeof(int), 586 .mode = 0644, 587 .proc_handler = &proc_dointvec 588 }, 589 { 590 .ctl_name = NET_TCP_LOW_LATENCY, 591 .procname = "tcp_low_latency", 592 .data = &sysctl_tcp_low_latency, 593 .maxlen = sizeof(int), 594 .mode = 0644, 595 .proc_handler = &proc_dointvec 596 }, 597 { 598 .ctl_name = NET_IPV4_IPFRAG_SECRET_INTERVAL, 599 .procname = "ipfrag_secret_interval", 600 .data = &sysctl_ipfrag_secret_interval, 601 .maxlen = sizeof(int), 602 .mode = 0644, 603 .proc_handler = &proc_dointvec_jiffies, 604 .strategy = &sysctl_jiffies 605 }, 606 { 607 .ctl_name = NET_TCP_NO_METRICS_SAVE, 608 .procname = "tcp_no_metrics_save", 609 .data = &sysctl_tcp_nometrics_save, 610 .maxlen = sizeof(int), 611 .mode = 0644, 612 .proc_handler = &proc_dointvec, 613 }, 614 { 615 .ctl_name = NET_TCP_WESTWOOD, 616 .procname = "tcp_westwood", 617 .data = &sysctl_tcp_westwood, 618 .maxlen = sizeof(int), 619 .mode = 0644, 620 .proc_handler = &proc_dointvec, 621 }, 622 { 623 .ctl_name = NET_TCP_VEGAS, 624 .procname = "tcp_vegas_cong_avoid", 625 .data = &sysctl_tcp_vegas_cong_avoid, 626 .maxlen = sizeof(int), 627 .mode = 0644, 628 .proc_handler = &proc_dointvec, 629 }, 630 { 631 .ctl_name = NET_TCP_VEGAS_ALPHA, 632 .procname = "tcp_vegas_alpha", 633 .data = &sysctl_tcp_vegas_alpha, 634 .maxlen = sizeof(int), 635 .mode = 0644, 636 .proc_handler = &proc_dointvec, 637 }, 638 { 639 .ctl_name = NET_TCP_VEGAS_BETA, 640 .procname = "tcp_vegas_beta", 641 .data = &sysctl_tcp_vegas_beta, 642 .maxlen = sizeof(int), 643 .mode = 0644, 644 .proc_handler = &proc_dointvec, 645 }, 646 { 647 .ctl_name = NET_TCP_VEGAS_GAMMA, 648 .procname = "tcp_vegas_gamma", 649 .data = &sysctl_tcp_vegas_gamma, 650 .maxlen = sizeof(int), 651 .mode = 0644, 652 .proc_handler = &proc_dointvec, 653 }, 654 { 655 .ctl_name = NET_TCP_BIC, 656 .procname = "tcp_bic", 657 .data = &sysctl_tcp_bic, 658 .maxlen = sizeof(int), 659 .mode = 0644, 660 .proc_handler = &proc_dointvec, 661 }, 662 { 663 .ctl_name = NET_TCP_BIC_FAST_CONVERGENCE, 664 .procname = "tcp_bic_fast_convergence", 665 .data = &sysctl_tcp_bic_fast_convergence, 666 .maxlen = sizeof(int), 667 .mode = 0644, 668 .proc_handler = &proc_dointvec, 669 }, 670 { 671 .ctl_name = NET_TCP_BIC_LOW_WINDOW, 672 .procname = "tcp_bic_low_window", 673 .data = &sysctl_tcp_bic_low_window, 674 .maxlen = sizeof(int), 675 .mode = 0644, 676 .proc_handler = &proc_dointvec, 677 }, 678 { 679 .ctl_name = NET_TCP_MODERATE_RCVBUF, 680 .procname = "tcp_moderate_rcvbuf", 681 .data = &sysctl_tcp_moderate_rcvbuf, 682 .maxlen = sizeof(int), 683 .mode = 0644, 684 .proc_handler = &proc_dointvec, 685 }, 686 { 687 .ctl_name = NET_TCP_TSO_WIN_DIVISOR, 688 .procname = "tcp_tso_win_divisor", 689 .data = &sysctl_tcp_tso_win_divisor, 690 .maxlen = sizeof(int), 691 .mode = 0644, 692 .proc_handler = &proc_dointvec, 693 }, 694 { 695 .ctl_name = NET_TCP_BIC_BETA, 696 .procname = "tcp_bic_beta", 697 .data = &sysctl_tcp_bic_beta, 698 .maxlen = sizeof(int), 699 .mode = 0644, 700 .proc_handler = &proc_dointvec, 701 }, 702 { .ctl_name = 0 } 703}; 704 705#endif /* CONFIG_SYSCTL */ 706 707EXPORT_SYMBOL(ipv4_config); 708