diff options
Diffstat (limited to 'agent/mibgroup/ip-mib/data_access/scalars_linux.c')
-rw-r--r-- | agent/mibgroup/ip-mib/data_access/scalars_linux.c | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/agent/mibgroup/ip-mib/data_access/scalars_linux.c b/agent/mibgroup/ip-mib/data_access/scalars_linux.c new file mode 100644 index 0000000..aedcd8b --- /dev/null +++ b/agent/mibgroup/ip-mib/data_access/scalars_linux.c @@ -0,0 +1,79 @@ +/* + * Arp MIB architecture support + * + * $Id: scalars_linux.c 16965 2008-05-25 07:14:16Z magfr $ + */ +#include <net-snmp/net-snmp-config.h> +#include <net-snmp/net-snmp-includes.h> + +#include <net-snmp/data_access/ip_scalars.h> + +static const char ipfw_name[] = "/proc/sys/net/ipv6/conf/all/forwarding"; + +int +netsnmp_arch_ip_scalars_ipv6IpForwarding_get(u_long *value) +{ + FILE *filep; + int rc; + + if (NULL == value) + return -1; + + + filep = fopen(ipfw_name, "r"); + if (NULL == filep) { + DEBUGMSGTL(("access:ipv6IpForwarding", "could not open %s\n", + ipfw_name)); + return -2; + } + + rc = fscanf(filep, "%ld", value); + fclose(filep); + if (1 != rc) { + DEBUGMSGTL(("access:ipv6IpForwarding", "could not read %s\n", + ipfw_name)); + return -3; + } + + if ((0 != *value) && (1 != *value)) { + DEBUGMSGTL(("access:ipv6IpForwarding", "unexpected value %ld in %s\n", + *value, ipfw_name)); + return -4; + } + + return 0; +} + +int +netsnmp_arch_ip_scalars_ipv6IpForwarding_set(u_long value) +{ + FILE *filep; + int rc; + + if (1 == value) + ; + else if (2 == value) + value = 0; + else { + DEBUGMSGTL(("access:ipv6IpForwarding", + "bad value %ld for ipv6IpForwarding\n", value)); + return SNMP_ERR_WRONGVALUE; + } + + filep = fopen(ipfw_name, "w"); + if (NULL == filep) { + DEBUGMSGTL(("access:ipv6IpForwarding", "could not open %s\n", + ipfw_name)); + return SNMP_ERR_RESOURCEUNAVAILABLE; + } + + rc = fprintf(filep, "%ld", value); + fclose(filep); + if (1 != rc) { + DEBUGMSGTL(("access:ipv6IpForwarding", "could not write %s\n", + ipfw_name)); + return SNMP_ERR_GENERR; + } + + return 0; +} |