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