sysctl_net_ipv4.c 16 KB

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