]> git.proxmox.com Git - mirror_frr.git/blobdiff - zebra/ioctl_solaris.c
zebra: Convert socket interface to use `union sockunion`
[mirror_frr.git] / zebra / ioctl_solaris.c
index df1554ae6f5b20f08b533537a689c04d77a79a35..fc554219bcf989d68d0d242f42236b7e7f35b591 100644 (file)
@@ -21,6 +21,8 @@
 
 #include <zebra.h>
 
+#ifdef SUNOS_5
+
 #include "linklist.h"
 #include "if.h"
 #include "prefix.h"
 #include "log.h"
 #include "privs.h"
 #include "vty.h"
+#include "vrf.h"
+#include "lib_errors.h"
 
 #include "zebra/rib.h"
 #include "zebra/rt.h"
 #include "zebra/interface.h"
 #include "zebra/ioctl_solaris.h"
+#include "zebra/zebra_errors.h"
 
 extern struct zebra_privs_t zserv_privs;
 
@@ -42,31 +47,31 @@ void lifreq_set_name(struct lifreq *lifreq, const char *ifname)
        strncpy(lifreq->lifr_name, ifname, IFNAMSIZ);
 }
 
+int vrf_if_ioctl(unsigned long request, caddr_t buffer, vrf_id_t vrf_id)
+{
+       return if_ioctl(request, buffer);
+}
+
 /* call ioctl system call */
-int if_ioctl(u_long request, caddr_t buffer)
+int if_ioctl(unsigned long request, caddr_t buffer)
 {
        int sock;
        int ret;
        int err;
 
-       if (zserv_privs.change(ZPRIVS_RAISE))
-               zlog_err("Can't raise privileges");
-
-       sock = socket(AF_INET, SOCK_DGRAM, 0);
-       if (sock < 0) {
-               int save_errno = errno;
-               if (zserv_privs.change(ZPRIVS_LOWER))
-                       zlog_err("Can't lower privileges");
-               zlog_err("Cannot create UDP socket: %s",
-                        safe_strerror(save_errno));
-               exit(1);
-       }
+       frr_elevate_privs(&zserv_privs) {
 
-       if ((ret = ioctl(sock, request, buffer)) < 0)
-               err = errno;
+               sock = socket(AF_INET, SOCK_DGRAM, 0);
+               if (sock < 0) {
+                       zlog_err("Cannot create UDP socket: %s",
+                                safe_strerror(errno));
+                       exit(1);
+               }
 
-       if (zserv_privs.change(ZPRIVS_LOWER))
-               zlog_err("Can't lower privileges");
+               if ((ret = ioctl(sock, request, buffer)) < 0)
+                       err = errno;
+
+       }
 
        close(sock);
 
@@ -78,30 +83,25 @@ int if_ioctl(u_long request, caddr_t buffer)
 }
 
 
-int if_ioctl_ipv6(u_long request, caddr_t buffer)
+int if_ioctl_ipv6(unsigned long request, caddr_t buffer)
 {
        int sock;
        int ret;
        int err;
 
-       if (zserv_privs.change(ZPRIVS_RAISE))
-               zlog_err("Can't raise privileges");
-
-       sock = socket(AF_INET6, SOCK_DGRAM, 0);
-       if (sock < 0) {
-               int save_errno = errno;
-               if (zserv_privs.change(ZPRIVS_LOWER))
-                       zlog_err("Can't lower privileges");
-               zlog_err("Cannot create IPv6 datagram socket: %s",
-                        safe_strerror(save_errno));
-               exit(1);
-       }
+       frr_elevate_privs(&zserv_privs) {
 
-       if ((ret = ioctl(sock, request, buffer)) < 0)
-               err = errno;
+               sock = socket(AF_INET6, SOCK_DGRAM, 0);
+               if (sock < 0) {
+                       zlog_err("Cannot create IPv6 datagram socket: %s",
+                                safe_strerror(errno));
+                       exit(1);
+               }
 
-       if (zserv_privs.change(ZPRIVS_LOWER))
-               zlog_err("Can't lower privileges");
+               if ((ret = ioctl(sock, request, buffer)) < 0)
+                       err = errno;
+
+       }
 
        close(sock);
 
@@ -147,7 +147,7 @@ void if_get_mtu(struct interface *ifp)
 {
        struct lifreq lifreq;
        int ret;
-       u_char changed = 0;
+       uint8_t changed = 0;
 
        if (ifp->flags & IFF_IPV4) {
                lifreq_set_name(&lifreq, ifp->name);
@@ -381,7 +381,7 @@ int if_prefix_add_ipv6(struct interface *ifp, struct connected *ifc)
 {
        char addrbuf[PREFIX_STRLEN];
 
-       zlog_warn("Can't set %s on interface %s",
+       flog_warn(EC_LIB_DEVELOPMENT, "Can't set %s on interface %s",
                  prefix2str(ifc->address, addrbuf, sizeof(addrbuf)),
                  ifp->name);
 
@@ -392,9 +392,11 @@ int if_prefix_delete_ipv6(struct interface *ifp, struct connected *ifc)
 {
        char addrbuf[PREFIX_STRLEN];
 
-       zlog_warn("Can't delete %s on interface %s",
+       flog_warn(EC_LIB_DEVELOPMENT, "Can't delete %s on interface %s",
                  prefix2str(ifc->address, addrbuf, sizeof(addrbuf)),
                  ifp->name);
 
        return 0;
 }
+
+#endif /* SUNOS_5 */