summaryrefslogtreecommitdiffstats
path: root/sbin/route/route.c
diff options
context:
space:
mode:
Diffstat (limited to 'sbin/route/route.c')
-rw-r--r--sbin/route/route.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/sbin/route/route.c b/sbin/route/route.c
index 02a8dce..38c35f7 100644
--- a/sbin/route/route.c
+++ b/sbin/route/route.c
@@ -56,6 +56,7 @@ static const char rcsid[] =
#include <net/route.h>
#include <net/if_dl.h>
#include <netinet/in.h>
+#include <netinet/if_ether.h>
#include <netatalk/at.h>
#ifdef NS
#include <netns/ns.h>
@@ -94,6 +95,7 @@ union sockunion {
struct sockaddr_ns sns;
#endif
struct sockaddr_dl sdl;
+ struct sockaddr_inarp sinarp;
struct sockaddr_storage ss; /* added to avoid memory overrun */
} so_dst, so_gate, so_mask, so_genmask, so_ifa, so_ifp;
@@ -581,7 +583,7 @@ newroute(argc, argv)
register char **argv;
{
char *cmd, *dest = "", *gateway = "", *err;
- int ishost = 0, ret, attempts, oerrno, flags = RTF_STATIC;
+ int ishost = 0, proxy = 0, ret, attempts, oerrno, flags = RTF_STATIC;
int key;
struct hostent *hp = 0;
@@ -653,6 +655,9 @@ newroute(argc, argv)
case K_PROTO2:
flags |= RTF_PROTO2;
break;
+ case K_PROXY:
+ proxy = 1;
+ break;
case K_CLONING:
flags |= RTF_CLONING;
break;
@@ -750,6 +755,10 @@ newroute(argc, argv)
flags |= RTF_HOST;
if (iflag == 0)
flags |= RTF_GATEWAY;
+ if (proxy) {
+ so_dst.sinarp.sin_other = SIN_PROXY;
+ flags |= RTF_ANNOUNCE;
+ }
for (attempts = 1; ; attempts++) {
errno = 0;
if ((ret = rtmsg(*cmd, flags)) == 0)
OpenPOWER on IntegriCloud