snmp: let handlers accept OID from a lesser prefix

Most table handlers do not expect to be given an OID whose prefix is
outside what they can handle. This is not a problem with the SMUX
implementation since it always correct the OID such that the prefix
matches. However, this is not the case for the AgentX
implementation. A new function, smux_header_table() is used to do this
normalization.
diff --git a/zebra/zebra_snmp.c b/zebra/zebra_snmp.c
index 3dbfb58..f52bbcb 100644
--- a/zebra/zebra_snmp.c
+++ b/zebra/zebra_snmp.c
@@ -451,6 +451,10 @@
   static struct in_addr netmask;
   struct nexthop *nexthop;
 
+  if (smux_header_table(v, objid, objid_len, exact, val_len, write_method)
+      == MATCH_FAILED)
+    return NULL;
+
   get_fwtable_route_node(v, objid, objid_len, exact, &np, &rib);
   if (!np)
     return NULL;
@@ -549,6 +553,10 @@
 ipCidrTable (struct variable *v, oid objid[], size_t *objid_len,
 	     int exact, size_t *val_len, WriteMethod **write_method)
 {
+  if (smux_header_table(v, objid, objid_len, exact, val_len, write_method)
+      == MATCH_FAILED)
+    return NULL;
+
   switch (v->magic)
     {
     case IPCIDRROUTEDEST: