[ospfd] Return SNMP standard neighbor state values, not quagga internal ones

2007-03-14 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* ospf_snmp.c: (ospf_snmp_neighbor_state) New function to
	  map internal quagga neighbor states to SNMP standard values.
	  (ospfNbrEntry) Call new ospf_snmp_neighbor_state function.
diff --git a/ospfd/ChangeLog b/ospfd/ChangeLog
index 855ea29..1c6c136 100644
--- a/ospfd/ChangeLog
+++ b/ospfd/ChangeLog
@@ -1,5 +1,11 @@
 2007-03-14 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
 
+	* ospf_snmp.c: (ospf_snmp_neighbor_state) New function to
+	  map internal quagga neighbor states to SNMP standard values.
+	  (ospfNbrEntry) Call new ospf_snmp_neighbor_state function.
+
+2007-03-14 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
+
 	* ospf_zebra.c: (ospf_zebra_add, ospf_zebra_delete) Fix bug
 	  where inet_ntoa was used twice in the same debug message,
 	  which doesn't work because there's a single shared buffer
diff --git a/ospfd/ospf_snmp.c b/ospfd/ospf_snmp.c
index bc594b3..6e97260 100644
--- a/ospfd/ospf_snmp.c
+++ b/ospfd/ospf_snmp.c
@@ -2216,6 +2216,44 @@
   return NULL;
 }
 
+/* map internal quagga neighbor states to official MIB values:
+
+ospfNbrState OBJECT-TYPE
+        SYNTAX   INTEGER    {
+                    down (1),
+                    attempt (2),
+                    init (3),
+                    twoWay (4),
+                    exchangeStart (5),
+                    exchange (6),
+                    loading (7),
+                    full (8)
+                  }
+*/
+static int32_t
+ospf_snmp_neighbor_state(u_char nst)
+{
+  switch (nst)
+    {
+    case NSM_Attempt:
+      return 2;
+    case NSM_Init:
+      return 3;
+    case NSM_TwoWay:
+      return 4;
+    case NSM_ExStart:
+      return 5;
+    case NSM_Exchange:
+      return 6;
+    case NSM_Loading:
+      return 7;
+    case NSM_Full:
+      return 8;
+    default:
+      return 1; /* down */
+    }
+}
+
 static u_char *
 ospfNbrEntry (struct variable *v, oid *name, size_t *length, int exact,
 	      size_t  *var_len, WriteMethod **write_method)
@@ -2254,7 +2292,7 @@
       return SNMP_INTEGER (nbr->priority);
       break;
     case OSPFNBRSTATE:
-      return SNMP_INTEGER (nbr->state);
+      return SNMP_INTEGER (ospf_snmp_neighbor_state(nbr->state));
       break;
     case OSPFNBREVENTS:
       return SNMP_INTEGER (nbr->state_change);