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