snmp/snmp_iface.patch

Wed, 08 Feb 2012 20:07:00 +0200

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 08 Feb 2012 20:07:00 +0200
changeset 588
300d43423c2e
permissions
-rw-r--r--

Update version, adapt patch, correct PID writing, correct build on newer
FreeBSD releases, and most importantly introduce new patch to try to
avoid segfault caused by multiple network interfaces with the same (or
no) address. This is common when configuring bridges and tunnels.

     1 Index: agent/mibgroup/ip-mib/data_access/ipaddress_common.c
     2 --- agent/mibgroup/ip-mib/data_access/ipaddress_common.c.orig	2011-09-28 06:53:47.000000000 +0200
     3 +++ agent/mibgroup/ip-mib/data_access/ipaddress_common.c	2012-02-18 21:20:51.943118452 +0100
     4 @@ -452,6 +452,7 @@
     5  {
     6      const netsnmp_ipaddress_entry *lh = (const netsnmp_ipaddress_entry *)lhs;
     7      const netsnmp_ipaddress_entry *rh = (const netsnmp_ipaddress_entry *)rhs;
     8 +    int   rc;
    10      netsnmp_assert(NULL != lhs);
    11      netsnmp_assert(NULL != rhs);
    12 @@ -467,7 +468,19 @@
    13      /*
    14       * length equal, compare address
    15       */
    16 -    return memcmp(lh->ia_address, rh->ia_address, lh->ia_address_len);
    17 +    rc = memcmp(lh->ia_address, rh->ia_address, lh->ia_address_len);
    18 +    if (rc)
    19 +        return rc;
    20 +
    21 +    /*
    22 +     * address same, compare ifIndex
    23 +     */
    24 +    if (lh->if_index < rh->if_index)
    25 +        return -1;
    26 +    else if (lh->if_index > rh->if_index)
    27 +        return 1;
    28 +
    29 +    return 0;
    30  }
    32  #ifndef NETSNMP_FEATURE_REMOVE_IPADDRESS_COMMON_COPY_UTILITIES
    33 Index: agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_constants.h
    34 --- agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_constants.h.orig	2011-09-28 06:53:47.000000000 +0200
    35 +++ agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_constants.h	2012-02-18 21:20:51.939850024 +0100
    36 @@ -106,7 +106,9 @@
    37       * simplistic map of address length to type
    38       */
    39  #define INTERNAL_IPADDRESSTABLE_IPADDRESSADDRTYPE_IPV4  4
    40 +#define INTERNAL_IPADDRESSTABLE_IPADDRESSADDRTYPE_IPV4Z 5
    41  #define INTERNAL_IPADDRESSTABLE_IPADDRESSADDRTYPE_IPV6  16
    42 +#define INTERNAL_IPADDRESSTABLE_IPADDRESSADDRTYPE_IPV6Z 17
    45  /*************************************************************
    46 Index: agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_data_access.c
    47 --- agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_data_access.c.orig	2012-02-18 21:02:55.315118127 +0100
    48 +++ agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_data_access.c	2012-02-18 21:20:51.933373869 +0100
    49 @@ -262,9 +262,10 @@
    50      if ((NULL != rowreq_ctx) &&
    51          (MFD_SUCCESS ==
    52           ipAddressTable_indexes_set(rowreq_ctx,
    53 -                                    ipaddress_entry->ia_address_len,
    54 +                                    ipaddress_entry->ia_address_len + 1,
    55                                      ipaddress_entry->ia_address,
    56 -                                    ipaddress_entry->ia_address_len))) {
    57 +                                    ipaddress_entry->ia_address_len,
    58 +                                    ipaddress_entry->if_index))) {
    59          if (CONTAINER_INSERT(container, rowreq_ctx) < 0) {
    60              DEBUGMSGTL (("ipAddressTable:access","container insert failed for new entry\n"));
    61              ipAddressTable_release_rowreq_ctx(rowreq_ctx);
    62 Index: agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable.c
    63 --- agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable.c.orig	2011-09-28 06:53:47.000000000 +0200
    64 +++ agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable.c	2012-02-18 21:24:03.877503380 +0100
    65 @@ -355,10 +355,18 @@
    66          *mib_ipAddressAddrType_val_ptr = INETADDRESSTYPE_IPV4;
    67          break;
    69 +    case INTERNAL_IPADDRESSTABLE_IPADDRESSADDRTYPE_IPV4Z:
    70 +        *mib_ipAddressAddrType_val_ptr = INETADDRESSTYPE_IPV4Z;
    71 +        break;
    72 +
    73      case INTERNAL_IPADDRESSTABLE_IPADDRESSADDRTYPE_IPV6:
    74          *mib_ipAddressAddrType_val_ptr = INETADDRESSTYPE_IPV6;
    75          break;
    77 +    case INTERNAL_IPADDRESSTABLE_IPADDRESSADDRTYPE_IPV6Z:
    78 +        *mib_ipAddressAddrType_val_ptr = INETADDRESSTYPE_IPV6Z;
    79 +        break;
    80 +
    81      default:
    82          snmp_log(LOG_ERR, "couldn't map value %ld for ipAddressAddrType\n",
    83                   raw_ipAddressAddrType_val);
    84 @@ -389,8 +397,10 @@
    85  ipAddressTable_indexes_set_tbl_idx(ipAddressTable_mib_index * tbl_idx,
    86                                     long ipAddressAddrType_val,
    87                                     u_char *ipAddressAddr_val_ptr,
    88 -                                   size_t ipAddressAddr_val_ptr_len)
    89 +                                   size_t ipAddressAddr_val_ptr_len,
    90 +                                   long ipAddressAddr_ifIndex)
    91  {
    92 +    uint32_t zone = htonl(ipAddressAddr_ifIndex);
    93      DEBUGMSGTL(("verbose:ipAddressTable:ipAddressTable_indexes_set_tbl_idx", "called\n"));
    95      /*
    96 @@ -416,6 +426,11 @@
    97      memcpy(tbl_idx->ipAddressAddr, ipAddressAddr_val_ptr,
    98             ipAddressAddr_val_ptr_len * sizeof(ipAddressAddr_val_ptr[0]));
   100 +    /** zone */
   101 +    tbl_idx->ipAddressAddr_len += sizeof(zone);
   102 +    memcpy(&tbl_idx->ipAddressAddr[ipAddressAddr_val_ptr_len *
   103 +                                   sizeof(ipAddressAddr_val_ptr[0])],
   104 +           &zone, sizeof(zone));
   106      return MFD_SUCCESS;
   107  }                               /* ipAddressTable_indexes_set_tbl_idx */
   108 @@ -437,7 +452,8 @@
   109  ipAddressTable_indexes_set(ipAddressTable_rowreq_ctx * rowreq_ctx,
   110                             u_long ipAddressAddrType_val,
   111                             u_char *ipAddressAddr_val_ptr,
   112 -                           size_t ipAddressAddr_val_ptr_len)
   113 +                           size_t ipAddressAddr_val_ptr_len,
   114 +                           long ipAddressAddr_ifIndex)
   115  {
   116      DEBUGMSGTL(("verbose:ipAddressTable:ipAddressTable_indexes_set",
   117                  "called\n"));
   118 @@ -446,7 +462,8 @@
   119          ipAddressTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx,
   120                                             ipAddressAddrType_val,
   121                                             ipAddressAddr_val_ptr,
   122 -                                           ipAddressAddr_val_ptr_len))
   123 +                                           ipAddressAddr_val_ptr_len,
   124 +                                           ipAddressAddr_ifIndex))
   125          return MFD_ERROR;
   127      /*
   128 Index: agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable.h
   129 --- agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable.h.orig	2011-09-28 06:53:47.000000000 +0200
   130 +++ agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable.h	2012-02-18 21:25:15.751422674 +0100
   131 @@ -273,14 +273,16 @@
   132                                             long ipAddressAddrType_val,
   133                                             u_char *ipAddressAddr_val_ptr,
   134                                             size_t
   135 -                                           ipAddressAddr_val_ptr_len);
   136 +                                           ipAddressAddr_val_ptr_len,
   137 +                                           long ipAddressAddr_ifIndex);
   138      int             ipAddressTable_indexes_set(ipAddressTable_rowreq_ctx *
   139                                                 rowreq_ctx,
   140                                                 u_long
   141                                                 ipAddressAddrType_val,
   142                                                 u_char *ipAddressAddr_val_ptr,
   143                                                 size_t
   144 -                                               ipAddressAddr_val_ptr_len);
   145 +                                               ipAddressAddr_val_ptr_len,
   146 +                                               long ipAddressAddr_ifIndex);

mercurial