]> git.proxmox.com Git - mirror_frr.git/blob - zebra/ipforward_proc.c
eb8cef01f167b675c6462169432c69bda95544af
[mirror_frr.git] / zebra / ipforward_proc.c
1 /*
2 * Fetch ipforward value by reading /proc filesystem.
3 * Copyright (C) 1997 Kunihiro Ishiguro
4 *
5 * This file is part of GNU Zebra.
6 *
7 * GNU Zebra is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation; either version 2, or (at your option) any
10 * later version.
11 *
12 * GNU Zebra is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with GNU Zebra; see the file COPYING. If not, write to the Free
19 * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
20 * 02111-1307, USA.
21 */
22
23 #include <zebra.h>
24
25 char proc_net_snmp[] = "/proc/net/snmp";
26
27 static void
28 dropline (FILE *fp)
29 {
30 int c;
31
32 while ((c = getc (fp)) != '\n')
33 ;
34 }
35
36 int
37 ipforward ()
38 {
39 FILE *fp;
40 int ipforwarding = 0;
41 char *pnt;
42 char buf[10];
43
44 fp = fopen (proc_net_snmp, "r");
45
46 if (fp == NULL)
47 return -1;
48
49 /* We don't care about the first line. */
50 dropline (fp);
51
52 /* Get ip_statistics.IpForwarding :
53 1 => ip forwarding enabled
54 2 => ip forwarding off. */
55 pnt = fgets (buf, 6, fp);
56 sscanf (buf, "Ip: %d", &ipforwarding);
57
58 if (ipforwarding == 1)
59 return 1;
60
61 return 0;
62 }
63
64 /* char proc_ipv4_forwarding[] = "/proc/sys/net/ipv4/conf/all/forwarding"; */
65 char proc_ipv4_forwarding[] = "/proc/sys/net/ipv4/ip_forward";
66
67 int
68 ipforward_on ()
69 {
70 FILE *fp;
71
72 fp = fopen (proc_ipv4_forwarding, "w");
73
74 if (fp == NULL)
75 return -1;
76
77 fprintf (fp, "1\n");
78
79 fclose (fp);
80
81 return ipforward ();
82 }
83
84 int
85 ipforward_off ()
86 {
87 FILE *fp;
88
89 fp = fopen (proc_ipv4_forwarding, "w");
90
91 if (fp == NULL)
92 return -1;
93
94 fprintf (fp, "0\n");
95
96 fclose (fp);
97
98 return ipforward ();
99 }
100 #ifdef HAVE_IPV6
101
102 char proc_ipv6_forwarding[] = "/proc/sys/net/ipv6/conf/all/forwarding";
103
104 int
105 ipforward_ipv6 ()
106 {
107 FILE *fp;
108 char buf[5];
109 int ipforwarding = 0;
110
111 fp = fopen (proc_ipv6_forwarding, "r");
112
113 if (fp == NULL)
114 return -1;
115
116 fgets (buf, 2, fp);
117 sscanf (buf, "%d", &ipforwarding);
118
119 return ipforwarding;
120 }
121
122 int
123 ipforward_ipv6_on ()
124 {
125 FILE *fp;
126
127 fp = fopen (proc_ipv6_forwarding, "w");
128
129 if (fp == NULL)
130 return -1;
131
132 fprintf (fp, "1\n");
133
134 fclose (fp);
135
136 return ipforward_ipv6 ();
137 }
138
139 int
140 ipforward_ipv6_off ()
141 {
142 FILE *fp;
143
144 fp = fopen (proc_ipv6_forwarding, "w");
145
146 if (fp == NULL)
147 return -1;
148
149 fprintf (fp, "0\n");
150
151 fclose (fp);
152
153 return ipforward_ipv6 ();
154 }
155 #endif /* HAVE_IPV6 */