sysctl_net_ipv4.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:9k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  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/sysctl.h>
  11. #include <linux/config.h>
  12. #include <net/snmp.h>
  13. #include <net/ip.h>
  14. #include <net/route.h>
  15. #include <net/tcp.h>
  16. /* From af_inet.c */
  17. extern int sysctl_ip_nonlocal_bind;
  18. /* From icmp.c */
  19. extern int sysctl_icmp_echo_ignore_all;
  20. extern int sysctl_icmp_echo_ignore_broadcasts;
  21. extern int sysctl_icmp_ignore_bogus_error_responses;
  22. /* From ip_fragment.c */
  23. extern int sysctl_ipfrag_low_thresh;
  24. extern int sysctl_ipfrag_high_thresh; 
  25. extern int sysctl_ipfrag_time;
  26. /* From ip_output.c */
  27. extern int sysctl_ip_dynaddr;
  28. /* From icmp.c */
  29. extern int sysctl_icmp_ratelimit;
  30. extern int sysctl_icmp_ratemask;
  31. /* From igmp.c */
  32. extern int sysctl_igmp_max_memberships;
  33. /* From inetpeer.c */
  34. extern int inet_peer_threshold;
  35. extern int inet_peer_minttl;
  36. extern int inet_peer_maxttl;
  37. extern int inet_peer_gc_mintime;
  38. extern int inet_peer_gc_maxtime;
  39. #ifdef CONFIG_SYSCTL
  40. static int tcp_retr1_max = 255; 
  41. static int ip_local_port_range_min[] = { 1, 1 };
  42. static int ip_local_port_range_max[] = { 65535, 65535 };
  43. #endif
  44. struct ipv4_config ipv4_config;
  45. extern ctl_table ipv4_route_table[];
  46. #ifdef CONFIG_SYSCTL
  47. static
  48. int ipv4_sysctl_forward(ctl_table *ctl, int write, struct file * filp,
  49. void *buffer, size_t *lenp)
  50. {
  51. int val = ipv4_devconf.forwarding;
  52. int ret;
  53. ret = proc_dointvec(ctl, write, filp, buffer, lenp);
  54. if (write && ipv4_devconf.forwarding != val)
  55. inet_forward_change();
  56. return ret;
  57. }
  58. static int ipv4_sysctl_forward_strategy(ctl_table *table, int *name, int nlen,
  59.  void *oldval, size_t *oldlenp,
  60.  void *newval, size_t newlen, 
  61.  void **context)
  62. {
  63. int new;
  64. if (newlen != sizeof(int))
  65. return -EINVAL;
  66. if (get_user(new,(int *)newval))
  67. return -EFAULT; 
  68. if (new != ipv4_devconf.forwarding) 
  69. inet_forward_change(); 
  70. return 0; /* caller does change again and handles handles oldval */ 
  71. }
  72. ctl_table ipv4_table[] = {
  73.         {NET_IPV4_TCP_TIMESTAMPS, "tcp_timestamps",
  74.          &sysctl_tcp_timestamps, sizeof(int), 0644, NULL,
  75.          &proc_dointvec},
  76.         {NET_IPV4_TCP_WINDOW_SCALING, "tcp_window_scaling",
  77.          &sysctl_tcp_window_scaling, sizeof(int), 0644, NULL,
  78.          &proc_dointvec},
  79.         {NET_IPV4_TCP_SACK, "tcp_sack",
  80.          &sysctl_tcp_sack, sizeof(int), 0644, NULL,
  81.          &proc_dointvec},
  82.         {NET_IPV4_TCP_RETRANS_COLLAPSE, "tcp_retrans_collapse",
  83.          &sysctl_tcp_retrans_collapse, sizeof(int), 0644, NULL,
  84.          &proc_dointvec},
  85.         {NET_IPV4_FORWARD, "ip_forward",
  86.          &ipv4_devconf.forwarding, sizeof(int), 0644, NULL,
  87.          &ipv4_sysctl_forward,&ipv4_sysctl_forward_strategy},
  88.         {NET_IPV4_DEFAULT_TTL, "ip_default_ttl",
  89.          &sysctl_ip_default_ttl, sizeof(int), 0644, NULL,
  90.          &proc_dointvec},
  91.         {NET_IPV4_AUTOCONFIG, "ip_autoconfig",
  92.          &ipv4_config.autoconfig, sizeof(int), 0644, NULL,
  93.          &proc_dointvec},
  94.         {NET_IPV4_NO_PMTU_DISC, "ip_no_pmtu_disc",
  95.          &ipv4_config.no_pmtu_disc, sizeof(int), 0644, NULL,
  96.          &proc_dointvec},
  97. {NET_IPV4_NONLOCAL_BIND, "ip_nonlocal_bind",
  98.  &sysctl_ip_nonlocal_bind, sizeof(int), 0644, NULL,
  99.  &proc_dointvec},
  100. {NET_IPV4_TCP_SYN_RETRIES, "tcp_syn_retries",
  101.  &sysctl_tcp_syn_retries, sizeof(int), 0644, NULL, &proc_dointvec},
  102. {NET_TCP_SYNACK_RETRIES, "tcp_synack_retries",
  103.  &sysctl_tcp_synack_retries, sizeof(int), 0644, NULL, &proc_dointvec},
  104. {NET_TCP_MAX_ORPHANS, "tcp_max_orphans",
  105.  &sysctl_tcp_max_orphans, sizeof(int), 0644, NULL, &proc_dointvec},
  106. {NET_TCP_MAX_TW_BUCKETS, "tcp_max_tw_buckets",
  107.  &sysctl_tcp_max_tw_buckets, sizeof(int), 0644, NULL, &proc_dointvec},
  108. {NET_IPV4_IPFRAG_HIGH_THRESH, "ipfrag_high_thresh",
  109.  &sysctl_ipfrag_high_thresh, sizeof(int), 0644, NULL, &proc_dointvec},
  110. {NET_IPV4_IPFRAG_LOW_THRESH, "ipfrag_low_thresh",
  111.  &sysctl_ipfrag_low_thresh, sizeof(int), 0644, NULL, &proc_dointvec},
  112. {NET_IPV4_DYNADDR, "ip_dynaddr",
  113.  &sysctl_ip_dynaddr, sizeof(int), 0644, NULL, &proc_dointvec},
  114. {NET_IPV4_IPFRAG_TIME, "ipfrag_time",
  115.  &sysctl_ipfrag_time, sizeof(int), 0644, NULL, &proc_dointvec_jiffies, 
  116.  &sysctl_jiffies},
  117. {NET_IPV4_TCP_KEEPALIVE_TIME, "tcp_keepalive_time",
  118.  &sysctl_tcp_keepalive_time, sizeof(int), 0644, NULL, 
  119.  &proc_dointvec_jiffies, &sysctl_jiffies},
  120. {NET_IPV4_TCP_KEEPALIVE_PROBES, "tcp_keepalive_probes",
  121.  &sysctl_tcp_keepalive_probes, sizeof(int), 0644, NULL, 
  122.  &proc_dointvec},
  123. {NET_IPV4_TCP_KEEPALIVE_INTVL, "tcp_keepalive_intvl",
  124.  &sysctl_tcp_keepalive_intvl, sizeof(int), 0644, NULL,
  125.  &proc_dointvec_jiffies, &sysctl_jiffies},
  126. {NET_IPV4_TCP_RETRIES1, "tcp_retries1",
  127.  &sysctl_tcp_retries1, sizeof(int), 0644, NULL, &proc_dointvec_minmax, 
  128.  &sysctl_intvec, NULL, NULL, &tcp_retr1_max},
  129. {NET_IPV4_TCP_RETRIES2, "tcp_retries2",
  130.  &sysctl_tcp_retries2, sizeof(int), 0644, NULL, &proc_dointvec},
  131. {NET_IPV4_TCP_FIN_TIMEOUT, "tcp_fin_timeout",
  132.  &sysctl_tcp_fin_timeout, sizeof(int), 0644, NULL, 
  133.  &proc_dointvec_jiffies, &sysctl_jiffies},
  134. #ifdef CONFIG_SYN_COOKIES
  135. {NET_TCP_SYNCOOKIES, "tcp_syncookies",
  136.  &sysctl_tcp_syncookies, sizeof(int), 0644, NULL, &proc_dointvec},
  137. #endif
  138. {NET_TCP_TW_RECYCLE, "tcp_tw_recycle",
  139.  &sysctl_tcp_tw_recycle, sizeof(int), 0644, NULL, &proc_dointvec},
  140. {NET_TCP_ABORT_ON_OVERFLOW, "tcp_abort_on_overflow",
  141.  &sysctl_tcp_abort_on_overflow, sizeof(int), 0644, NULL, &proc_dointvec},
  142. {NET_TCP_STDURG, "tcp_stdurg", &sysctl_tcp_stdurg,
  143.  sizeof(int), 0644, NULL, &proc_dointvec},
  144. {NET_TCP_RFC1337, "tcp_rfc1337", &sysctl_tcp_rfc1337,
  145.  sizeof(int), 0644, NULL, &proc_dointvec},
  146. {NET_TCP_MAX_SYN_BACKLOG, "tcp_max_syn_backlog", &sysctl_max_syn_backlog,
  147.  sizeof(int), 0644, NULL, &proc_dointvec},
  148. {NET_IPV4_LOCAL_PORT_RANGE, "ip_local_port_range",
  149.  &sysctl_local_port_range, sizeof(sysctl_local_port_range), 0644, 
  150.  NULL, &proc_dointvec_minmax, &sysctl_intvec, NULL,
  151.  ip_local_port_range_min, ip_local_port_range_max },
  152. {NET_IPV4_ICMP_ECHO_IGNORE_ALL, "icmp_echo_ignore_all",
  153.  &sysctl_icmp_echo_ignore_all, sizeof(int), 0644, NULL,
  154.  &proc_dointvec},
  155. {NET_IPV4_ICMP_ECHO_IGNORE_BROADCASTS, "icmp_echo_ignore_broadcasts",
  156.  &sysctl_icmp_echo_ignore_broadcasts, sizeof(int), 0644, NULL,
  157.  &proc_dointvec},
  158. {NET_IPV4_ICMP_IGNORE_BOGUS_ERROR_RESPONSES, "icmp_ignore_bogus_error_responses",
  159.  &sysctl_icmp_ignore_bogus_error_responses, sizeof(int), 0644, NULL,
  160.  &proc_dointvec},
  161. {NET_IPV4_ROUTE, "route", NULL, 0, 0555, ipv4_route_table},
  162. #ifdef CONFIG_IP_MULTICAST
  163. {NET_IPV4_IGMP_MAX_MEMBERSHIPS, "igmp_max_memberships",
  164.  &sysctl_igmp_max_memberships, sizeof(int), 0644, NULL, &proc_dointvec},
  165. #endif
  166. {NET_IPV4_INET_PEER_THRESHOLD, "inet_peer_threshold",
  167.  &inet_peer_threshold, sizeof(int), 0644, NULL, &proc_dointvec},
  168. {NET_IPV4_INET_PEER_MINTTL, "inet_peer_minttl",
  169.  &inet_peer_minttl, sizeof(int), 0644, NULL,
  170.  &proc_dointvec_jiffies, &sysctl_jiffies},
  171. {NET_IPV4_INET_PEER_MAXTTL, "inet_peer_maxttl",
  172.  &inet_peer_maxttl, sizeof(int), 0644, NULL,
  173.  &proc_dointvec_jiffies, &sysctl_jiffies},
  174. {NET_IPV4_INET_PEER_GC_MINTIME, "inet_peer_gc_mintime",
  175.  &inet_peer_gc_mintime, sizeof(int), 0644, NULL,
  176.  &proc_dointvec_jiffies, &sysctl_jiffies},
  177. {NET_IPV4_INET_PEER_GC_MAXTIME, "inet_peer_gc_maxtime",
  178.  &inet_peer_gc_maxtime, sizeof(int), 0644, NULL,
  179.  &proc_dointvec_jiffies, &sysctl_jiffies},
  180. {NET_TCP_ORPHAN_RETRIES, "tcp_orphan_retries",
  181.  &sysctl_tcp_orphan_retries, sizeof(int), 0644, NULL, &proc_dointvec},
  182. {NET_TCP_FACK, "tcp_fack",
  183.  &sysctl_tcp_fack, sizeof(int), 0644, NULL, &proc_dointvec},
  184. {NET_TCP_REORDERING, "tcp_reordering",
  185.  &sysctl_tcp_reordering, sizeof(int), 0644, NULL, &proc_dointvec},
  186. {NET_TCP_ECN, "tcp_ecn",
  187.  &sysctl_tcp_ecn, sizeof(int), 0644, NULL, &proc_dointvec},
  188. {NET_TCP_DSACK, "tcp_dsack",
  189.  &sysctl_tcp_dsack, sizeof(int), 0644, NULL, &proc_dointvec},
  190. {NET_TCP_MEM, "tcp_mem",
  191.  &sysctl_tcp_mem, sizeof(sysctl_tcp_mem), 0644, NULL, &proc_dointvec},
  192. {NET_TCP_WMEM, "tcp_wmem",
  193.  &sysctl_tcp_wmem, sizeof(sysctl_tcp_wmem), 0644, NULL, &proc_dointvec},
  194. {NET_TCP_RMEM, "tcp_rmem",
  195.  &sysctl_tcp_rmem, sizeof(sysctl_tcp_rmem), 0644, NULL, &proc_dointvec},
  196. {NET_TCP_APP_WIN, "tcp_app_win",
  197.  &sysctl_tcp_app_win, sizeof(int), 0644, NULL, &proc_dointvec},
  198. {NET_TCP_ADV_WIN_SCALE, "tcp_adv_win_scale",
  199.  &sysctl_tcp_adv_win_scale, sizeof(int), 0644, NULL, &proc_dointvec},
  200. {NET_IPV4_ICMP_RATELIMIT, "icmp_ratelimit",
  201.  &sysctl_icmp_ratelimit, sizeof(int), 0644, NULL, &proc_dointvec},
  202. {NET_IPV4_ICMP_RATEMASK, "icmp_ratemask",
  203.  &sysctl_icmp_ratemask, sizeof(int), 0644, NULL, &proc_dointvec},
  204. {0}
  205. };
  206. #endif /* CONFIG_SYSCTL */