Deleted Added
full compact
pf_snmp.c (149571) pf_snmp.c (152970)
1/*-
2 * Copyright (c) 2005 Philip Paeps <philip@FreeBSD.org>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 9 unchanged lines hidden (view full) ---

18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 *
1/*-
2 * Copyright (c) 2005 Philip Paeps <philip@FreeBSD.org>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 9 unchanged lines hidden (view full) ---

18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 *
26 * $FreeBSD: head/usr.sbin/bsnmpd/modules/snmp_pf/pf_snmp.c 149571 2005-08-29 10:08:04Z philip $
26 * $FreeBSD: head/usr.sbin/bsnmpd/modules/snmp_pf/pf_snmp.c 152970 2005-11-30 21:08:04Z philip $
27 */
28
29#include <bsnmp/snmpmod.h>
30
31#include <net/pfvar.h>
32#include <sys/ioctl.h>
33
34#include <errno.h>

--- 56 unchanged lines hidden (view full) ---

91 TAILQ_ENTRY(pfq_entry) link;
92};
93TAILQ_HEAD(pfq_table, pfq_entry);
94
95static struct pfq_table pfq_table;
96static time_t pfq_table_age;
97static int pfq_table_count;
98
27 */
28
29#include <bsnmp/snmpmod.h>
30
31#include <net/pfvar.h>
32#include <sys/ioctl.h>
33
34#include <errno.h>

--- 56 unchanged lines hidden (view full) ---

91 TAILQ_ENTRY(pfq_entry) link;
92};
93TAILQ_HEAD(pfq_table, pfq_entry);
94
95static struct pfq_table pfq_table;
96static time_t pfq_table_age;
97static int pfq_table_count;
98
99static int altq_enabled = 0;
100
99#define PFQ_TABLE_MAXAGE 5
100
101/* Forward declarations */
102static int pfi_refresh(void);
103static int pfq_refresh(void);
104static int pfs_refresh(void);
105static int pft_refresh(void);
106static struct pfi_entry * pfi_table_find(u_int idx);
107static struct pfq_entry * pfq_table_find(u_int idx);
108static struct pft_entry * pft_table_find(u_int idx);
109
101#define PFQ_TABLE_MAXAGE 5
102
103/* Forward declarations */
104static int pfi_refresh(void);
105static int pfq_refresh(void);
106static int pfs_refresh(void);
107static int pft_refresh(void);
108static struct pfi_entry * pfi_table_find(u_int idx);
109static struct pfq_entry * pfq_table_find(u_int idx);
110static struct pft_entry * pft_table_find(u_int idx);
111
112static int altq_is_enabled(int pfdevice);
113
110int
111pf_status(struct snmp_context __unused *ctx, struct snmp_value *val,
112 u_int sub, u_int __unused vindex, enum snmp_op op)
113{
114 asn_subid_t which = val->var.subs[sub - 1];
115 time_t runtime;
116 unsigned char str[128];
117

--- 658 unchanged lines hidden (view full) ---

776}
777
778int
779pf_altq(struct snmp_context __unused *ctx, struct snmp_value *val,
780 u_int sub, u_int __unused vindex, enum snmp_op op)
781{
782 asn_subid_t which = val->var.subs[sub - 1];
783
114int
115pf_status(struct snmp_context __unused *ctx, struct snmp_value *val,
116 u_int sub, u_int __unused vindex, enum snmp_op op)
117{
118 asn_subid_t which = val->var.subs[sub - 1];
119 time_t runtime;
120 unsigned char str[128];
121

--- 658 unchanged lines hidden (view full) ---

780}
781
782int
783pf_altq(struct snmp_context __unused *ctx, struct snmp_value *val,
784 u_int sub, u_int __unused vindex, enum snmp_op op)
785{
786 asn_subid_t which = val->var.subs[sub - 1];
787
788 if (!altq_enabled) {
789 return (SNMP_ERR_NOERROR);
790 }
791
784 if (op == SNMP_OP_SET)
785 return (SNMP_ERR_NOT_WRITEABLE);
786
787 if (op == SNMP_OP_GET) {
788 if ((time(NULL) - pfq_table_age) > PFQ_TABLE_MAXAGE)
789 if (pfq_refresh() == -1)
790 return (SNMP_ERR_GENERR);
791

--- 15 unchanged lines hidden (view full) ---

807
808int
809pf_altqq(struct snmp_context __unused *ctx, struct snmp_value *val,
810 u_int sub, u_int __unused vindex, enum snmp_op op)
811{
812 asn_subid_t which = val->var.subs[sub - 1];
813 struct pfq_entry *e = NULL;
814
792 if (op == SNMP_OP_SET)
793 return (SNMP_ERR_NOT_WRITEABLE);
794
795 if (op == SNMP_OP_GET) {
796 if ((time(NULL) - pfq_table_age) > PFQ_TABLE_MAXAGE)
797 if (pfq_refresh() == -1)
798 return (SNMP_ERR_GENERR);
799

--- 15 unchanged lines hidden (view full) ---

815
816int
817pf_altqq(struct snmp_context __unused *ctx, struct snmp_value *val,
818 u_int sub, u_int __unused vindex, enum snmp_op op)
819{
820 asn_subid_t which = val->var.subs[sub - 1];
821 struct pfq_entry *e = NULL;
822
823 if (!altq_enabled) {
824 return (SNMP_ERR_NOERROR);
825 }
826
815 switch (op) {
816 case SNMP_OP_SET:
817 return (SNMP_ERR_NOT_WRITEABLE);
818 case SNMP_OP_GETNEXT:
819 if ((e = NEXT_OBJECT_INT(&pfq_table,
820 &val->var, sub)) == NULL)
821 return (SNMP_ERR_NOSUCHNAME);
822 val->var.len = sub + 1;

--- 291 unchanged lines hidden (view full) ---

1114 free(e);
1115 }
1116err2:
1117 free(t);
1118 return(-1);
1119}
1120
1121/*
827 switch (op) {
828 case SNMP_OP_SET:
829 return (SNMP_ERR_NOT_WRITEABLE);
830 case SNMP_OP_GETNEXT:
831 if ((e = NEXT_OBJECT_INT(&pfq_table,
832 &val->var, sub)) == NULL)
833 return (SNMP_ERR_NOSUCHNAME);
834 val->var.len = sub + 1;

--- 291 unchanged lines hidden (view full) ---

1126 free(e);
1127 }
1128err2:
1129 free(t);
1130 return(-1);
1131}
1132
1133/*
1134 * check whether altq support is enabled in kernel
1135 */
1136
1137static int
1138altq_is_enabled(int pfdev)
1139{
1140 struct pfioc_altq pa;
1141
1142 errno = 0;
1143 if (ioctl(pfdev, DIOCGETALTQS, &pa)) {
1144 if (errno == ENODEV) {
1145 syslog(LOG_INFO, "No ALTQ support in kernel\n"
1146 "ALTQ related functions disabled\n");
1147 return (0);
1148 } else
1149 syslog(LOG_ERR, "DIOCGETALTQS returned an error: %s",
1150 strerror(errno));
1151 return (-1);
1152 }
1153 return (1);
1154}
1155
1156/*
1122 * Implement the bsnmpd module interface
1123 */
1124static int
1125pf_init(struct lmodule *mod, int __unused argc, char __unused *argv[])
1126{
1127 module = mod;
1128
1129 if ((dev = open("/dev/pf", O_RDONLY)) == -1) {
1130 syslog(LOG_ERR, "pf_init(): open(): %s\n",
1131 strerror(errno));
1132 return (-1);
1133 }
1134
1157 * Implement the bsnmpd module interface
1158 */
1159static int
1160pf_init(struct lmodule *mod, int __unused argc, char __unused *argv[])
1161{
1162 module = mod;
1163
1164 if ((dev = open("/dev/pf", O_RDONLY)) == -1) {
1165 syslog(LOG_ERR, "pf_init(): open(): %s\n",
1166 strerror(errno));
1167 return (-1);
1168 }
1169
1170 if ((altq_enabled = altq_is_enabled(dev)) == -1) {
1171 syslog(LOG_ERR, "pf_init(): altq test failed");
1172 return (-1);
1173 }
1174
1135 /* Prepare internal state */
1136 TAILQ_INIT(&pfi_table);
1137 TAILQ_INIT(&pfq_table);
1138 TAILQ_INIT(&pft_table);
1139
1140 pfi_refresh();
1175 /* Prepare internal state */
1176 TAILQ_INIT(&pfi_table);
1177 TAILQ_INIT(&pfq_table);
1178 TAILQ_INIT(&pft_table);
1179
1180 pfi_refresh();
1141 pfq_refresh();
1181 if (altq_enabled) {
1182 pfq_refresh();
1183 }
1184
1142 pfs_refresh();
1143 pft_refresh();
1144
1145 started = 1;
1146
1147 return (0);
1148}
1149

--- 31 unchanged lines hidden (view full) ---

1181 close(dev);
1182 return (0);
1183}
1184
1185static void
1186pf_dump(void)
1187{
1188 pfi_refresh();
1185 pfs_refresh();
1186 pft_refresh();
1187
1188 started = 1;
1189
1190 return (0);
1191}
1192

--- 31 unchanged lines hidden (view full) ---

1224 close(dev);
1225 return (0);
1226}
1227
1228static void
1229pf_dump(void)
1230{
1231 pfi_refresh();
1189 pfq_refresh();
1232 if (altq_enabled) {
1233 pfq_refresh();
1234 }
1190 pft_refresh();
1191
1192 syslog(LOG_ERR, "Dump: pfi_table_age = %jd",
1193 (intmax_t)pfi_table_age);
1194 syslog(LOG_ERR, "Dump: pfi_table_count = %d",
1195 pfi_table_count);
1196
1197 syslog(LOG_ERR, "Dump: pfq_table_age = %jd",

--- 19 unchanged lines hidden ---
1235 pft_refresh();
1236
1237 syslog(LOG_ERR, "Dump: pfi_table_age = %jd",
1238 (intmax_t)pfi_table_age);
1239 syslog(LOG_ERR, "Dump: pfi_table_count = %d",
1240 pfi_table_count);
1241
1242 syslog(LOG_ERR, "Dump: pfq_table_age = %jd",

--- 19 unchanged lines hidden ---