FreeBSD Bugzilla – Attachment 145235 Details for
Bug 192325
snmp_pf: add support for retrieving ALTQ counters
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
This patch updates snmp_pf (both the module and the MIB) to allow retrieval of the ALTQ counters.
pfAltq.patch (text/plain), 8.52 KB, created by
Timmons C. Player
on 2014-08-02 01:28:57 UTC
(
hide
)
Description:
This patch updates snmp_pf (both the module and the MIB) to allow retrieval of the ALTQ counters.
Filename:
MIME Type:
Creator:
Timmons C. Player
Created:
2014-08-02 01:28:57 UTC
Size:
8.52 KB
patch
obsolete
>diff -r 8483299f8257 -r dc54cf46568e usr.sbin/bsnmpd/modules/snmp_pf/BEGEMOT-PF-MIB.txt >--- a/usr.sbin/bsnmpd/modules/snmp_pf/BEGEMOT-PF-MIB.txt Tue Jul 29 23:00:26 2014 -0400 >+++ b/usr.sbin/bsnmpd/modules/snmp_pf/BEGEMOT-PF-MIB.txt Wed Jul 30 23:00:17 2014 -0400 >@@ -1,4 +1,4 @@ >--- >+-- > -- ---------------------------------------------------------------------------- > -- "THE BEER-WARE LICENSE" (Revision 42): > -- <philip@FreeBSD.org> wrote this file. As long as you retain this notice you >@@ -7,7 +7,7 @@ > -- ---------------------------------------------------------------------------- > -- > -- $FreeBSD: stable/10/usr.sbin/bsnmpd/modules/snmp_pf/BEGEMOT-PF-MIB.txt 240233 2012-09-08 06:41:54Z glebius $ >--- >+-- > > BEGEMOT-PF-MIB DEFINITIONS ::= BEGIN > >@@ -612,7 +612,7 @@ > DESCRIPTION > "A unique value, greater than zero, for each interface." > ::= { pfInterfacesIfEntry 1 } >- >+ > pfInterfacesIfDescr OBJECT-TYPE > SYNTAX OCTET STRING > MAX-ACCESS read-only >@@ -876,7 +876,7 @@ > cleared or the time since this table was loaded, whichever is > sooner." > ::= { pfTablesTblEntry 4 } >- >+ > pfTablesTblRefsAnchor OBJECT-TYPE > SYNTAX Integer32 > MAX-ACCESS read-only >@@ -1194,6 +1194,11 @@ > pfAltqQueueBandwidth Unsigned32, > pfAltqQueuePriority Integer32, > pfAltqQueueLimit Integer32 >+ pfAltqQueueLength Unsigned32, >+ pfAltqQueueXmitPkts Counter64, >+ pfAltqQueueXmitBytes Counter64, >+ pfAltqQueueDropPkts Counter64, >+ pfAltqQueueDropBytes Counter64 > } > > pfAltqQueueIndex OBJECT-TYPE >@@ -1252,6 +1257,46 @@ > "Maximum number of packets in the queue." > ::= { pfAltqQueueEntry 7 } > >+pfAltqQueueLength OBJECT-TYPE >+ SYNTAX Unsigned32 >+ MAX-ACCESS read-only >+ STATUS current >+ DESCRIPTION >+ "Current number of packets in the queue." >+ ::= { pfAltqQueueEntry 8 } >+ >+pfAltqQueueXmitPkts OBJECT-TYPE >+ SYNTAX Integer >+ MAX-ACCESS read-only >+ STATUS current >+ DESCRIPTION >+ "The number of packets assigned to this queue." >+ ::= { pfAltqQueueEntry 9 } >+ >+pfAltqQueueXmitBytes OBJECT-TYPE >+ SYNTAX Integer >+ MAX-ACCESS read-only >+ STATUS current >+ DESCRIPTION >+ "The number of bytes assigned to this queue." >+ ::= { pfAltqQueueEntry 10 } >+ >+pfAltqQueueDropPkts OBJECT-TYPE >+ SYNTAX Integer >+ MAX-ACCESS read-only >+ STATUS current >+ DESCRIPTION >+ "The number of packets dropped by this queue." >+ ::= { pfAltqQueueEntry 11 } >+ >+pfAltqQueueDropBytes OBJECT-TYPE >+ SYNTAX Integer >+ MAX-ACCESS read-only >+ STATUS current >+ DESCRIPTION >+ "The number of bytes dropped by this queue." >+ ::= { pfAltqQueueEntry 12 } >+ > pfLabelsLblNumber OBJECT-TYPE > SYNTAX Integer32 > MAX-ACCESS read-only >@@ -1294,7 +1339,7 @@ > STATUS current > DESCRIPTION > "A unique value, greater than zero, for each label." >- ::= { pfLabelsLblEntry 1 } >+ ::= { pfLabelsLblEntry 1 } > > pfLabelsLblName OBJECT-TYPE > SYNTAX OCTET STRING >diff -r 8483299f8257 -r dc54cf46568e usr.sbin/bsnmpd/modules/snmp_pf/pf_snmp.c >--- a/usr.sbin/bsnmpd/modules/snmp_pf/pf_snmp.c Tue Jul 29 23:00:26 2014 -0400 >+++ b/usr.sbin/bsnmpd/modules/snmp_pf/pf_snmp.c Wed Jul 30 23:00:17 2014 -0400 >@@ -41,6 +41,11 @@ > #include <syslog.h> > #include <unistd.h> > >+#include <altq/altq.h> >+#include <altq/altq_cbq.h> >+#include <altq/altq_priq.h> >+#include <altq/altq_hfsc.h> >+ > #include "pf_oid.h" > #include "pf_tree.h" > >@@ -99,8 +104,16 @@ > > #define PFA_TABLE_MAXAGE 5 > >+ >+union pf_altq_class_stats { >+ class_stats_t cbq_stats; >+ struct priq_classstats priq_stats; >+ struct hfsc_classstats hfsc_stats; >+}; >+ > struct pfq_entry { > struct pf_altq altq; >+ union pf_altq_class_stats stats; > u_int index; > TAILQ_ENTRY(pfq_entry) link; > }; >@@ -650,7 +663,7 @@ > e->pfi.pfik_packets[IPV6][OUT][PASS]; > break; > case LEAF_pfInterfacesIf6PktsOutBlock: >- val->v.counter64 = >+ val->v.counter64 = > e->pfi.pfik_packets[IPV6][OUT][BLOCK]; > break; > >@@ -932,7 +945,7 @@ > > abort(); > return (SNMP_ERR_GENERR); >-} >+} > > int > pf_altqq(struct snmp_context __unused *ctx, struct snmp_value *val, >@@ -987,7 +1000,86 @@ > case LEAF_pfAltqQueueLimit: > val->v.integer = e->altq.qlimit; > break; >- >+ case LEAF_pfAltqQueueLength: >+ switch (e->altq.scheduler) { >+ case ALTQT_CBQ: >+ val->v.uint32 = e->stats.cbq_stats.qcnt; >+ break; >+ case ALTQT_PRIQ: >+ val->v.uint32 = e->stats.priq_stats.qlength; >+ break; >+ case ALTQT_HFSC: >+ val->v.uint32 = e->stats.hfsc_stats.qlength; >+ break; >+ default: >+ val->v.uint32 = 0; >+ break; >+ } >+ break; >+ case LEAF_pfAltqQueueXmitPkts: >+ switch (e->altq.scheduler) { >+ case ALTQT_CBQ: >+ val->v.counter64 = e->stats.cbq_stats.xmit_cnt.packets; >+ break; >+ case ALTQT_PRIQ: >+ val->v.counter64 = e->stats.priq_stats.xmitcnt.packets; >+ break; >+ case ALTQT_HFSC: >+ val->v.counter64 = e->stats.hfsc_stats.xmit_cnt.packets; >+ break; >+ default: >+ val->v.counter64 = 0; >+ break; >+ } >+ break; >+ case LEAF_pfAltqQueueXmitBytes: >+ switch (e->altq.scheduler) { >+ case ALTQT_CBQ: >+ val->v.counter64 = e->stats.cbq_stats.xmit_cnt.bytes; >+ break; >+ case ALTQT_PRIQ: >+ val->v.counter64 = e->stats.priq_stats.xmitcnt.bytes; >+ break; >+ case ALTQT_HFSC: >+ val->v.counter64 = e->stats.hfsc_stats.xmit_cnt.bytes; >+ break; >+ default: >+ val->v.counter64 = 0; >+ break; >+ } >+ break; >+ case LEAF_pfAltqQueueDropPkts: >+ switch (e->altq.scheduler) { >+ case ALTQT_CBQ: >+ val->v.counter64 = e->stats.cbq_stats.drop_cnt.packets; >+ break; >+ case ALTQT_PRIQ: >+ val->v.counter64 = e->stats.priq_stats.dropcnt.packets; >+ break; >+ case ALTQT_HFSC: >+ val->v.counter64 = e->stats.hfsc_stats.drop_cnt.packets; >+ break; >+ default: >+ val->v.counter64 = 0; >+ break; >+ } >+ break; >+ case LEAF_pfAltqQueueDropBytes: >+ switch (e->altq.scheduler) { >+ case ALTQT_CBQ: >+ val->v.counter64 = e->stats.cbq_stats.drop_cnt.bytes; >+ break; >+ case ALTQT_PRIQ: >+ val->v.counter64 = e->stats.priq_stats.dropcnt.bytes; >+ break; >+ case ALTQT_HFSC: >+ val->v.counter64 = e->stats.hfsc_stats.drop_cnt.bytes; >+ break; >+ default: >+ val->v.counter64 = 0; >+ break; >+ } >+ break; > default: > return (SNMP_ERR_NOSUCHNAME); > } >@@ -1212,6 +1304,7 @@ > pfq_refresh(void) > { > struct pfioc_altq pa; >+ struct pfioc_qstats pq; > struct pfq_entry *e; > int i, numqs, ticket; > >@@ -1225,7 +1318,7 @@ > } > > bzero(&pa, sizeof(pa)); >- >+ > if (ioctl(dev, DIOCGETALTQS, &pa)) { > syslog(LOG_ERR, "pfq_refresh: ioctl(DIOCGETALTQS): %s", > strerror(errno)); >@@ -1257,10 +1350,23 @@ > memcpy(&e->altq, &pa.altq, sizeof(struct pf_altq)); > e->index = pa.altq.qid; > pfq_table_count = i; >+ >+ /* now retreive the queue stats */ >+ pq.nr = i; >+ pq.ticket = pa.ticket; >+ pq.buf = &e->stats; >+ pq.nbytes = sizeof(e->stats); >+ if (ioctl(dev, DIOCGETQSTATS, &pq)) { >+ syslog(LOG_ERR, "pfq_refresh(): " >+ "ioctl(DIOCGETQSTATS): %s", >+ strerror(errno)); >+ goto err; >+ } >+ > INSERT_OBJECT_INT_LINK_INDEX(e, &pfq_table, link, index); > } > } >- >+ > pfq_table_age = time(NULL); > pf_tick = this_tick; > >@@ -1648,7 +1754,7 @@ > syslog(LOG_INFO, "No ALTQ support in kernel\n" > "ALTQ related functions disabled\n"); > return (0); >- } else >+ } else > syslog(LOG_ERR, "DIOCGETALTQS returned an error: %s", > strerror(errno)); > return (-1); >@@ -1674,7 +1780,7 @@ > syslog(LOG_ERR, "pf_init(): altq test failed"); > return (-1); > } >- >+ > /* Prepare internal state */ > TAILQ_INIT(&pfi_table); > TAILQ_INIT(&pfq_table); >@@ -1765,7 +1871,7 @@ > (intmax_t)pfi_table_age); > syslog(LOG_ERR, "Dump: pfi_table_count = %d", > pfi_table_count); >- >+ > syslog(LOG_ERR, "Dump: pfq_table_age = %jd", > (intmax_t)pfq_table_age); > syslog(LOG_ERR, "Dump: pfq_table_count = %d", >diff -r 8483299f8257 -r dc54cf46568e usr.sbin/bsnmpd/modules/snmp_pf/pf_tree.def >--- a/usr.sbin/bsnmpd/modules/snmp_pf/pf_tree.def Tue Jul 29 23:00:26 2014 -0400 >+++ b/usr.sbin/bsnmpd/modules/snmp_pf/pf_tree.def Wed Jul 30 23:00:17 2014 -0400 >@@ -184,6 +184,11 @@ > (5 pfAltqQueueBandwidth UNSIGNED32 GET) > (6 pfAltqQueuePriority INTEGER32 GET) > (7 pfAltqQueueLimit INTEGER32 GET) >+ (8 pfAltqQueueLength UNSIGNED32 GET) >+ (9 pfAltqQueueXmitPkts COUNTER64 GET) >+ (10 pfAltqQueueXmitBytes COUNTER64 GET) >+ (11 pfAltqQueueDropPkts COUNTER64 GET) >+ (12 pfAltqQueueDropBytes COUNTER64 GET) > ) > ) > )
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 192325
: 145235