]> git.proxmox.com Git - mirror_frr.git/blobdiff - zebra/rtread_getmsg.c
build: zebra: remove *_method Makefile hacks
[mirror_frr.git] / zebra / rtread_getmsg.c
index 4d491f3200d582fff8a96d5f2cb5e9b27059e518..1bba003a0a084820637d5b813cbc73706d0362a7 100644 (file)
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * General Public License for more details.
  *
- * You should have received a copy of the GNU General Public License
- * along with GNU Zebra; see the file COPYING.  If not, write to the Free
- * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.  
+ * You should have received a copy of the GNU General Public License along
+ * with this program; see the file COPYING; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
 #include <zebra.h>
 
+#ifdef SUNOS_5
+
 #include "prefix.h"
 #include "log.h"
 #include "if.h"
@@ -51,8 +52,7 @@
 #define IRE_HOST_REDIRECT       0x0200  /* Host route entry from redirects */
 #endif /* IRE_HOST_REDIRECT */
 #ifndef IRE_CACHETABLE
-#define IRE_CACHETABLE          (IRE_CACHE | IRE_BROADCAST | IRE_LOCAL | \
-                                 IRE_LOOPBACK)
+#define IRE_CACHETABLE (IRE_CACHE | IRE_BROADCAST | IRE_LOCAL | IRE_LOOPBACK)
 #endif /* IRE_CACHETABLE */
 #undef IPOPT_EOL
 #undef IPOPT_NOP
 
 #define RT_BUFSIZ              8192
 
-static void 
-handle_route_entry (mib2_ipRouteEntry_t *routeEntry)
+static void handle_route_entry(mib2_ipRouteEntry_t *routeEntry)
 {
-  struct prefix        prefix;
-  struct in_addr               tmpaddr, gateway;
-  union g_addr *ggateway;
-  u_char                       zebra_flags = 0;
+       struct prefix prefix;
+       struct in_addr tmpaddr, gateway;
+       union g_addr *ggateway;
+       u_char zebra_flags = 0;
 
-  if (routeEntry->ipRouteInfo.re_ire_type & IRE_CACHETABLE)
-    return;
+       if (routeEntry->ipRouteInfo.re_ire_type & IRE_CACHETABLE)
+               return;
 
-  if (routeEntry->ipRouteInfo.re_ire_type & IRE_HOST_REDIRECT)
-    zebra_flags |= ZEBRA_FLAG_SELFROUTE;
+       if (routeEntry->ipRouteInfo.re_ire_type & IRE_HOST_REDIRECT)
+               zebra_flags |= ZEBRA_FLAG_SELFROUTE;
 
-  prefix.family = AF_INET;
+       prefix.family = AF_INET;
 
-  tmpaddr.s_addr = routeEntry->ipRouteDest;
-  prefix.u.prefix4 = tmpaddr;
+       tmpaddr.s_addr = routeEntry->ipRouteDest;
+       prefix.u.prefix4 = tmpaddr;
 
-  tmpaddr.s_addr = routeEntry->ipRouteMask;
-  prefix.prefixlen = ip_masklen (tmpaddr);
+       tmpaddr.s_addr = routeEntry->ipRouteMask;
+       prefix.prefixlen = ip_masklen(tmpaddr);
 
-  gateway.s_addr = routeEntry->ipRouteNextHop;
-  ggateway = (union g_addr *)&gateway;
+       gateway.s_addr = routeEntry->ipRouteNextHop;
+       ggateway = (union g_addr *)&gateway;
 
-  rib_add (AFI_IP, SAFI_UNICAST, VRF_DEFAULT, ZEBRA_ROUTE_KERNEL, 0,
-          zebra_flags, &prefix, NULL, ggateway, NULL, 0, 0, 0, 0, 0);
+       rib_add(AFI_IP, SAFI_UNICAST, VRF_DEFAULT, ZEBRA_ROUTE_KERNEL, 0,
+               zebra_flags, &prefix, NULL, ggateway, NULL, 0, 0, 0, 0, 0);
 }
 
-void
-route_read (struct zebra_ns *zns)
+void route_read(struct zebra_ns *zns)
 {
-       char                    storage[RT_BUFSIZ];
+       char storage[RT_BUFSIZ];
 
-       struct T_optmgmt_req    *TLIreq = (struct T_optmgmt_req *) storage;
-       struct T_optmgmt_ack    *TLIack = (struct T_optmgmt_ack *) storage;
-       struct T_error_ack      *TLIerr = (struct T_error_ack *) storage;
+       struct T_optmgmt_req *TLIreq = (struct T_optmgmt_req *)storage;
+       struct T_optmgmt_ack *TLIack = (struct T_optmgmt_ack *)storage;
+       struct T_error_ack *TLIerr = (struct T_error_ack *)storage;
 
-       struct opthdr           *MIB2hdr;
+       struct opthdr *MIB2hdr;
 
-       mib2_ipRouteEntry_t     *routeEntry, *lastRouteEntry;
+       mib2_ipRouteEntry_t *routeEntry, *lastRouteEntry;
 
-       struct strbuf           msgdata;
-       int                     flags, dev, retval, process;
+       struct strbuf msgdata;
+       int flags, dev, retval, process;
 
-       if ((dev = open (_PATH_GETMSG_ROUTE, O_RDWR)) == -1) {
-               zlog_warn ("can't open %s: %s", _PATH_GETMSG_ROUTE,
-                       safe_strerror (errno));
+       if ((dev = open(_PATH_GETMSG_ROUTE, O_RDWR)) == -1) {
+               zlog_warn("can't open %s: %s", _PATH_GETMSG_ROUTE,
+                         safe_strerror(errno));
                return;
        }
 
        TLIreq->PRIM_type = T_OPTMGMT_REQ;
-       TLIreq->OPT_offset = sizeof (struct T_optmgmt_req);
-       TLIreq->OPT_length = sizeof (struct opthdr);
+       TLIreq->OPT_offset = sizeof(struct T_optmgmt_req);
+       TLIreq->OPT_length = sizeof(struct opthdr);
        TLIreq->MGMT_flags = T_CURRENT;
 
-       MIB2hdr = (struct opthdr *) &TLIreq[1];
+       MIB2hdr = (struct opthdr *)&TLIreq[1];
 
        MIB2hdr->level = MIB2_IP;
        MIB2hdr->name = 0;
        MIB2hdr->len = 0;
-       
+
        msgdata.buf = storage;
-       msgdata.len = sizeof (struct T_optmgmt_req) + sizeof (struct opthdr);
+       msgdata.len = sizeof(struct T_optmgmt_req) + sizeof(struct opthdr);
 
        flags = 0;
 
-       if (putmsg (dev, &msgdata, NULL, flags) == -1) {
-               zlog_warn ("putmsg failed: %s", safe_strerror (errno));
+       if (putmsg(dev, &msgdata, NULL, flags) == -1) {
+               zlog_warn("putmsg failed: %s", safe_strerror(errno));
                goto exit;
        }
 
-       MIB2hdr = (struct opthdr *) &TLIack[1];
-       msgdata.maxlen = sizeof (storage);
+       MIB2hdr = (struct opthdr *)&TLIack[1];
+       msgdata.maxlen = sizeof(storage);
 
        while (1) {
                flags = 0;
-               retval = getmsg (dev, &msgdata, NULL, &flags);
+               retval = getmsg(dev, &msgdata, NULL, &flags);
 
                if (retval == -1) {
-                       zlog_warn ("getmsg(ctl) failed: %s", safe_strerror (errno));
+                       zlog_warn("getmsg(ctl) failed: %s",
+                                 safe_strerror(errno));
                        goto exit;
                }
 
                /* This is normal loop termination */
-               if (retval == 0 &&
-                       (size_t)msgdata.len >= sizeof (struct T_optmgmt_ack) &&
-                       TLIack->PRIM_type == T_OPTMGMT_ACK &&
-                       TLIack->MGMT_flags == T_SUCCESS &&
-                       MIB2hdr->len == 0)
+               if (retval == 0
+                   && (size_t)msgdata.len >= sizeof(struct T_optmgmt_ack)
+                   && TLIack->PRIM_type == T_OPTMGMT_ACK
+                   && TLIack->MGMT_flags == T_SUCCESS && MIB2hdr->len == 0)
                        break;
 
-               if ((size_t)msgdata.len >= sizeof (struct T_error_ack) &&
-                       TLIerr->PRIM_type == T_ERROR_ACK) {
-                       zlog_warn ("getmsg(ctl) returned T_ERROR_ACK: %s",
-                               safe_strerror ((TLIerr->TLI_error == TSYSERR)
-                               ? TLIerr->UNIX_error : EPROTO));
+               if ((size_t)msgdata.len >= sizeof(struct T_error_ack)
+                   && TLIerr->PRIM_type == T_ERROR_ACK) {
+                       zlog_warn("getmsg(ctl) returned T_ERROR_ACK: %s",
+                                 safe_strerror((TLIerr->TLI_error == TSYSERR)
+                                                       ? TLIerr->UNIX_error
+                                                       : EPROTO));
                        break;
                }
 
                /* should dump more debugging info to the log statement,
                   like what GateD does in this instance, but not
                   critical yet. */
-               if (retval != MOREDATA ||
-                       (size_t)msgdata.len < sizeof (struct T_optmgmt_ack) ||
-                       TLIack->PRIM_type != T_OPTMGMT_ACK ||
-                       TLIack->MGMT_flags != T_SUCCESS) {
+               if (retval != MOREDATA
+                   || (size_t)msgdata.len < sizeof(struct T_optmgmt_ack)
+                   || TLIack->PRIM_type != T_OPTMGMT_ACK
+                   || TLIack->MGMT_flags != T_SUCCESS) {
                        errno = ENOMSG;
-                       zlog_warn ("getmsg(ctl) returned bizarreness");
+                       zlog_warn("getmsg(ctl) returned bizarreness");
                        break;
                }
 
                /* MIB2_IP_21 is the the pseudo-MIB2 ipRouteTable
                   entry, see <inet/mib2.h>. "This isn't the MIB data
                   you're looking for." */
-               process = (MIB2hdr->level == MIB2_IP &&
-                       MIB2hdr->name == MIB2_IP_21) ? 1 : 0;
+               process = (MIB2hdr->level == MIB2_IP
+                          && MIB2hdr->name == MIB2_IP_21)
+                                 ? 1
+                                 : 0;
 
                /* getmsg writes the data buffer out completely, not
                   to the closest smaller multiple. Unless reassembling
@@ -196,45 +197,68 @@ route_read (struct zebra_ns *zns)
                   of a good time, set maxlen to the closest smaller
                   multiple of the size of the datastructure you're
                   retrieving. */
-               msgdata.maxlen = sizeof (storage) - (sizeof (storage)
-                       % sizeof (mib2_ipRouteEntry_t));
+               msgdata.maxlen =
+                       sizeof(storage)
+                       - (sizeof(storage) % sizeof(mib2_ipRouteEntry_t));
 
                msgdata.len = 0;
                flags = 0;
 
                do {
-                       retval = getmsg (dev, NULL, &msgdata, &flags);
+                       retval = getmsg(dev, NULL, &msgdata, &flags);
 
                        if (retval == -1) {
-                               zlog_warn ("getmsg(data) failed: %s",
-                                       safe_strerror (errno));
+                               zlog_warn("getmsg(data) failed: %s",
+                                         safe_strerror(errno));
                                goto exit;
                        }
 
                        if (!(retval == 0 || retval == MOREDATA)) {
-                               zlog_warn ("getmsg(data) returned %d", retval);
+                               zlog_warn("getmsg(data) returned %d", retval);
                                goto exit;
                        }
 
                        if (process) {
-                               if (msgdata.len %
-                                       sizeof (mib2_ipRouteEntry_t) != 0) {
-                                       zlog_warn ("getmsg(data) returned "
-"msgdata.len = %d (%% sizeof (mib2_ipRouteEntry_t) != 0)", msgdata.len);
+                               if (msgdata.len % sizeof(mib2_ipRouteEntry_t)
+                                   != 0) {
+                                       zlog_warn(
+                                               "getmsg(data) returned "
+                                               "msgdata.len = %d (%% sizeof (mib2_ipRouteEntry_t) != 0)",
+                                               msgdata.len);
                                        goto exit;
                                }
 
-                               routeEntry = (mib2_ipRouteEntry_t *)
-                                       msgdata.buf;
-                               lastRouteEntry = (mib2_ipRouteEntry_t *)
-                                       (msgdata.buf + msgdata.len);
+                               routeEntry = (mib2_ipRouteEntry_t *)msgdata.buf;
+                               lastRouteEntry =
+                                       (mib2_ipRouteEntry_t *)(msgdata.buf
+                                                               + msgdata.len);
                                do {
-                                       handle_route_entry (routeEntry);
+                                       handle_route_entry(routeEntry);
                                } while (++routeEntry < lastRouteEntry);
                        }
                } while (retval == MOREDATA);
        }
 
 exit:
-       close (dev);
+       close(dev);
+}
+
+/* Only implemented for netlink method */
+void macfdb_read(struct zebra_ns *zns)
+{
+}
+
+void macfdb_read_for_bridge(struct zebra_ns *zns, struct interface *ifp,
+                           struct interface *br_if)
+{
 }
+
+void neigh_read(struct zebra_ns *zns)
+{
+}
+
+void neigh_read_for_vlan(struct zebra_ns *zns, struct interface *vlan_if)
+{
+}
+
+#endif /* SUNOS_5 */