ipforward_sysctl.c
上传用户:xiaozhuqw
上传日期:2009-11-15
资源大小:1338k
文件大小:3k
源码类别:

网络

开发平台:

Unix_Linux

  1. /* IP forward control by sysctl function.
  2.  * Copyright (C) 1997, 1999 Kunihiro Ishiguro
  3.  *
  4.  * This file is part of GNU Zebra.
  5.  *
  6.  * GNU Zebra is free software; you can redistribute it and/or modify it
  7.  * under the terms of the GNU General Public License as published by the
  8.  * Free Software Foundation; either version 2, or (at your option) any
  9.  * later version.
  10.  *
  11.  * GNU Zebra is distributed in the hope that it will be useful, but
  12.  * WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14.  * General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with GNU Zebra; see the file COPYING.  If not, write to the Free
  18.  * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  19.  * 02111-1307, USA.  
  20.  */
  21. #include <zebra.h>
  22. #ifdef NRL
  23. #include <netinet6/in6.h>
  24. #endif /* NRL */
  25. #include "log.h"
  26. #define MIB_SIZ 4
  27. /* IPv4 forwarding control MIB. */
  28. int mib[MIB_SIZ] =
  29. {
  30.   CTL_NET,
  31.   PF_INET,
  32.   IPPROTO_IP,
  33.   IPCTL_FORWARDING
  34. };
  35. int
  36. ipforward ()
  37. {
  38.   int len;
  39.   int ipforwarding = 0;
  40.   len = sizeof ipforwarding;
  41.   if (sysctl (mib, MIB_SIZ, &ipforwarding, &len, 0, 0) < 0) 
  42.     {
  43.       zlog_warn ("Can't get ipforwarding value");
  44.       return -1;
  45.     }
  46.   return ipforwarding;
  47. }
  48. int
  49. ipforward_on ()
  50. {
  51.   int len;
  52.   int ipforwarding = 1;
  53.   len = sizeof ipforwarding;
  54.   if (sysctl (mib, MIB_SIZ, NULL, NULL, &ipforwarding, len) < 0) 
  55.     {
  56.       zlog_warn ("Can't set ipforwarding on");
  57.       return -1;
  58.     }
  59.   return ipforwarding;
  60. }
  61. int
  62. ipforward_off ()
  63. {
  64.   int len;
  65.   int ipforwarding = 0;
  66.   len = sizeof ipforwarding;
  67.   if (sysctl (mib, MIB_SIZ, NULL, NULL, &ipforwarding, len) < 0) 
  68.     {
  69.       zlog_warn ("Can't set ipforwarding on");
  70.       return -1;
  71.     }
  72.   return ipforwarding;
  73. }
  74. #ifdef HAVE_IPV6
  75. /* IPv6 forwarding control MIB. */
  76. int mib_ipv6[MIB_SIZ] = 
  77. {
  78.   CTL_NET,
  79.   PF_INET6,
  80. #if defined(KAME) || (defined(__bsdi__) && _BSDI_VERSION >= 199802 ) || defined(NRL)
  81.   IPPROTO_IPV6,
  82.   IPV6CTL_FORWARDING
  83. #else /* NOT KAME */
  84.   IPPROTO_IP,
  85.   IP6CTL_FORWARDING
  86. #endif /* KAME */
  87. }; 
  88. int
  89. ipforward_ipv6 ()
  90. {
  91.   int len;
  92.   int ip6forwarding = 0;
  93.   len = sizeof ip6forwarding;
  94.   if (sysctl (mib_ipv6, MIB_SIZ, &ip6forwarding, &len, 0, 0) < 0) 
  95.     {
  96.       zlog_warn ("can't get ip6forwarding value");
  97.       return -1;
  98.     }
  99.   return ip6forwarding;
  100. }
  101. int
  102. ipforward_ipv6_on ()
  103. {
  104.   int len;
  105.   int ip6forwarding = 1;
  106.   len = sizeof ip6forwarding;
  107.   if (sysctl (mib_ipv6, MIB_SIZ, NULL, NULL, &ip6forwarding, len) < 0) 
  108.     {
  109.       zlog_warn ("can't get ip6forwarding value");
  110.       return -1;
  111.     }
  112.   return ip6forwarding;
  113. }
  114. int
  115. ipforward_ipv6_off ()
  116. {
  117.   int len;
  118.   int ip6forwarding = 0;
  119.   len = sizeof ip6forwarding;
  120.   if (sysctl (mib_ipv6, MIB_SIZ, NULL, NULL, &ip6forwarding, len) < 0) 
  121.     {
  122.       zlog_warn ("can't get ip6forwarding value");
  123.       return -1;
  124.     }
  125.   return ip6forwarding;
  126. }
  127. #endif /* HAVE_IPV6 */