summaryrefslogtreecommitdiff
path: root/zebra/rt_ioctl.c
diff options
context:
space:
mode:
authorQuentin Young <qlyoung@cumulusnetworks.com>2016-09-21 22:11:53 +0000
committerQuentin Young <qlyoung@cumulusnetworks.com>2016-09-21 22:11:53 +0000
commit844ec28cee41395cdd1cc0cdf8cf0168f9dc1adf (patch)
treef2fe0a9a71bb075a5f6f43cd992b89f46b95574f /zebra/rt_ioctl.c
parentd0bfb22c223d645e554290ca82581eb06f94ac3b (diff)
parent039dc61292de5f3ed5f46316b1940ab6bb184c3f (diff)
Merge branch 'cmaster-next' into vtysh-grammar
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com> Conflicts: lib/.gitignore lib/command.c lib/command.h
Diffstat (limited to 'zebra/rt_ioctl.c')
-rw-r--r--zebra/rt_ioctl.c110
1 files changed, 0 insertions, 110 deletions
diff --git a/zebra/rt_ioctl.c b/zebra/rt_ioctl.c
index 383c5f71ac..597392c38a 100644
--- a/zebra/rt_ioctl.c
+++ b/zebra/rt_ioctl.c
@@ -46,122 +46,12 @@ kernel_read (int sock)
return;
}
-#if 0
-/* Initialization prototype of struct sockaddr_in. */
-static struct sockaddr_in sin_proto =
-{
-#ifdef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN
- sizeof (struct sockaddr_in),
-#endif /* HAVE_STRUCT_SOCKADDR_IN_SIN_LEN */
- AF_INET, 0, {0}, {0}
-};
-#endif /* 0 */
-
/* Solaris has ortentry. */
#ifdef HAVE_OLD_RTENTRY
#define rtentry ortentry
#endif /* HAVE_OLD_RTENTRY */
/* Interface to ioctl route message. */
-int
-kernel_add_route (struct prefix_ipv4 *dest, struct in_addr *gate,
- int index, int flags)
-{
- int ret;
- int sock;
- struct rtentry rtentry;
- struct sockaddr_in sin_dest, sin_mask, sin_gate;
-
- memset (&rtentry, 0, sizeof (struct rtentry));
-
- /* Make destination. */
- memset (&sin_dest, 0, sizeof (struct sockaddr_in));
- sin_dest.sin_family = AF_INET;
-#ifdef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN
- sin_dest.sin_len = sizeof (struct sockaddr_in);
-#endif /* HAVE_STRUCT_SOCKADDR_IN_SIN_LEN */
- sin_dest.sin_addr = dest->prefix;
-
- /* Make gateway. */
- if (gate)
- {
- memset (&sin_gate, 0, sizeof (struct sockaddr_in));
- sin_gate.sin_family = AF_INET;
-#ifdef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN
- sin_gate.sin_len = sizeof (struct sockaddr_in);
-#endif /* HAVE_STRUCT_SOCKADDR_IN_SIN_LEN */
- sin_gate.sin_addr = *gate;
- }
-
- memset (&sin_mask, 0, sizeof (struct sockaddr_in));
- sin_mask.sin_family = AF_INET;
-#ifdef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN
- sin_gate.sin_len = sizeof (struct sockaddr_in);
-#endif /* HAVE_STRUCT_SOCKADDR_IN_SIN_LEN */
- masklen2ip (dest->prefixlen, &sin_mask.sin_addr);
-
- /* Set destination address, mask and gateway.*/
- memcpy (&rtentry.rt_dst, &sin_dest, sizeof (struct sockaddr_in));
- if (gate)
- memcpy (&rtentry.rt_gateway, &sin_gate, sizeof (struct sockaddr_in));
-#ifndef SUNOS_5
- memcpy (&rtentry.rt_genmask, &sin_mask, sizeof (struct sockaddr_in));
-#endif /* SUNOS_5 */
-
- /* Routing entry flag set. */
- if (dest->prefixlen == 32)
- rtentry.rt_flags |= RTF_HOST;
-
- if (gate && gate->s_addr != INADDR_ANY)
- rtentry.rt_flags |= RTF_GATEWAY;
-
- rtentry.rt_flags |= RTF_UP;
-
- /* Additional flags */
- rtentry.rt_flags |= flags;
-
-
- /* For tagging route. */
- /* rtentry.rt_flags |= RTF_DYNAMIC; */
-
- /* Open socket for ioctl. */
- sock = socket (AF_INET, SOCK_DGRAM, 0);
- if (sock < 0)
- {
- zlog_warn ("can't make socket\n");
- return -1;
- }
-
- /* Send message by ioctl(). */
- ret = ioctl (sock, SIOCADDRT, &rtentry);
- if (ret < 0)
- {
- switch (errno)
- {
- case EEXIST:
- close (sock);
- return ZEBRA_ERR_RTEXIST;
- break;
- case ENETUNREACH:
- close (sock);
- return ZEBRA_ERR_RTUNREACH;
- break;
- case EPERM:
- close (sock);
- return ZEBRA_ERR_EPERM;
- break;
- }
-
- close (sock);
- zlog_warn ("write : %s (%d)", safe_strerror (errno), errno);
- return 1;
- }
- close (sock);
-
- return ret;
-}
-
-/* Interface to ioctl route message. */
static int
kernel_ioctl_ipv4 (u_long cmd, struct prefix *p, struct rib *rib, int family)
{