2011-05-27 12:55:24 +02:00
|
|
|
$NetBSD: patch-an,v 1.4 2011/05/27 10:55:25 adam Exp $
|
2006-01-24 23:16:55 +01:00
|
|
|
|
2011-05-27 12:55:24 +02:00
|
|
|
--- agent/mibgroup/mibII/route_write.c.orig 2010-03-20 19:36:28.000000000 +0000
|
2006-01-24 23:16:55 +01:00
|
|
|
+++ agent/mibgroup/mibII/route_write.c
|
2011-05-27 12:55:24 +02:00
|
|
|
@@ -93,7 +93,7 @@
|
2005-07-31 04:30:18 +02:00
|
|
|
int
|
|
|
|
addRoute(u_long dstip, u_long gwip, u_long iff, u_short flags)
|
|
|
|
{
|
2006-01-24 23:16:55 +01:00
|
|
|
-#if defined SIOCADDRT && !defined(irix6)
|
|
|
|
+#if defined SIOCADDRT && !defined(irix6) && !defined(darwin)
|
2005-07-31 04:30:18 +02:00
|
|
|
struct sockaddr_in dst;
|
|
|
|
struct sockaddr_in gateway;
|
|
|
|
int s, rc;
|
2011-05-27 12:55:24 +02:00
|
|
|
@@ -128,6 +128,54 @@ addRoute(u_long dstip, u_long gwip, u_lo
|
2006-01-24 23:16:55 +01:00
|
|
|
if (rc < 0)
|
|
|
|
snmp_log_perror("ioctl");
|
2005-07-31 04:30:18 +02:00
|
|
|
return rc;
|
|
|
|
+#elif defined darwin
|
|
|
|
+ size_t sa_in_size = sizeof(struct sockaddr_in);
|
2006-01-24 23:16:55 +01:00
|
|
|
+ int s, rc;
|
2005-07-31 04:30:18 +02:00
|
|
|
+ struct sockaddr_in dst;
|
|
|
|
+ struct sockaddr_in gateway;
|
|
|
|
+ struct {
|
2006-01-24 23:16:55 +01:00
|
|
|
+ struct rt_msghdr hdr;
|
|
|
|
+ char space[512];
|
2005-07-31 04:30:18 +02:00
|
|
|
+ } rtmsg;
|
|
|
|
+
|
|
|
|
+ s = socket(PF_ROUTE, SOCK_RAW, 0);
|
|
|
|
+ if (s < 0) {
|
|
|
|
+ snmp_log_perror("socket");
|
|
|
|
+ return -1;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ shutdown(s, SHUT_RD);
|
|
|
|
+ /* possible panic otherwise */
|
|
|
|
+ flags |= (RTF_UP | RTF_GATEWAY);
|
|
|
|
+
|
|
|
|
+ bzero((char *)&dst, sa_in_size);
|
|
|
|
+ dst.sin_len = sa_in_size;
|
|
|
|
+ dst.sin_family = AF_INET;
|
|
|
|
+ dst.sin_addr.s_addr = htonl(dstip);
|
|
|
|
+
|
|
|
|
+ bzero((char *)&gateway, sa_in_size);
|
|
|
|
+ gateway.sin_len = sa_in_size;
|
|
|
|
+ gateway.sin_family = AF_INET;
|
|
|
|
+ gateway.sin_addr.s_addr = htonl(gwip);
|
|
|
|
+
|
|
|
|
+ bzero((char *)&rtmsg, sizeof(rtmsg));
|
|
|
|
+ rtmsg.hdr.rtm_type = RTM_ADD;
|
|
|
|
+ rtmsg.hdr.rtm_version = RTM_VERSION;
|
|
|
|
+ rtmsg.hdr.rtm_addrs = RTA_DST | RTA_GATEWAY;
|
|
|
|
+ rtmsg.hdr.rtm_flags = RTF_GATEWAY;
|
2006-01-24 23:16:55 +01:00
|
|
|
+
|
2005-07-31 04:30:18 +02:00
|
|
|
+ bcopy((char *)&dst, rtmsg.space, sa_in_size);
|
|
|
|
+ bcopy((char *)&gateway, (rtmsg.space+sa_in_size), sa_in_size);
|
2006-01-24 23:16:55 +01:00
|
|
|
+
|
2005-07-31 04:30:18 +02:00
|
|
|
+ rc = sizeof(struct rt_msghdr) + sa_in_size + sa_in_size;
|
|
|
|
+ rtmsg.hdr.rtm_msglen = rc;
|
2006-01-24 23:16:55 +01:00
|
|
|
+
|
2005-07-31 04:30:18 +02:00
|
|
|
+ if ((rc = write(s, (char *)&rtmsg, rc)) < 0) {
|
|
|
|
+ snmp_log_perror("writing to routing socket");
|
|
|
|
+ return -1;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return (rc);
|
2006-01-24 23:16:55 +01:00
|
|
|
|
|
|
|
#else /* SIOCADDRT */
|
|
|
|
return -1;
|
2011-05-27 12:55:24 +02:00
|
|
|
@@ -139,7 +187,7 @@ addRoute(u_long dstip, u_long gwip, u_lo
|
2005-07-31 04:30:18 +02:00
|
|
|
int
|
|
|
|
delRoute(u_long dstip, u_long gwip, u_long iff, u_short flags)
|
|
|
|
{
|
2006-01-24 23:16:55 +01:00
|
|
|
-#if defined SIOCDELRT && !defined(irix6)
|
|
|
|
+#if defined SIOCDELRT && !defined(irix6) && !defined(darwin)
|
2005-07-31 04:30:18 +02:00
|
|
|
|
|
|
|
struct sockaddr_in dst;
|
|
|
|
struct sockaddr_in gateway;
|
2011-05-27 12:55:24 +02:00
|
|
|
@@ -174,6 +222,56 @@ delRoute(u_long dstip, u_long gwip, u_lo
|
2006-01-24 23:16:55 +01:00
|
|
|
close(s);
|
2005-07-31 04:30:18 +02:00
|
|
|
return rc;
|
|
|
|
|
|
|
|
+#elif defined darwin
|
|
|
|
+ size_t sa_in_size = sizeof(struct sockaddr_in);
|
2006-01-24 23:16:55 +01:00
|
|
|
+ int s, rc;
|
2005-07-31 04:30:18 +02:00
|
|
|
+ struct sockaddr_in dst;
|
|
|
|
+ struct sockaddr_in gateway;
|
|
|
|
+ struct {
|
2006-01-24 23:16:55 +01:00
|
|
|
+ struct rt_msghdr hdr;
|
|
|
|
+ char space[512];
|
2005-07-31 04:30:18 +02:00
|
|
|
+ } rtmsg;
|
|
|
|
+
|
|
|
|
+ s = socket(PF_ROUTE, SOCK_RAW, 0);
|
|
|
|
+
|
|
|
|
+ if (s < 0) {
|
|
|
|
+ snmp_log_perror("socket");
|
|
|
|
+ return -1;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ shutdown(s, SHUT_RD);
|
|
|
|
+ /* possible panic otherwise */
|
|
|
|
+ flags |= (RTF_UP | RTF_GATEWAY);
|
|
|
|
+
|
|
|
|
+ bzero((char *)&dst, sa_in_size);
|
|
|
|
+ dst.sin_len = sa_in_size;
|
|
|
|
+ dst.sin_family = AF_INET;
|
|
|
|
+ dst.sin_addr.s_addr = htonl(dstip);
|
|
|
|
+
|
|
|
|
+ bzero((char *)&gateway, sa_in_size);
|
|
|
|
+ gateway.sin_len = sa_in_size;
|
|
|
|
+ gateway.sin_family = AF_INET;
|
|
|
|
+ gateway.sin_addr.s_addr = htonl(gwip);
|
|
|
|
+
|
|
|
|
+ bzero((char *)&rtmsg, sizeof(rtmsg));
|
|
|
|
+ rtmsg.hdr.rtm_type = RTM_DELETE;
|
|
|
|
+ rtmsg.hdr.rtm_version = RTM_VERSION;
|
|
|
|
+ rtmsg.hdr.rtm_addrs = RTA_DST | RTA_GATEWAY;
|
|
|
|
+ rtmsg.hdr.rtm_flags = RTF_GATEWAY;
|
|
|
|
+
|
|
|
|
+ bcopy((char *)&dst, rtmsg.space, sa_in_size);
|
|
|
|
+ bcopy((char *)&gateway, (rtmsg.space+sa_in_size), sa_in_size);
|
|
|
|
+
|
|
|
|
+ rc = sizeof(struct rt_msghdr) + sa_in_size + sa_in_size;
|
|
|
|
+ rtmsg.hdr.rtm_msglen = rc;
|
|
|
|
+
|
|
|
|
+ if ((rc = write(s, (char *)&rtmsg, rc)) < 0) {
|
|
|
|
+ snmp_log_perror("writing to routing socket");
|
|
|
|
+ return -1;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return rc;
|
|
|
|
+
|
2006-01-24 23:16:55 +01:00
|
|
|
#else /* SIOCDELRT */
|
|
|
|
return 0;
|
|
|
|
#endif
|