and added files
[bcm963xx.git] / userapps / opensource / zebra / zebra / ipforward_sysctl.c
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
22 #include <zebra.h>
23
24 #ifdef NRL
25 #include <netinet6/in6.h>
26 #endif /* NRL */
27
28 #include "log.h"
29
30 #define MIB_SIZ 4
31
32 /* IPv4 forwarding control MIB. */
33 int mib[MIB_SIZ] =
34 {
35   CTL_NET,
36   PF_INET,
37   IPPROTO_IP,
38   IPCTL_FORWARDING
39 };
40
41 int
42 ipforward ()
43 {
44   int len;
45   int ipforwarding = 0;
46
47   len = sizeof ipforwarding;
48   if (sysctl (mib, MIB_SIZ, &ipforwarding, &len, 0, 0) < 0) 
49     {
50       zlog_warn ("Can't get ipforwarding value");
51       return -1;
52     }
53   return ipforwarding;
54 }
55
56 int
57 ipforward_on ()
58 {
59   int len;
60   int ipforwarding = 1;
61
62   len = sizeof ipforwarding;
63   if (sysctl (mib, MIB_SIZ, NULL, NULL, &ipforwarding, len) < 0) 
64     {
65       zlog_warn ("Can't set ipforwarding on");
66       return -1;
67     }
68   return ipforwarding;
69 }
70
71 int
72 ipforward_off ()
73 {
74   int len;
75   int ipforwarding = 0;
76
77   len = sizeof ipforwarding;
78   if (sysctl (mib, MIB_SIZ, NULL, NULL, &ipforwarding, len) < 0) 
79     {
80       zlog_warn ("Can't set ipforwarding on");
81       return -1;
82     }
83   return ipforwarding;
84 }
85
86 #ifdef HAVE_IPV6
87
88 /* IPv6 forwarding control MIB. */
89 int mib_ipv6[MIB_SIZ] = 
90 {
91   CTL_NET,
92   PF_INET6,
93 #if defined(KAME) || (defined(__bsdi__) && _BSDI_VERSION >= 199802 ) || defined(NRL)
94   IPPROTO_IPV6,
95   IPV6CTL_FORWARDING
96 #else /* NOT KAME */
97   IPPROTO_IP,
98   IP6CTL_FORWARDING
99 #endif /* KAME */
100 }; 
101
102 int
103 ipforward_ipv6 ()
104 {
105   int len;
106   int ip6forwarding = 0;
107
108   len = sizeof ip6forwarding;
109   if (sysctl (mib_ipv6, MIB_SIZ, &ip6forwarding, &len, 0, 0) < 0) 
110     {
111       zlog_warn ("can't get ip6forwarding value");
112       return -1;
113     }
114   return ip6forwarding;
115 }
116
117 int
118 ipforward_ipv6_on ()
119 {
120   int len;
121   int ip6forwarding = 1;
122
123   len = sizeof ip6forwarding;
124   if (sysctl (mib_ipv6, MIB_SIZ, NULL, NULL, &ip6forwarding, len) < 0) 
125     {
126       zlog_warn ("can't get ip6forwarding value");
127       return -1;
128     }
129   return ip6forwarding;
130 }
131
132 int
133 ipforward_ipv6_off ()
134 {
135   int len;
136   int ip6forwarding = 0;
137
138   len = sizeof ip6forwarding;
139   if (sysctl (mib_ipv6, MIB_SIZ, NULL, NULL, &ip6forwarding, len) < 0) 
140     {
141       zlog_warn ("can't get ip6forwarding value");
142       return -1;
143     }
144   return ip6forwarding;
145 }
146 #endif /* HAVE_IPV6 */