net-snmp: remove U64 typedef

From git://git.code.sf.net/p/net-snmp/code

Upstream-Status: Backport (unmodified)

Signed-off-by: Joe Slater <joe.slater@windriver.com>

From 477b4307ef12ddce3b6a9205e0bdddbfb2e0e9b6 Mon Sep 17 00:00:00 2001
From: Bart Van Assche <bvanassche@acm.org>
Date: Sat, 20 Feb 2016 18:58:18 -0800
Subject: [PATCH 1/1] Remove U64 typedef

The U64 typedef conflicts with a typedef in a Perl header file. Hence
remove the U64 typedef from the Net-SNMP header files. This patch does
not modify the Net-SNMP ABI.
---
 agent/mibgroup/if-mib/ifXTable/ifXTable.c          |  16 +-
 agent/mibgroup/if-mib/ifXTable/ifXTable.h          |  48 +-
 .../mibgroup/if-mib/ifXTable/ifXTable_interface.c  |  32 +-
 .../ip-mib/data_access/systemstats_common.c        |   2 +-
 .../ipIfStatsTable/ipIfStatsTable_data_get.c       |  28 +-
 .../ipIfStatsTable/ipIfStatsTable_data_get.h       |  28 +-
 .../ipIfStatsTable/ipIfStatsTable_interface.c      |  56 +-
 .../ip-mib/ipSystemStatsTable/ipSystemStatsTable.c |  28 +-
 .../ip-mib/ipSystemStatsTable/ipSystemStatsTable.h | 921 ++-------------------
 .../ipSystemStatsTable_interface.c                 |  56 +-
 include/net-snmp/data_access/ipstats.h             |  42 +-
 include/net-snmp/library/int64.h                   |  34 +-
 snmplib/int64.c                                    |  38 +-
 snmplib/read_config.c                              |   6 +-
 testing/fulltests/unit-tests/T015int64_clib.c      |  10 +-
 15 files changed, 274 insertions(+), 1071 deletions(-)

Index: net-snmp-5.7.3/agent/mibgroup/if-mib/ifXTable/ifXTable.c
===================================================================
--- net-snmp-5.7.3.orig/agent/mibgroup/if-mib/ifXTable/ifXTable.c
+++ net-snmp-5.7.3/agent/mibgroup/if-mib/ifXTable/ifXTable.c
@@ -722,7 +722,7 @@ The total number of octets received on t
  */
 int
 ifHCInOctets_get(ifXTable_rowreq_ctx * rowreq_ctx,
-                 U64 * ifHCInOctets_val_ptr)
+                 struct counter64 *ifHCInOctets_val_ptr)
 {
    /** we should have a non-NULL pointer */
     netsnmp_assert(NULL != ifHCInOctets_val_ptr);
@@ -779,7 +779,7 @@ The number of packets, delivered by this
  */
 int
 ifHCInUcastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
-                    U64 * ifHCInUcastPkts_val_ptr)
+                    struct counter64 *ifHCInUcastPkts_val_ptr)
 {
    /** we should have a non-NULL pointer */
     netsnmp_assert(NULL != ifHCInUcastPkts_val_ptr);
@@ -838,7 +838,7 @@ The number of packets, delivered by this
  */
 int
 ifHCInMulticastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
-                        U64 * ifHCInMulticastPkts_val_ptr)
+                        struct counter64 *ifHCInMulticastPkts_val_ptr)
 {
    /** we should have a non-NULL pointer */
     netsnmp_assert(NULL != ifHCInMulticastPkts_val_ptr);
@@ -897,7 +897,7 @@ The number of packets, delivered by this
  */
 int
 ifHCInBroadcastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
-                        U64 * ifHCInBroadcastPkts_val_ptr)
+                        struct counter64 *ifHCInBroadcastPkts_val_ptr)
 {
    /** we should have a non-NULL pointer */
     netsnmp_assert(NULL != ifHCInBroadcastPkts_val_ptr);
@@ -955,7 +955,7 @@ The total number of octets transmitted o
  */
 int
 ifHCOutOctets_get(ifXTable_rowreq_ctx * rowreq_ctx,
-                  U64 * ifHCOutOctets_val_ptr)
+                  struct counter64 *ifHCOutOctets_val_ptr)
 {
    /** we should have a non-NULL pointer */
     netsnmp_assert(NULL != ifHCOutOctets_val_ptr);
@@ -1013,7 +1013,7 @@ The total number of packets that higher-
  */
 int
 ifHCOutUcastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
-                     U64 * ifHCOutUcastPkts_val_ptr)
+                     struct counter64 *ifHCOutUcastPkts_val_ptr)
 {
    /** we should have a non-NULL pointer */
     netsnmp_assert(NULL != ifHCOutUcastPkts_val_ptr);
@@ -1074,7 +1074,7 @@ The total number of packets that higher-
  */
 int
 ifHCOutMulticastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
-                         U64 * ifHCOutMulticastPkts_val_ptr)
+                         struct counter64 *ifHCOutMulticastPkts_val_ptr)
 {
    /** we should have a non-NULL pointer */
     netsnmp_assert(NULL != ifHCOutMulticastPkts_val_ptr);
@@ -1134,7 +1134,7 @@ The total number of packets that higher-
  */
 int
 ifHCOutBroadcastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
-                         U64 * ifHCOutBroadcastPkts_val_ptr)
+                         struct counter64 *ifHCOutBroadcastPkts_val_ptr)
 {
    /** we should have a non-NULL pointer */
     netsnmp_assert(NULL != ifHCOutBroadcastPkts_val_ptr);
Index: net-snmp-5.7.3/agent/mibgroup/if-mib/ifXTable/ifXTable.h
===================================================================
--- net-snmp-5.7.3.orig/agent/mibgroup/if-mib/ifXTable/ifXTable.h
+++ net-snmp-5.7.3/agent/mibgroup/if-mib/ifXTable/ifXTable.h
@@ -143,28 +143,28 @@ config_require(if-mib/ifXTable/ifXTable_
                                            u_long *
                                            ifOutBroadcastPkts_val_ptr);
     int             ifHCInOctets_get(ifXTable_rowreq_ctx * rowreq_ctx,
-                                     U64 * ifHCInOctets_val_ptr);
+                                     struct counter64 *ifHCInOctets_val_ptr);
     int             ifHCInUcastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
-                                        U64 * ifHCInUcastPkts_val_ptr);
+                                        struct counter64 *ifHCInUcastPkts_val_ptr);
     int             ifHCInMulticastPkts_get(ifXTable_rowreq_ctx *
                                             rowreq_ctx,
-                                            U64 *
+                                            struct counter64 *
                                             ifHCInMulticastPkts_val_ptr);
     int             ifHCInBroadcastPkts_get(ifXTable_rowreq_ctx *
                                             rowreq_ctx,
-                                            U64 *
+                                            struct counter64 *
                                             ifHCInBroadcastPkts_val_ptr);
     int             ifHCOutOctets_get(ifXTable_rowreq_ctx * rowreq_ctx,
-                                      U64 * ifHCOutOctets_val_ptr);
+                                      struct counter64 *ifHCOutOctets_val_ptr);
     int             ifHCOutUcastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
-                                         U64 * ifHCOutUcastPkts_val_ptr);
+                                         struct counter64 *ifHCOutUcastPkts_val_ptr);
     int             ifHCOutMulticastPkts_get(ifXTable_rowreq_ctx *
                                              rowreq_ctx,
-                                             U64 *
+                                             struct counter64 *
                                              ifHCOutMulticastPkts_val_ptr);
     int             ifHCOutBroadcastPkts_get(ifXTable_rowreq_ctx *
                                              rowreq_ctx,
-                                             U64 *
+                                             struct counter64 *
                                              ifHCOutBroadcastPkts_val_ptr);
     int             ifLinkUpDownTrapEnable_get(ifXTable_rowreq_ctx *
                                                rowreq_ctx,
@@ -284,86 +284,86 @@ config_require(if-mib/ifXTable/ifXTable_
 
     int             ifHCInOctets_check_value(ifXTable_rowreq_ctx *
                                              rowreq_ctx,
-                                             U64 ifHCInOctets_val);
+                                             struct counter64 ifHCInOctets_val);
     int             ifHCInOctets_undo_setup(ifXTable_rowreq_ctx *
                                             rowreq_ctx);
     int             ifHCInOctets_set(ifXTable_rowreq_ctx * rowreq_ctx,
-                                     U64 ifHCInOctets_val);
+                                     struct counter64 ifHCInOctets_val);
     int             ifHCInOctets_undo(ifXTable_rowreq_ctx * rowreq_ctx);
 
     int             ifHCInUcastPkts_check_value(ifXTable_rowreq_ctx *
                                                 rowreq_ctx,
-                                                U64 ifHCInUcastPkts_val);
+                                                struct counter64 ifHCInUcastPkts_val);
     int             ifHCInUcastPkts_undo_setup(ifXTable_rowreq_ctx *
                                                rowreq_ctx);
     int             ifHCInUcastPkts_set(ifXTable_rowreq_ctx * rowreq_ctx,
-                                        U64 ifHCInUcastPkts_val);
+                                        struct counter64 ifHCInUcastPkts_val);
     int             ifHCInUcastPkts_undo(ifXTable_rowreq_ctx * rowreq_ctx);
 
     int             ifHCInMulticastPkts_check_value(ifXTable_rowreq_ctx *
                                                     rowreq_ctx,
-                                                    U64
+                                                    struct counter64
                                                     ifHCInMulticastPkts_val);
     int             ifHCInMulticastPkts_undo_setup(ifXTable_rowreq_ctx *
                                                    rowreq_ctx);
     int             ifHCInMulticastPkts_set(ifXTable_rowreq_ctx *
                                             rowreq_ctx,
-                                            U64 ifHCInMulticastPkts_val);
+                                            struct counter64 ifHCInMulticastPkts_val);
     int             ifHCInMulticastPkts_undo(ifXTable_rowreq_ctx *
                                              rowreq_ctx);
 
     int             ifHCInBroadcastPkts_check_value(ifXTable_rowreq_ctx *
                                                     rowreq_ctx,
-                                                    U64
+                                                    struct counter64
                                                     ifHCInBroadcastPkts_val);
     int             ifHCInBroadcastPkts_undo_setup(ifXTable_rowreq_ctx *
                                                    rowreq_ctx);
     int             ifHCInBroadcastPkts_set(ifXTable_rowreq_ctx *
                                             rowreq_ctx,
-                                            U64 ifHCInBroadcastPkts_val);
+                                            struct counter64 ifHCInBroadcastPkts_val);
     int             ifHCInBroadcastPkts_undo(ifXTable_rowreq_ctx *
                                              rowreq_ctx);
 
     int             ifHCOutOctets_check_value(ifXTable_rowreq_ctx *
                                               rowreq_ctx,
-                                              U64 ifHCOutOctets_val);
+                                              struct counter64 ifHCOutOctets_val);
     int             ifHCOutOctets_undo_setup(ifXTable_rowreq_ctx *
                                              rowreq_ctx);
     int             ifHCOutOctets_set(ifXTable_rowreq_ctx * rowreq_ctx,
-                                      U64 ifHCOutOctets_val);
+                                      struct counter64 ifHCOutOctets_val);
     int             ifHCOutOctets_undo(ifXTable_rowreq_ctx * rowreq_ctx);
 
     int             ifHCOutUcastPkts_check_value(ifXTable_rowreq_ctx *
                                                  rowreq_ctx,
-                                                 U64 ifHCOutUcastPkts_val);
+                                                 struct counter64 ifHCOutUcastPkts_val);
     int             ifHCOutUcastPkts_undo_setup(ifXTable_rowreq_ctx *
                                                 rowreq_ctx);
     int             ifHCOutUcastPkts_set(ifXTable_rowreq_ctx * rowreq_ctx,
-                                         U64 ifHCOutUcastPkts_val);
+                                         struct counter64 ifHCOutUcastPkts_val);
     int             ifHCOutUcastPkts_undo(ifXTable_rowreq_ctx *
                                           rowreq_ctx);
 
     int             ifHCOutMulticastPkts_check_value(ifXTable_rowreq_ctx *
                                                      rowreq_ctx,
-                                                     U64
+                                                     struct counter64
                                                      ifHCOutMulticastPkts_val);
     int             ifHCOutMulticastPkts_undo_setup(ifXTable_rowreq_ctx *
                                                     rowreq_ctx);
     int             ifHCOutMulticastPkts_set(ifXTable_rowreq_ctx *
                                              rowreq_ctx,
-                                             U64 ifHCOutMulticastPkts_val);
+                                             struct counter64 ifHCOutMulticastPkts_val);
     int             ifHCOutMulticastPkts_undo(ifXTable_rowreq_ctx *
                                               rowreq_ctx);
 
     int             ifHCOutBroadcastPkts_check_value(ifXTable_rowreq_ctx *
                                                      rowreq_ctx,
-                                                     U64
+                                                     struct counter64
                                                      ifHCOutBroadcastPkts_val);
     int             ifHCOutBroadcastPkts_undo_setup(ifXTable_rowreq_ctx *
                                                     rowreq_ctx);
     int             ifHCOutBroadcastPkts_set(ifXTable_rowreq_ctx *
                                              rowreq_ctx,
-                                             U64 ifHCOutBroadcastPkts_val);
+                                             struct counter64 ifHCOutBroadcastPkts_val);
     int             ifHCOutBroadcastPkts_undo(ifXTable_rowreq_ctx *
                                               rowreq_ctx);
 
Index: net-snmp-5.7.3/agent/mibgroup/if-mib/ifXTable/ifXTable_interface.c
===================================================================
--- net-snmp-5.7.3.orig/agent/mibgroup/if-mib/ifXTable/ifXTable_interface.c
+++ net-snmp-5.7.3/agent/mibgroup/if-mib/ifXTable/ifXTable_interface.c
@@ -729,72 +729,72 @@ _ifXTable_get_column(ifXTable_rowreq_ctx
          * ifHCInOctets(6)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IFHCINOCTETS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
-        rc = ifHCInOctets_get(rowreq_ctx, (U64 *) var->val.string);
+        rc = ifHCInOctets_get(rowreq_ctx, (struct counter64 *) var->val.string);
         break;
 
         /*
          * ifHCInUcastPkts(7)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IFHCINUCASTPKTS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
-        rc = ifHCInUcastPkts_get(rowreq_ctx, (U64 *) var->val.string);
+        rc = ifHCInUcastPkts_get(rowreq_ctx, (struct counter64 *) var->val.string);
         break;
 
         /*
          * ifHCInMulticastPkts(8)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IFHCINMULTICASTPKTS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
-        rc = ifHCInMulticastPkts_get(rowreq_ctx, (U64 *) var->val.string);
+        rc = ifHCInMulticastPkts_get(rowreq_ctx, (struct counter64 *) var->val.string);
         break;
 
         /*
          * ifHCInBroadcastPkts(9)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IFHCINBROADCASTPKTS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
-        rc = ifHCInBroadcastPkts_get(rowreq_ctx, (U64 *) var->val.string);
+        rc = ifHCInBroadcastPkts_get(rowreq_ctx, (struct counter64 *) var->val.string);
         break;
 
         /*
          * ifHCOutOctets(10)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IFHCOUTOCTETS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
-        rc = ifHCOutOctets_get(rowreq_ctx, (U64 *) var->val.string);
+        rc = ifHCOutOctets_get(rowreq_ctx, (struct counter64 *) var->val.string);
         break;
 
         /*
          * ifHCOutUcastPkts(11)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IFHCOUTUCASTPKTS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
-        rc = ifHCOutUcastPkts_get(rowreq_ctx, (U64 *) var->val.string);
+        rc = ifHCOutUcastPkts_get(rowreq_ctx, (struct counter64 *) var->val.string);
         break;
 
         /*
          * ifHCOutMulticastPkts(12)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IFHCOUTMULTICASTPKTS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
-        rc = ifHCOutMulticastPkts_get(rowreq_ctx, (U64 *) var->val.string);
+        rc = ifHCOutMulticastPkts_get(rowreq_ctx, (struct counter64 *) var->val.string);
         break;
 
         /*
          * ifHCOutBroadcastPkts(13)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IFHCOUTBROADCASTPKTS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
-        rc = ifHCOutBroadcastPkts_get(rowreq_ctx, (U64 *) var->val.string);
+        rc = ifHCOutBroadcastPkts_get(rowreq_ctx, (struct counter64 *) var->val.string);
         break;
 
         /*
Index: net-snmp-5.7.3/agent/mibgroup/ip-mib/data_access/systemstats_common.c
===================================================================
--- net-snmp-5.7.3.orig/agent/mibgroup/ip-mib/data_access/systemstats_common.c
+++ net-snmp-5.7.3/agent/mibgroup/ip-mib/data_access/systemstats_common.c
@@ -264,7 +264,7 @@ _calculate_entries(netsnmp_systemstats_e
            && entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFRAGCREATES]
         && entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTDISCARDS]) {
 
-        U64 tmp, tmp2, tmp3;
+        struct counter64 tmp, tmp2, tmp3;
         tmp = entry->stats.HCOutRequests;
         u64Incr(&tmp, &entry->stats.HCOutForwDatagrams);
         u64Incr(&tmp, &entry->stats.HCOutFragCreates);
Index: net-snmp-5.7.3/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_data_get.c
===================================================================
--- net-snmp-5.7.3.orig/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_data_get.c
+++ net-snmp-5.7.3/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_data_get.c
@@ -270,7 +270,7 @@ The total number of input IP datagrams r
  */
 int
 ipIfStatsHCInReceives_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
-                          U64 * ipIfStatsHCInReceives_val_ptr)
+                          struct counter64 *ipIfStatsHCInReceives_val_ptr)
 {
    /** we should have a non-NULL pointer */
     netsnmp_assert(NULL != ipIfStatsHCInReceives_val_ptr);
@@ -395,7 +395,7 @@ The total number of octets received in i
  */
 int
 ipIfStatsHCInOctets_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
-                        U64 * ipIfStatsHCInOctets_val_ptr)
+                        struct counter64 *ipIfStatsHCInOctets_val_ptr)
 {
    /** we should have a non-NULL pointer */
     netsnmp_assert(NULL != ipIfStatsHCInOctets_val_ptr);
@@ -862,7 +862,7 @@ The number of input datagrams for which
  */
 int
 ipIfStatsHCInForwDatagrams_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
-                               U64 * ipIfStatsHCInForwDatagrams_val_ptr)
+                               struct counter64 *ipIfStatsHCInForwDatagrams_val_ptr)
 {
    /** we should have a non-NULL pointer */
     netsnmp_assert(NULL != ipIfStatsHCInForwDatagrams_val_ptr);
@@ -1267,7 +1267,7 @@ The total number of datagrams successful
  */
 int
 ipIfStatsHCInDelivers_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
-                          U64 * ipIfStatsHCInDelivers_val_ptr)
+                          struct counter64 *ipIfStatsHCInDelivers_val_ptr)
 {
    /** we should have a non-NULL pointer */
     netsnmp_assert(NULL != ipIfStatsHCInDelivers_val_ptr);
@@ -1396,7 +1396,7 @@ The total number of IP datagrams that lo
  */
 int
 ipIfStatsHCOutRequests_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
-                           U64 * ipIfStatsHCOutRequests_val_ptr)
+                           struct counter64 *ipIfStatsHCOutRequests_val_ptr)
 {
    /** we should have a non-NULL pointer */
     netsnmp_assert(NULL != ipIfStatsHCOutRequests_val_ptr);
@@ -1532,7 +1532,7 @@ The number of datagrams for which this e
  */
 int
 ipIfStatsHCOutForwDatagrams_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
-                                U64 * ipIfStatsHCOutForwDatagrams_val_ptr)
+                                struct counter64 *ipIfStatsHCOutForwDatagrams_val_ptr)
 {
    /** we should have a non-NULL pointer */
     netsnmp_assert(NULL != ipIfStatsHCOutForwDatagrams_val_ptr);
@@ -1999,7 +1999,7 @@ The total number of IP datagrams that th
  */
 int
 ipIfStatsHCOutTransmits_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
-                            U64 * ipIfStatsHCOutTransmits_val_ptr)
+                            struct counter64 *ipIfStatsHCOutTransmits_val_ptr)
 {
    /** we should have a non-NULL pointer */
     netsnmp_assert(NULL != ipIfStatsHCOutTransmits_val_ptr);
@@ -2123,7 +2123,7 @@ The total number of octets in IP datagra
  */
 int
 ipIfStatsHCOutOctets_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
-                         U64 * ipIfStatsHCOutOctets_val_ptr)
+                         struct counter64 *ipIfStatsHCOutOctets_val_ptr)
 {
    /** we should have a non-NULL pointer */
     netsnmp_assert(NULL != ipIfStatsHCOutOctets_val_ptr);
@@ -2245,7 +2245,7 @@ The number of IP multicast datagrams rec
  */
 int
 ipIfStatsHCInMcastPkts_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
-                           U64 * ipIfStatsHCInMcastPkts_val_ptr)
+                           struct counter64 *ipIfStatsHCInMcastPkts_val_ptr)
 {
    /** we should have a non-NULL pointer */
     netsnmp_assert(NULL != ipIfStatsHCInMcastPkts_val_ptr);
@@ -2372,7 +2372,7 @@ The total number of octets received in I
  */
 int
 ipIfStatsHCInMcastOctets_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
-                             U64 * ipIfStatsHCInMcastOctets_val_ptr)
+                             struct counter64 *ipIfStatsHCInMcastOctets_val_ptr)
 {
    /** we should have a non-NULL pointer */
     netsnmp_assert(NULL != ipIfStatsHCInMcastOctets_val_ptr);
@@ -2497,7 +2497,7 @@ The number of IP multicast datagrams tra
  */
 int
 ipIfStatsHCOutMcastPkts_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
-                            U64 * ipIfStatsHCOutMcastPkts_val_ptr)
+                            struct counter64 *ipIfStatsHCOutMcastPkts_val_ptr)
 {
    /** we should have a non-NULL pointer */
     netsnmp_assert(NULL != ipIfStatsHCOutMcastPkts_val_ptr);
@@ -2621,7 +2621,7 @@ The total number of octets transmitted i
  */
 int
 ipIfStatsHCOutMcastOctets_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
-                              U64 * ipIfStatsHCOutMcastOctets_val_ptr)
+                              struct counter64 *ipIfStatsHCOutMcastOctets_val_ptr)
 {
    /** we should have a non-NULL pointer */
     netsnmp_assert(NULL != ipIfStatsHCOutMcastOctets_val_ptr);
@@ -2743,7 +2743,7 @@ The number of IP broadcast datagrams rec
  */
 int
 ipIfStatsHCInBcastPkts_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
-                           U64 * ipIfStatsHCInBcastPkts_val_ptr)
+                           struct counter64 *ipIfStatsHCInBcastPkts_val_ptr)
 {
    /** we should have a non-NULL pointer */
     netsnmp_assert(NULL != ipIfStatsHCInBcastPkts_val_ptr);
@@ -2865,7 +2865,7 @@ The number of IP broadcast datagrams tra
  */
 int
 ipIfStatsHCOutBcastPkts_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
-                            U64 * ipIfStatsHCOutBcastPkts_val_ptr)
+                            struct counter64 *ipIfStatsHCOutBcastPkts_val_ptr)
 {
    /** we should have a non-NULL pointer */
     netsnmp_assert(NULL != ipIfStatsHCOutBcastPkts_val_ptr);
Index: net-snmp-5.7.3/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_data_get.h
===================================================================
--- net-snmp-5.7.3.orig/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_data_get.h
+++ net-snmp-5.7.3/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_data_get.h
@@ -50,7 +50,7 @@ extern          "C" {
                                             ipIfStatsInReceives_val_ptr);
     int             ipIfStatsHCInReceives_get(ipIfStatsTable_rowreq_ctx *
                                               rowreq_ctx,
-                                              U64 *
+                                              struct counter64 *
                                               ipIfStatsHCInReceives_val_ptr);
     int             ipIfStatsInOctets_get(ipIfStatsTable_rowreq_ctx *
                                           rowreq_ctx,
@@ -58,7 +58,7 @@ extern          "C" {
                                           ipIfStatsInOctets_val_ptr);
     int             ipIfStatsHCInOctets_get(ipIfStatsTable_rowreq_ctx *
                                             rowreq_ctx,
-                                            U64 *
+                                            struct counter64 *
                                             ipIfStatsHCInOctets_val_ptr);
     int             ipIfStatsInHdrErrors_get(ipIfStatsTable_rowreq_ctx *
                                              rowreq_ctx,
@@ -87,7 +87,7 @@ extern          "C" {
     int            
         ipIfStatsHCInForwDatagrams_get(ipIfStatsTable_rowreq_ctx *
                                        rowreq_ctx,
-                                       U64 *
+                                       struct counter64 *
                                        ipIfStatsHCInForwDatagrams_val_ptr);
     int             ipIfStatsReasmReqds_get(ipIfStatsTable_rowreq_ctx *
                                             rowreq_ctx,
@@ -111,7 +111,7 @@ extern          "C" {
                                             ipIfStatsInDelivers_val_ptr);
     int             ipIfStatsHCInDelivers_get(ipIfStatsTable_rowreq_ctx *
                                               rowreq_ctx,
-                                              U64 *
+                                              struct counter64 *
                                               ipIfStatsHCInDelivers_val_ptr);
     int             ipIfStatsOutRequests_get(ipIfStatsTable_rowreq_ctx *
                                              rowreq_ctx,
@@ -119,7 +119,7 @@ extern          "C" {
                                              ipIfStatsOutRequests_val_ptr);
     int             ipIfStatsHCOutRequests_get(ipIfStatsTable_rowreq_ctx *
                                                rowreq_ctx,
-                                               U64 *
+                                               struct counter64 *
                                                ipIfStatsHCOutRequests_val_ptr);
     int             ipIfStatsOutForwDatagrams_get(ipIfStatsTable_rowreq_ctx
                                                   * rowreq_ctx,
@@ -128,7 +128,7 @@ extern          "C" {
     int            
         ipIfStatsHCOutForwDatagrams_get(ipIfStatsTable_rowreq_ctx *
                                         rowreq_ctx,
-                                        U64 *
+                                        struct counter64 *
                                         ipIfStatsHCOutForwDatagrams_val_ptr);
     int             ipIfStatsOutDiscards_get(ipIfStatsTable_rowreq_ctx *
                                              rowreq_ctx,
@@ -156,7 +156,7 @@ extern          "C" {
                                               ipIfStatsOutTransmits_val_ptr);
     int             ipIfStatsHCOutTransmits_get(ipIfStatsTable_rowreq_ctx *
                                                 rowreq_ctx,
-                                                U64 *
+                                                struct counter64 *
                                                 ipIfStatsHCOutTransmits_val_ptr);
     int             ipIfStatsOutOctets_get(ipIfStatsTable_rowreq_ctx *
                                            rowreq_ctx,
@@ -164,7 +164,7 @@ extern          "C" {
                                            ipIfStatsOutOctets_val_ptr);
     int             ipIfStatsHCOutOctets_get(ipIfStatsTable_rowreq_ctx *
                                              rowreq_ctx,
-                                             U64 *
+                                             struct counter64 *
                                              ipIfStatsHCOutOctets_val_ptr);
     int             ipIfStatsInMcastPkts_get(ipIfStatsTable_rowreq_ctx *
                                              rowreq_ctx,
@@ -172,7 +172,7 @@ extern          "C" {
                                              ipIfStatsInMcastPkts_val_ptr);
     int             ipIfStatsHCInMcastPkts_get(ipIfStatsTable_rowreq_ctx *
                                                rowreq_ctx,
-                                               U64 *
+                                               struct counter64 *
                                                ipIfStatsHCInMcastPkts_val_ptr);
     int             ipIfStatsInMcastOctets_get(ipIfStatsTable_rowreq_ctx *
                                                rowreq_ctx,
@@ -180,7 +180,7 @@ extern          "C" {
                                                ipIfStatsInMcastOctets_val_ptr);
     int             ipIfStatsHCInMcastOctets_get(ipIfStatsTable_rowreq_ctx
                                                  * rowreq_ctx,
-                                                 U64 *
+                                                 struct counter64 *
                                                  ipIfStatsHCInMcastOctets_val_ptr);
     int             ipIfStatsOutMcastPkts_get(ipIfStatsTable_rowreq_ctx *
                                               rowreq_ctx,
@@ -188,7 +188,7 @@ extern          "C" {
                                               ipIfStatsOutMcastPkts_val_ptr);
     int             ipIfStatsHCOutMcastPkts_get(ipIfStatsTable_rowreq_ctx *
                                                 rowreq_ctx,
-                                                U64 *
+                                                struct counter64 *
                                                 ipIfStatsHCOutMcastPkts_val_ptr);
     int             ipIfStatsOutMcastOctets_get(ipIfStatsTable_rowreq_ctx *
                                                 rowreq_ctx,
@@ -196,7 +196,7 @@ extern          "C" {
                                                 ipIfStatsOutMcastOctets_val_ptr);
     int             ipIfStatsHCOutMcastOctets_get(ipIfStatsTable_rowreq_ctx
                                                   * rowreq_ctx,
-                                                  U64 *
+                                                  struct counter64 *
                                                   ipIfStatsHCOutMcastOctets_val_ptr);
     int             ipIfStatsInBcastPkts_get(ipIfStatsTable_rowreq_ctx *
                                              rowreq_ctx,
@@ -204,7 +204,7 @@ extern          "C" {
                                              ipIfStatsInBcastPkts_val_ptr);
     int             ipIfStatsHCInBcastPkts_get(ipIfStatsTable_rowreq_ctx *
                                                rowreq_ctx,
-                                               U64 *
+                                               struct counter64 *
                                                ipIfStatsHCInBcastPkts_val_ptr);
     int             ipIfStatsOutBcastPkts_get(ipIfStatsTable_rowreq_ctx *
                                               rowreq_ctx,
@@ -212,7 +212,7 @@ extern          "C" {
                                               ipIfStatsOutBcastPkts_val_ptr);
     int             ipIfStatsHCOutBcastPkts_get(ipIfStatsTable_rowreq_ctx *
                                                 rowreq_ctx,
-                                                U64 *
+                                                struct counter64 *
                                                 ipIfStatsHCOutBcastPkts_val_ptr);
     int            
         ipIfStatsDiscontinuityTime_get(ipIfStatsTable_rowreq_ctx *
Index: net-snmp-5.7.3/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_interface.c
===================================================================
--- net-snmp-5.7.3.orig/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_interface.c
+++ net-snmp-5.7.3/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_interface.c
@@ -722,10 +722,10 @@ _ipIfStatsTable_get_column(ipIfStatsTabl
          * ipIfStatsHCInReceives(4)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IPIFSTATSHCINRECEIVES:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
         rc = ipIfStatsHCInReceives_get(rowreq_ctx,
-                                       (U64 *) var->val.string);
+                                       (struct counter64 *) var->val.string);
         break;
 
         /*
@@ -741,9 +741,9 @@ _ipIfStatsTable_get_column(ipIfStatsTabl
          * ipIfStatsHCInOctets(6)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IPIFSTATSHCINOCTETS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
-        rc = ipIfStatsHCInOctets_get(rowreq_ctx, (U64 *) var->val.string);
+        rc = ipIfStatsHCInOctets_get(rowreq_ctx, (struct counter64 *) var->val.string);
         break;
 
         /*
@@ -810,10 +810,10 @@ _ipIfStatsTable_get_column(ipIfStatsTabl
          * ipIfStatsHCInForwDatagrams(13)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IPIFSTATSHCINFORWDATAGRAMS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
         rc = ipIfStatsHCInForwDatagrams_get(rowreq_ctx,
-                                            (U64 *) var->val.string);
+                                            (struct counter64 *) var->val.string);
         break;
 
         /*
@@ -869,10 +869,10 @@ _ipIfStatsTable_get_column(ipIfStatsTabl
          * ipIfStatsHCInDelivers(19)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IPIFSTATSHCINDELIVERS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
         rc = ipIfStatsHCInDelivers_get(rowreq_ctx,
-                                       (U64 *) var->val.string);
+                                       (struct counter64 *) var->val.string);
         break;
 
         /*
@@ -889,10 +889,10 @@ _ipIfStatsTable_get_column(ipIfStatsTabl
          * ipIfStatsHCOutRequests(21)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IPIFSTATSHCOUTREQUESTS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
         rc = ipIfStatsHCOutRequests_get(rowreq_ctx,
-                                        (U64 *) var->val.string);
+                                        (struct counter64 *) var->val.string);
         break;
 
         /*
@@ -909,10 +909,10 @@ _ipIfStatsTable_get_column(ipIfStatsTabl
          * ipIfStatsHCOutForwDatagrams(24)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IPIFSTATSHCOUTFORWDATAGRAMS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
         rc = ipIfStatsHCOutForwDatagrams_get(rowreq_ctx,
-                                             (U64 *) var->val.string);
+                                             (struct counter64 *) var->val.string);
         break;
 
         /*
@@ -979,10 +979,10 @@ _ipIfStatsTable_get_column(ipIfStatsTabl
          * ipIfStatsHCOutTransmits(31)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IPIFSTATSHCOUTTRANSMITS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
         rc = ipIfStatsHCOutTransmits_get(rowreq_ctx,
-                                         (U64 *) var->val.string);
+                                         (struct counter64 *) var->val.string);
         break;
 
         /*
@@ -999,9 +999,9 @@ _ipIfStatsTable_get_column(ipIfStatsTabl
          * ipIfStatsHCOutOctets(33)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IPIFSTATSHCOUTOCTETS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
-        rc = ipIfStatsHCOutOctets_get(rowreq_ctx, (U64 *) var->val.string);
+        rc = ipIfStatsHCOutOctets_get(rowreq_ctx, (struct counter64 *) var->val.string);
         break;
 
         /*
@@ -1018,10 +1018,10 @@ _ipIfStatsTable_get_column(ipIfStatsTabl
          * ipIfStatsHCInMcastPkts(35)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IPIFSTATSHCINMCASTPKTS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
         rc = ipIfStatsHCInMcastPkts_get(rowreq_ctx,
-                                        (U64 *) var->val.string);
+                                        (struct counter64 *) var->val.string);
         break;
 
         /*
@@ -1038,10 +1038,10 @@ _ipIfStatsTable_get_column(ipIfStatsTabl
          * ipIfStatsHCInMcastOctets(37)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IPIFSTATSHCINMCASTOCTETS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
         rc = ipIfStatsHCInMcastOctets_get(rowreq_ctx,
-                                          (U64 *) var->val.string);
+                                          (struct counter64 *) var->val.string);
         break;
 
         /*
@@ -1058,10 +1058,10 @@ _ipIfStatsTable_get_column(ipIfStatsTabl
          * ipIfStatsHCOutMcastPkts(39)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IPIFSTATSHCOUTMCASTPKTS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
         rc = ipIfStatsHCOutMcastPkts_get(rowreq_ctx,
-                                         (U64 *) var->val.string);
+                                         (struct counter64 *) var->val.string);
         break;
 
         /*
@@ -1078,10 +1078,10 @@ _ipIfStatsTable_get_column(ipIfStatsTabl
          * ipIfStatsHCOutMcastOctets(41)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IPIFSTATSHCOUTMCASTOCTETS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
         rc = ipIfStatsHCOutMcastOctets_get(rowreq_ctx,
-                                           (U64 *) var->val.string);
+                                           (struct counter64 *) var->val.string);
         break;
 
         /*
@@ -1098,10 +1098,10 @@ _ipIfStatsTable_get_column(ipIfStatsTabl
          * ipIfStatsHCInBcastPkts(43)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IPIFSTATSHCINBCASTPKTS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
         rc = ipIfStatsHCInBcastPkts_get(rowreq_ctx,
-                                        (U64 *) var->val.string);
+                                        (struct counter64 *) var->val.string);
         break;
 
         /*
@@ -1118,10 +1118,10 @@ _ipIfStatsTable_get_column(ipIfStatsTabl
          * ipIfStatsHCOutBcastPkts(45)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IPIFSTATSHCOUTBCASTPKTS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
         rc = ipIfStatsHCOutBcastPkts_get(rowreq_ctx,
-                                         (U64 *) var->val.string);
+                                         (struct counter64 *) var->val.string);
         break;
 
         /*
Index: net-snmp-5.7.3/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.c
===================================================================
--- net-snmp-5.7.3.orig/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.c
+++ net-snmp-5.7.3/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.c
@@ -452,7 +452,7 @@ The total number of input IP datagrams r
  */
 int
 ipSystemStatsHCInReceives_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
-                              U64 * ipSystemStatsHCInReceives_val_ptr)
+                              struct counter64 *ipSystemStatsHCInReceives_val_ptr)
 {
    /** we should have a non-NULL pointer */
     netsnmp_assert(NULL != ipSystemStatsHCInReceives_val_ptr);
@@ -579,7 +579,7 @@ The total number of octets received in i
  */
 int
 ipSystemStatsHCInOctets_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
-                            U64 * ipSystemStatsHCInOctets_val_ptr)
+                            struct counter64 *ipSystemStatsHCInOctets_val_ptr)
 {
    /** we should have a non-NULL pointer */
     netsnmp_assert(NULL != ipSystemStatsHCInOctets_val_ptr);
@@ -1058,7 +1058,7 @@ The number of input datagrams for which
 int
 ipSystemStatsHCInForwDatagrams_get(ipSystemStatsTable_rowreq_ctx *
                                    rowreq_ctx,
-                                   U64 *
+                                   struct counter64 *
                                    ipSystemStatsHCInForwDatagrams_val_ptr)
 {
    /** we should have a non-NULL pointer */
@@ -1474,7 +1474,7 @@ The total number of datagrams successful
  */
 int
 ipSystemStatsHCInDelivers_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
-                              U64 * ipSystemStatsHCInDelivers_val_ptr)
+                              struct counter64 *ipSystemStatsHCInDelivers_val_ptr)
 {
    /** we should have a non-NULL pointer */
     netsnmp_assert(NULL != ipSystemStatsHCInDelivers_val_ptr);
@@ -1602,7 +1602,7 @@ The total number of IP datagrams which l
  */
 int
 ipSystemStatsHCOutRequests_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
-                               U64 * ipSystemStatsHCOutRequests_val_ptr)
+                               struct counter64 *ipSystemStatsHCOutRequests_val_ptr)
 {
    /** we should have a non-NULL pointer */
     netsnmp_assert(NULL != ipSystemStatsHCOutRequests_val_ptr);
@@ -1809,7 +1809,7 @@ The number of datagrams for which this e
 int
 ipSystemStatsHCOutForwDatagrams_get(ipSystemStatsTable_rowreq_ctx *
                                     rowreq_ctx,
-                                    U64 *
+                                    struct counter64 *
                                     ipSystemStatsHCOutForwDatagrams_val_ptr)
 {
    /** we should have a non-NULL pointer */
@@ -2288,7 +2288,7 @@ The total number of IP datagrams that th
  */
 int
 ipSystemStatsHCOutTransmits_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
-                                U64 * ipSystemStatsHCOutTransmits_val_ptr)
+                                struct counter64 *ipSystemStatsHCOutTransmits_val_ptr)
 {
    /** we should have a non-NULL pointer */
     netsnmp_assert(NULL != ipSystemStatsHCOutTransmits_val_ptr);
@@ -2415,7 +2415,7 @@ The total number of octets in IP datagra
  */
 int
 ipSystemStatsHCOutOctets_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
-                             U64 * ipSystemStatsHCOutOctets_val_ptr)
+                             struct counter64 *ipSystemStatsHCOutOctets_val_ptr)
 {
    /** we should have a non-NULL pointer */
     netsnmp_assert(NULL != ipSystemStatsHCOutOctets_val_ptr);
@@ -2539,7 +2539,7 @@ The number of IP multicast datagrams rec
  */
 int
 ipSystemStatsHCInMcastPkts_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
-                               U64 * ipSystemStatsHCInMcastPkts_val_ptr)
+                               struct counter64 *ipSystemStatsHCInMcastPkts_val_ptr)
 {
    /** we should have a non-NULL pointer */
     netsnmp_assert(NULL != ipSystemStatsHCInMcastPkts_val_ptr);
@@ -2665,7 +2665,7 @@ The total number of octets received in I
 int
 ipSystemStatsHCInMcastOctets_get(ipSystemStatsTable_rowreq_ctx *
                                  rowreq_ctx,
-                                 U64 *
+                                 struct counter64 *
                                  ipSystemStatsHCInMcastOctets_val_ptr)
 {
    /** we should have a non-NULL pointer */
@@ -2790,7 +2790,7 @@ The number of IP multicast datagrams tra
  */
 int
 ipSystemStatsHCOutMcastPkts_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
-                                U64 * ipSystemStatsHCOutMcastPkts_val_ptr)
+                                struct counter64 *ipSystemStatsHCOutMcastPkts_val_ptr)
 {
    /** we should have a non-NULL pointer */
     netsnmp_assert(NULL != ipSystemStatsHCOutMcastPkts_val_ptr);
@@ -2921,7 +2921,7 @@ The total number of octets transmitted i
 int
 ipSystemStatsHCOutMcastOctets_get(ipSystemStatsTable_rowreq_ctx *
                                   rowreq_ctx,
-                                  U64 *
+                                  struct counter64 *
                                   ipSystemStatsHCOutMcastOctets_val_ptr)
 {
    /** we should have a non-NULL pointer */
@@ -3046,7 +3046,7 @@ The number of IP broadcast datagrams rec
  */
 int
 ipSystemStatsHCInBcastPkts_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
-                               U64 * ipSystemStatsHCInBcastPkts_val_ptr)
+                               struct counter64 *ipSystemStatsHCInBcastPkts_val_ptr)
 {
    /** we should have a non-NULL pointer */
     netsnmp_assert(NULL != ipSystemStatsHCInBcastPkts_val_ptr);
@@ -3170,7 +3170,7 @@ The number of IP broadcast datagrams tra
  */
 int
 ipSystemStatsHCOutBcastPkts_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
-                                U64 * ipSystemStatsHCOutBcastPkts_val_ptr)
+                                struct counter64 *ipSystemStatsHCOutBcastPkts_val_ptr)
 {
    /** we should have a non-NULL pointer */
     netsnmp_assert(NULL != ipSystemStatsHCOutBcastPkts_val_ptr);
Index: net-snmp-5.7.3/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.h
===================================================================
--- net-snmp-5.7.3.orig/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.h
+++ net-snmp-5.7.3/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.h
@@ -144,93 +144,22 @@ config_require(ip-mib/ipSystemStatsTable
      *********************************************************************
      * function prototypes
      */
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsTable_pre_request(ipSystemStatsTable_registration *
+    int ipSystemStatsTable_pre_request(ipSystemStatsTable_registration *
                                        user_context);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsTable_post_request(ipSystemStatsTable_registration *
+    int ipSystemStatsTable_post_request(ipSystemStatsTable_registration *
                                         user_context, int rc);
 
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsTable_rowreq_ctx_init(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsTable_rowreq_ctx_init(ipSystemStatsTable_rowreq_ctx *
                                            rowreq_ctx,
                                            void *user_init_ctx);
     void
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
         ipSystemStatsTable_rowreq_ctx_cleanup(ipSystemStatsTable_rowreq_ctx
                                               * rowreq_ctx);
 
     ipSystemStatsTable_data *ipSystemStatsTable_allocate_data(void);
     void            ipSystemStatsTable_release_data(ipSystemStatsTable_data
                                                     * data);
-
-
-         
-         
-         
-         
-         
-         
-        ipSystemStatsTable_rowreq_ctx
+    ipSystemStatsTable_rowreq_ctx
         * ipSystemStatsTable_row_find_by_mib_index
         (ipSystemStatsTable_mib_index * mib_idx);
 
@@ -265,226 +194,50 @@ config_require(ip-mib/ipSystemStatsTable
      * indexes
      */
 
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsInReceives_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsInReceives_get(ipSystemStatsTable_rowreq_ctx *
                                     rowreq_ctx,
                                     u_long *
                                     ipSystemStatsInReceives_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsHCInReceives_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsHCInReceives_get(ipSystemStatsTable_rowreq_ctx *
                                       rowreq_ctx,
-                                      U64 *
+                                      struct counter64 *
                                       ipSystemStatsHCInReceives_val_ptr);
     int             ipSystemStatsInOctets_get(ipSystemStatsTable_rowreq_ctx
                                               * rowreq_ctx,
                                               u_long *
                                               ipSystemStatsInOctets_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsHCInOctets_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsHCInOctets_get(ipSystemStatsTable_rowreq_ctx *
                                     rowreq_ctx,
-                                    U64 * ipSystemStatsHCInOctets_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsInHdrErrors_get(ipSystemStatsTable_rowreq_ctx *
+                                    struct counter64 *ipSystemStatsHCInOctets_val_ptr);
+    int ipSystemStatsInHdrErrors_get(ipSystemStatsTable_rowreq_ctx *
                                      rowreq_ctx,
                                      u_long *
                                      ipSystemStatsInHdrErrors_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsInNoRoutes_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsInNoRoutes_get(ipSystemStatsTable_rowreq_ctx *
                                     rowreq_ctx,
                                     u_long *
                                     ipSystemStatsInNoRoutes_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsInAddrErrors_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsInAddrErrors_get(ipSystemStatsTable_rowreq_ctx *
                                       rowreq_ctx,
                                       u_long *
                                       ipSystemStatsInAddrErrors_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsInUnknownProtos_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsInUnknownProtos_get(ipSystemStatsTable_rowreq_ctx *
                                          rowreq_ctx,
                                          u_long *
                                          ipSystemStatsInUnknownProtos_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsInTruncatedPkts_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsInTruncatedPkts_get(ipSystemStatsTable_rowreq_ctx *
                                          rowreq_ctx,
                                          u_long *
                                          ipSystemStatsInTruncatedPkts_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsInForwDatagrams_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsInForwDatagrams_get(ipSystemStatsTable_rowreq_ctx *
                                          rowreq_ctx,
                                          u_long *
                                          ipSystemStatsInForwDatagrams_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsHCInForwDatagrams_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsHCInForwDatagrams_get(ipSystemStatsTable_rowreq_ctx *
                                            rowreq_ctx,
-                                           U64 *
+                                           struct counter64 *
                                            ipSystemStatsHCInForwDatagrams_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsReasmReqds_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsReasmReqds_get(ipSystemStatsTable_rowreq_ctx *
                                     rowreq_ctx,
                                     u_long *
                                     ipSystemStatsReasmReqds_val_ptr);
@@ -492,690 +245,142 @@ config_require(ip-mib/ipSystemStatsTable
                                               * rowreq_ctx,
                                               u_long *
                                               ipSystemStatsReasmOKs_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsReasmFails_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsReasmFails_get(ipSystemStatsTable_rowreq_ctx *
                                     rowreq_ctx,
                                     u_long *
                                     ipSystemStatsReasmFails_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsInDiscards_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsInDiscards_get(ipSystemStatsTable_rowreq_ctx *
                                     rowreq_ctx,
                                     u_long *
                                     ipSystemStatsInDiscards_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsInDelivers_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsInDelivers_get(ipSystemStatsTable_rowreq_ctx *
                                     rowreq_ctx,
                                     u_long *
                                     ipSystemStatsInDelivers_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsHCInDelivers_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsHCInDelivers_get(ipSystemStatsTable_rowreq_ctx *
                                       rowreq_ctx,
-                                      U64 *
+                                      struct counter64 *
                                       ipSystemStatsHCInDelivers_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsOutRequests_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsOutRequests_get(ipSystemStatsTable_rowreq_ctx *
                                      rowreq_ctx,
                                      u_long *
                                      ipSystemStatsOutRequests_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsHCOutRequests_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsHCOutRequests_get(ipSystemStatsTable_rowreq_ctx *
                                        rowreq_ctx,
-                                       U64 *
+                                       struct counter64 *
                                        ipSystemStatsHCOutRequests_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsOutNoRoutes_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsOutNoRoutes_get(ipSystemStatsTable_rowreq_ctx *
                                      rowreq_ctx,
                                      u_long *
                                      ipSystemStatsOutNoRoutes_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsOutForwDatagrams_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsOutForwDatagrams_get(ipSystemStatsTable_rowreq_ctx *
                                           rowreq_ctx,
                                           u_long *
                                           ipSystemStatsOutForwDatagrams_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsHCOutForwDatagrams_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsHCOutForwDatagrams_get(ipSystemStatsTable_rowreq_ctx *
                                             rowreq_ctx,
-                                            U64 *
+                                            struct counter64 *
                                             ipSystemStatsHCOutForwDatagrams_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsOutDiscards_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsOutDiscards_get(ipSystemStatsTable_rowreq_ctx *
                                      rowreq_ctx,
                                      u_long *
                                      ipSystemStatsOutDiscards_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsOutFragReqds_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsOutFragReqds_get(ipSystemStatsTable_rowreq_ctx *
                                       rowreq_ctx,
                                       u_long *
                                       ipSystemStatsOutFragReqds_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsOutFragOKs_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsOutFragOKs_get(ipSystemStatsTable_rowreq_ctx *
                                     rowreq_ctx,
                                     u_long *
                                     ipSystemStatsOutFragOKs_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsOutFragFails_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsOutFragFails_get(ipSystemStatsTable_rowreq_ctx *
                                       rowreq_ctx,
                                       u_long *
                                       ipSystemStatsOutFragFails_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsOutFragCreates_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsOutFragCreates_get(ipSystemStatsTable_rowreq_ctx *
                                         rowreq_ctx,
                                         u_long *
                                         ipSystemStatsOutFragCreates_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsOutTransmits_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsOutTransmits_get(ipSystemStatsTable_rowreq_ctx *
                                       rowreq_ctx,
                                       u_long *
                                       ipSystemStatsOutTransmits_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsHCOutTransmits_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsHCOutTransmits_get(ipSystemStatsTable_rowreq_ctx *
                                         rowreq_ctx,
-                                        U64 *
+                                        struct counter64 *
                                         ipSystemStatsHCOutTransmits_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsOutOctets_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsOutOctets_get(ipSystemStatsTable_rowreq_ctx *
                                    rowreq_ctx,
                                    u_long *
                                    ipSystemStatsOutOctets_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsHCOutOctets_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsHCOutOctets_get(ipSystemStatsTable_rowreq_ctx *
                                      rowreq_ctx,
-                                     U64 *
+                                     struct counter64 *
                                      ipSystemStatsHCOutOctets_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsInMcastPkts_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsInMcastPkts_get(ipSystemStatsTable_rowreq_ctx *
                                      rowreq_ctx,
                                      u_long *
                                      ipSystemStatsInMcastPkts_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsHCInMcastPkts_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsHCInMcastPkts_get(ipSystemStatsTable_rowreq_ctx *
                                        rowreq_ctx,
-                                       U64 *
+                                       struct counter64 *
                                        ipSystemStatsHCInMcastPkts_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsInMcastOctets_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsInMcastOctets_get(ipSystemStatsTable_rowreq_ctx *
                                        rowreq_ctx,
                                        u_long *
                                        ipSystemStatsInMcastOctets_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsHCInMcastOctets_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsHCInMcastOctets_get(ipSystemStatsTable_rowreq_ctx *
                                          rowreq_ctx,
-                                         U64 *
+                                         struct counter64 *
                                          ipSystemStatsHCInMcastOctets_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsOutMcastPkts_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsOutMcastPkts_get(ipSystemStatsTable_rowreq_ctx *
                                       rowreq_ctx,
                                       u_long *
                                       ipSystemStatsOutMcastPkts_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsHCOutMcastPkts_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsHCOutMcastPkts_get(ipSystemStatsTable_rowreq_ctx *
                                         rowreq_ctx,
-                                        U64 *
+                                        struct counter64 *
                                         ipSystemStatsHCOutMcastPkts_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsOutMcastOctets_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsOutMcastOctets_get(ipSystemStatsTable_rowreq_ctx *
                                         rowreq_ctx,
                                         u_long *
                                         ipSystemStatsOutMcastOctets_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsHCOutMcastOctets_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsHCOutMcastOctets_get(ipSystemStatsTable_rowreq_ctx *
                                           rowreq_ctx,
-                                          U64 *
+                                          struct counter64 *
                                           ipSystemStatsHCOutMcastOctets_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsInBcastPkts_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsInBcastPkts_get(ipSystemStatsTable_rowreq_ctx *
                                      rowreq_ctx,
                                      u_long *
                                      ipSystemStatsInBcastPkts_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsHCInBcastPkts_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsHCInBcastPkts_get(ipSystemStatsTable_rowreq_ctx *
                                        rowreq_ctx,
-                                       U64 *
+                                       struct counter64 *
                                        ipSystemStatsHCInBcastPkts_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsOutBcastPkts_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsOutBcastPkts_get(ipSystemStatsTable_rowreq_ctx *
                                       rowreq_ctx,
                                       u_long *
                                       ipSystemStatsOutBcastPkts_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsHCOutBcastPkts_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsHCOutBcastPkts_get(ipSystemStatsTable_rowreq_ctx *
                                         rowreq_ctx,
-                                        U64 *
+                                        struct counter64 *
                                         ipSystemStatsHCOutBcastPkts_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsDiscontinuityTime_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsDiscontinuityTime_get(ipSystemStatsTable_rowreq_ctx *
                                            rowreq_ctx,
                                            u_long *
                                            ipSystemStatsDiscontinuityTime_val_ptr);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsRefreshRate_get(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsRefreshRate_get(ipSystemStatsTable_rowreq_ctx *
                                      rowreq_ctx,
                                      u_long *
                                      ipSystemStatsRefreshRate_val_ptr);
-
-
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsTable_indexes_set_tbl_idx(ipSystemStatsTable_mib_index
+    int ipSystemStatsTable_indexes_set_tbl_idx(ipSystemStatsTable_mib_index
                                                * tbl_idx,
                                                u_long
                                                ipSystemStatsIPVersion_val);
-    int
-     
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ipSystemStatsTable_indexes_set(ipSystemStatsTable_rowreq_ctx *
+    int ipSystemStatsTable_indexes_set(ipSystemStatsTable_rowreq_ctx *
                                        rowreq_ctx,
                                        u_long ipSystemStatsIPVersion_val);
 
-
-
     /*
      *********************************************************************
      * SET function declarations
Index: net-snmp-5.7.3/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_interface.c
===================================================================
--- net-snmp-5.7.3.orig/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_interface.c
+++ net-snmp-5.7.3/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_interface.c
@@ -674,10 +674,10 @@ _ipSystemStatsTable_get_column(ipSystemS
          * ipSystemStatsHCInReceives(4)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IPSYSTEMSTATSHCINRECEIVES:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
         rc = ipSystemStatsHCInReceives_get(rowreq_ctx,
-                                           (U64 *) var->val.string);
+                                           (struct counter64 *) var->val.string);
         break;
 
         /*
@@ -694,10 +694,10 @@ _ipSystemStatsTable_get_column(ipSystemS
          * ipSystemStatsHCInOctets(6)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IPSYSTEMSTATSHCINOCTETS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
         rc = ipSystemStatsHCInOctets_get(rowreq_ctx,
-                                         (U64 *) var->val.string);
+                                         (struct counter64 *) var->val.string);
         break;
 
         /*
@@ -764,10 +764,10 @@ _ipSystemStatsTable_get_column(ipSystemS
          * ipSystemStatsHCInForwDatagrams(13)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IPSYSTEMSTATSHCINFORWDATAGRAMS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
         rc = ipSystemStatsHCInForwDatagrams_get(rowreq_ctx,
-                                                (U64 *) var->val.string);
+                                                (struct counter64 *) var->val.string);
         break;
 
         /*
@@ -824,10 +824,10 @@ _ipSystemStatsTable_get_column(ipSystemS
          * ipSystemStatsHCInDelivers(19)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IPSYSTEMSTATSHCINDELIVERS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
         rc = ipSystemStatsHCInDelivers_get(rowreq_ctx,
-                                           (U64 *) var->val.string);
+                                           (struct counter64 *) var->val.string);
         break;
 
         /*
@@ -844,10 +844,10 @@ _ipSystemStatsTable_get_column(ipSystemS
          * ipSystemStatsHCOutRequests(21)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IPSYSTEMSTATSHCOUTREQUESTS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
         rc = ipSystemStatsHCOutRequests_get(rowreq_ctx,
-                                            (U64 *) var->val.string);
+                                            (struct counter64 *) var->val.string);
         break;
 
         /*
@@ -874,10 +874,10 @@ _ipSystemStatsTable_get_column(ipSystemS
          * ipSystemStatsHCOutForwDatagrams(24)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IPSYSTEMSTATSHCOUTFORWDATAGRAMS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
         rc = ipSystemStatsHCOutForwDatagrams_get(rowreq_ctx,
-                                                 (U64 *) var->val.string);
+                                                 (struct counter64 *) var->val.string);
         break;
 
         /*
@@ -944,10 +944,10 @@ _ipSystemStatsTable_get_column(ipSystemS
          * ipSystemStatsHCOutTransmits(31)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IPSYSTEMSTATSHCOUTTRANSMITS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
         rc = ipSystemStatsHCOutTransmits_get(rowreq_ctx,
-                                             (U64 *) var->val.string);
+                                             (struct counter64 *) var->val.string);
         break;
 
         /*
@@ -964,10 +964,10 @@ _ipSystemStatsTable_get_column(ipSystemS
          * ipSystemStatsHCOutOctets(33)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IPSYSTEMSTATSHCOUTOCTETS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
         rc = ipSystemStatsHCOutOctets_get(rowreq_ctx,
-                                          (U64 *) var->val.string);
+                                          (struct counter64 *) var->val.string);
         break;
 
         /*
@@ -984,10 +984,10 @@ _ipSystemStatsTable_get_column(ipSystemS
          * ipSystemStatsHCInMcastPkts(35)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IPSYSTEMSTATSHCINMCASTPKTS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
         rc = ipSystemStatsHCInMcastPkts_get(rowreq_ctx,
-                                            (U64 *) var->val.string);
+                                            (struct counter64 *) var->val.string);
         break;
 
         /*
@@ -1004,10 +1004,10 @@ _ipSystemStatsTable_get_column(ipSystemS
          * ipSystemStatsHCInMcastOctets(37)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IPSYSTEMSTATSHCINMCASTOCTETS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
         rc = ipSystemStatsHCInMcastOctets_get(rowreq_ctx,
-                                              (U64 *) var->val.string);
+                                              (struct counter64 *) var->val.string);
         break;
 
         /*
@@ -1024,10 +1024,10 @@ _ipSystemStatsTable_get_column(ipSystemS
          * ipSystemStatsHCOutMcastPkts(39)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IPSYSTEMSTATSHCOUTMCASTPKTS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
         rc = ipSystemStatsHCOutMcastPkts_get(rowreq_ctx,
-                                             (U64 *) var->val.string);
+                                             (struct counter64 *) var->val.string);
         break;
 
         /*
@@ -1044,10 +1044,10 @@ _ipSystemStatsTable_get_column(ipSystemS
          * ipSystemStatsHCOutMcastOctets(41)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IPSYSTEMSTATSHCOUTMCASTOCTETS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
         rc = ipSystemStatsHCOutMcastOctets_get(rowreq_ctx,
-                                               (U64 *) var->val.string);
+                                               (struct counter64 *) var->val.string);
         break;
 
         /*
@@ -1064,10 +1064,10 @@ _ipSystemStatsTable_get_column(ipSystemS
          * ipSystemStatsHCInBcastPkts(43)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IPSYSTEMSTATSHCINBCASTPKTS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
         rc = ipSystemStatsHCInBcastPkts_get(rowreq_ctx,
-                                            (U64 *) var->val.string);
+                                            (struct counter64 *) var->val.string);
         break;
 
         /*
@@ -1084,10 +1084,10 @@ _ipSystemStatsTable_get_column(ipSystemS
          * ipSystemStatsHCOutBcastPkts(45)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h 
          */
     case COLUMN_IPSYSTEMSTATSHCOUTBCASTPKTS:
-        var->val_len = sizeof(U64);
+        var->val_len = sizeof(struct counter64);
         var->type = ASN_COUNTER64;
         rc = ipSystemStatsHCOutBcastPkts_get(rowreq_ctx,
-                                             (U64 *) var->val.string);
+                                             (struct counter64 *) var->val.string);
         break;
 
         /*
Index: net-snmp-5.7.3/include/net-snmp/data_access/ipstats.h
===================================================================
--- net-snmp-5.7.3.orig/include/net-snmp/data_access/ipstats.h
+++ net-snmp-5.7.3/include/net-snmp/data_access/ipstats.h
@@ -58,45 +58,45 @@ typedef struct netsnmp_ipstats_s {
     * other columns, when underlying OS does not provide them.
     * Always fill at least 32 bits, the table is periodically polled -> 32 bit
     * overflow shall be detected and 64 bit value should be computed automatically. */
-   U64             HCInReceives;
-   U64             HCInOctets;
+   struct counter64 HCInReceives;
+   struct counter64 HCInOctets;
    u_long          InHdrErrors;
-   U64             HCInNoRoutes; 
+   struct counter64 HCInNoRoutes; 
    u_long          InAddrErrors;
    u_long          InUnknownProtos;
    u_long          InTruncatedPkts;
    
    /* optional, can be computed from HCInNoRoutes and HCOutForwDatagrams */
-   U64             HCInForwDatagrams; 
+   struct counter64 HCInForwDatagrams; 
    
    u_long          ReasmReqds;
    u_long          ReasmOKs;
    u_long          ReasmFails;
    u_long          InDiscards;
-   U64             HCInDelivers;
-   U64             HCOutRequests;
-   U64             HCOutNoRoutes;
-   U64             HCOutForwDatagrams;
-   U64             HCOutDiscards;
+   struct counter64 HCInDelivers;
+   struct counter64 HCOutRequests;
+   struct counter64 HCOutNoRoutes;
+   struct counter64 HCOutForwDatagrams;
+   struct counter64 HCOutDiscards;
    
    /* optional, can be computed from HCOutFragOKs + HCOutFragFails*/
-   U64             HCOutFragReqds;
-   U64             HCOutFragOKs;
-   U64             HCOutFragFails;
-   U64             HCOutFragCreates;
+   struct counter64 HCOutFragReqds;
+   struct counter64 HCOutFragOKs;
+   struct counter64 HCOutFragFails;
+   struct counter64 HCOutFragCreates;
    
    /* optional, can be computed from 
     * HCOutRequests +HCOutForwDatagrams + HCOutFragCreates
     * - HCOutFragReqds - HCOutNoRoutes  - HCOutDiscards */
-   U64             HCOutTransmits;
+   struct counter64 HCOutTransmits;
    
-   U64             HCOutOctets;
-   U64             HCInMcastPkts;
-   U64             HCInMcastOctets;
-   U64             HCOutMcastPkts;
-   U64             HCOutMcastOctets;
-   U64             HCInBcastPkts;
-   U64             HCOutBcastPkts;
+   struct counter64 HCOutOctets;
+   struct counter64 HCInMcastPkts;
+   struct counter64 HCInMcastOctets;
+   struct counter64 HCOutMcastPkts;
+   struct counter64 HCOutMcastOctets;
+   struct counter64 HCInBcastPkts;
+   struct counter64 HCOutBcastPkts;
 
    /* Array of available columns.*/
    int             columnAvail[IPSYSTEMSTATSTABLE_LAST+1];
Index: net-snmp-5.7.3/include/net-snmp/library/int64.h
===================================================================
--- net-snmp-5.7.3.orig/include/net-snmp/library/int64.h
+++ net-snmp-5.7.3/include/net-snmp/library/int64.h
@@ -5,31 +5,29 @@
 extern          "C" {
 #endif
 
-    typedef struct counter64 U64;
-
 #define I64CHARSZ 21
 
-    void            divBy10(U64, U64 *, unsigned int *);
-    void            multBy10(U64, U64 *);
-    void            incrByU16(U64 *, unsigned int);
-    void            incrByU32(U64 *, unsigned int);
+    void            divBy10(struct counter64, struct counter64 *, unsigned int *);
+    void            multBy10(struct counter64, struct counter64 *);
+    void            incrByU16(struct counter64 *, unsigned int);
+    void            incrByU32(struct counter64 *, unsigned int);
     NETSNMP_IMPORT
-    void            zeroU64(U64 *);
-    int             isZeroU64(const U64 *);
+    void            zeroU64(struct counter64 *);
+    int             isZeroU64(const struct counter64 *);
     NETSNMP_IMPORT
-    void            printU64(char *, const U64 *);
+    void            printU64(char *, const struct counter64 *);
     NETSNMP_IMPORT
-    void            printI64(char *, const U64 *);
-    int             read64(U64 *, const char *);
+    void            printI64(char *, const struct counter64 *);
+    int             read64(struct counter64 *, const char *);
     NETSNMP_IMPORT
-    void            u64Subtract(const U64 * pu64one, const U64 * pu64two,
-                                U64 * pu64out);
-    void            u64Incr(U64 * pu64out, const U64 * pu64one);
-    void            u64UpdateCounter(U64 * pu64out, const U64 * pu64one,
-                                     const U64 * pu64two);
-    void            u64Copy(U64 * pu64one, const U64 * pu64two);
+    void            u64Subtract(const struct counter64 *pu64one, const struct counter64 *pu64two,
+                                struct counter64 *pu64out);
+    void            u64Incr(struct counter64 *pu64out, const struct counter64 *pu64one);
+    void            u64UpdateCounter(struct counter64 *pu64out, const struct counter64 *pu64one,
+                                     const struct counter64 *pu64two);
+    void            u64Copy(struct counter64 *pu64one, const struct counter64 *pu64two);
 
-    int             netsnmp_c64_check_for_32bit_wrap(U64 *old_val, U64 *new_val,
+    int             netsnmp_c64_check_for_32bit_wrap(struct counter64 *old_val, struct counter64 *new_val,
                                                      int adjust);
     NETSNMP_IMPORT
     int             netsnmp_c64_check32_and_update(struct counter64 *prev_val,
Index: net-snmp-5.7.3/snmplib/int64.c
===================================================================
--- net-snmp-5.7.3.orig/snmplib/int64.c
+++ net-snmp-5.7.3/snmplib/int64.c
@@ -33,7 +33,7 @@
  * @param[out] puR   Remainder.
  */
 void
-divBy10(U64 u64, U64 * pu64Q, unsigned int *puR)
+divBy10(struct counter64 u64, struct counter64 *pu64Q, unsigned int *puR)
 {
     unsigned long   ulT;
     unsigned long   ulQ;
@@ -83,7 +83,7 @@ divBy10(U64 u64, U64 * pu64Q, unsigned i
  * @param[out] pu64P Product.
  */
 void
-multBy10(U64 u64, U64 * pu64P)
+multBy10(struct counter64 u64, struct counter64 *pu64P)
 {
     unsigned long   ulT;
     unsigned long   ulP;
@@ -130,7 +130,7 @@ multBy10(U64 u64, U64 * pu64P)
  *
  */
 void
-incrByU16(U64 * pu64, unsigned int u16)
+incrByU16(struct counter64 *pu64, unsigned int u16)
 {
     incrByU32(pu64, u16);
 }
@@ -143,7 +143,7 @@ incrByU16(U64 * pu64, unsigned int u16)
  *
  */
 void
-incrByU32(U64 * pu64, unsigned int u32)
+incrByU32(struct counter64 *pu64, unsigned int u32)
 {
     uint32_t tmp;
 
@@ -161,7 +161,7 @@ incrByU32(U64 * pu64, unsigned int u32)
  * @param[out] pu64out pu64one - pu64two.
  */
 void
-u64Subtract(const U64 * pu64one, const U64 * pu64two, U64 * pu64out)
+u64Subtract(const struct counter64 *pu64one, const struct counter64 *pu64two, struct counter64 *pu64out)
 {
     int carry;
 
@@ -177,7 +177,7 @@ u64Subtract(const U64 * pu64one, const U
  * @param[in,out] pu64out pu64out += pu64one.
  */
 void
-u64Incr(U64 * pu64out, const U64 * pu64one)
+u64Incr(struct counter64 *pu64out, const struct counter64 *pu64one)
 {
     pu64out->high = (uint32_t)(pu64out->high + pu64one->high);
     incrByU32(pu64out, pu64one->low);
@@ -191,9 +191,9 @@ u64Incr(U64 * pu64out, const U64 * pu64o
  * @param[out] pu64out pu64out += (pu64one - pu64two)
  */
 void
-u64UpdateCounter(U64 * pu64out, const U64 * pu64one, const U64 * pu64two)
+u64UpdateCounter(struct counter64 *pu64out, const struct counter64 *pu64one, const struct counter64 *pu64two)
 {
-    U64 tmp;
+    struct counter64 tmp;
 
     u64Subtract(pu64one, pu64two, &tmp);
     u64Incr(pu64out, &tmp);
@@ -208,7 +208,7 @@ netsnmp_feature_child_of(u64copy, netsnm
  * @param[out] pu64one Where to store the copy - *pu64one = *pu64two.
  */
 void
-u64Copy(U64 * pu64one, const U64 * pu64two)
+u64Copy(struct counter64 *pu64one, const struct counter64 *pu64two)
 {
     *pu64one = *pu64two;
 }
@@ -220,7 +220,7 @@ u64Copy(U64 * pu64one, const U64 * pu64t
  * @param[in] pu64 Number to be zeroed.
  */
 void
-zeroU64(U64 * pu64)
+zeroU64(struct counter64 *pu64)
 {
     pu64->low = 0;
     pu64->high = 0;
@@ -232,7 +232,7 @@ zeroU64(U64 * pu64)
  * @param[in] pu64 Number to be checked.
  */
 int
-isZeroU64(const U64 * pu64)
+isZeroU64(const struct counter64 *pu64)
 {
     return pu64->low == 0 && pu64->high == 0;
 }
@@ -390,10 +390,10 @@ netsnmp_c64_check32_and_update(struct co
 /** Convert an unsigned 64-bit number to ASCII. */
 void
 printU64(char *buf, /* char [I64CHARSZ+1]; */
-         const U64 * pu64)
+         const struct counter64 *pu64)
 {
-    U64             u64a;
-    U64             u64b;
+    struct counter64 u64a;
+    struct counter64 u64b;
 
     char            aRes[I64CHARSZ + 1];
     unsigned int    u;
@@ -414,9 +414,9 @@ printU64(char *buf, /* char [I64CHARSZ+1
 /** Convert a signed 64-bit number to ASCII. */
 void
 printI64(char *buf, /* char [I64CHARSZ+1]; */
-         const U64 * pu64)
+         const struct counter64 *pu64)
 {
-    U64             u64a;
+    struct counter64 u64a;
 
     if (pu64->high & 0x80000000) {
         u64a.high = (uint32_t) ~pu64->high;
@@ -429,11 +429,11 @@ printI64(char *buf, /* char [I64CHARSZ+1
     }
 }
 
-/** Convert a signed 64-bit integer from ASCII to U64. */
+/** Convert a signed 64-bit integer from ASCII to struct counter64. */
 int
-read64(U64 * i64, const char *str)
+read64(struct counter64 *i64, const char *str)
 {
-    U64             i64p;
+    struct counter64 i64p;
     unsigned int    u;
     int             sign = 0;
     int             ok = 0;
Index: net-snmp-5.7.3/snmplib/read_config.c
===================================================================
--- net-snmp-5.7.3.orig/snmplib/read_config.c
+++ net-snmp-5.7.3/snmplib/read_config.c
@@ -2270,10 +2270,10 @@ read_config_read_memory(int type, char *
         return readfrom;
 
     case ASN_COUNTER64:
-        if (*len < sizeof(U64))
+        if (*len < sizeof(struct counter64))
             return NULL;
-        *len = sizeof(U64);
-        read64((U64 *) dataptr, readfrom);
+        *len = sizeof(struct counter64);
+        read64((struct counter64 *) dataptr, readfrom);
         readfrom = skip_token(readfrom);
         return readfrom;
     }
Index: net-snmp-5.7.3/testing/fulltests/unit-tests/T015int64_clib.c
===================================================================
--- net-snmp-5.7.3.orig/testing/fulltests/unit-tests/T015int64_clib.c
+++ net-snmp-5.7.3/testing/fulltests/unit-tests/T015int64_clib.c
@@ -1,4 +1,4 @@
-/* HEADER Testing 64-bit integer operations (U64). */
+/* HEADER Testing 64-bit integer operations (struct counter64). */
 
 int i, j;
 char buf[22];
@@ -15,7 +15,7 @@ static const int64_t intval[] = {
 };
 
 for (i = 0; i < sizeof(intval)/sizeof(intval[0]); ++i) {
-    U64 a, b;
+    struct counter64 a, b;
     a.low = (uint32_t)intval[i];
     a.high = (uint32_t)(intval[i] >> 32);
     printI64(buf, &a);
@@ -27,7 +27,7 @@ for (i = 0; i < sizeof(intval)/sizeof(in
 
 for (i = 0; i < sizeof(intval)/sizeof(intval[0]); ++i) {
     for (j = i; j < sizeof(intval)/sizeof(intval[0]); ++j) {
-        U64 a, b;
+        struct counter64 a, b;
         uint64_t d;
         a.low = (uint32_t)intval[i];
         a.high = (uint32_t)(intval[i] >> 32);
@@ -43,7 +43,7 @@ for (i = 0; i < sizeof(intval)/sizeof(in
         
 for (i = 0; i < sizeof(intval)/sizeof(intval[0]); ++i) {
     for (j = i; j < sizeof(intval)/sizeof(intval[0]); ++j) {
-        U64 a, b, c;
+        struct counter64 a, b, c;
         uint64_t d;
         a.low = (uint32_t)intval[i];
         a.high = (uint32_t)(intval[i] >> 32);
@@ -58,7 +58,7 @@ for (i = 0; i < sizeof(intval)/sizeof(in
 }
         
 {
-    U64 old_val, new_val;
+    struct counter64 old_val, new_val;
     old_val.low = 7;
     old_val.high = 0;
     new_val = old_val;
