summaryrefslogtreecommitdiffstats
path: root/sbin/route
diff options
context:
space:
mode:
authorru <ru@FreeBSD.org>2001-06-12 13:31:53 +0000
committerru <ru@FreeBSD.org>2001-06-12 13:31:53 +0000
commit1947791f919aee85ba70ae619e1acb01b4785442 (patch)
treea2dfa2059af469cf8d3eaf610a117ede5fc11473 /sbin/route
parente2ee5e2463262adf56309acd620a3a2d62787f25 (diff)
downloadFreeBSD-src-1947791f919aee85ba70ae619e1acb01b4785442.zip
FreeBSD-src-1947791f919aee85ba70ae619e1acb01b4785442.tar.gz
Allow route(8) to create "proxy only" published ARP entries.
PR: bin/12357 Submitted by: Craig Leres <leres@ee.lbl.gov>
Diffstat (limited to 'sbin/route')
-rw-r--r--sbin/route/keywords1
-rw-r--r--sbin/route/route.817
-rw-r--r--sbin/route/route.c11
3 files changed, 24 insertions, 5 deletions
diff --git a/sbin/route/keywords b/sbin/route/keywords
index 00080a7..18f995d 100644
--- a/sbin/route/keywords
+++ b/sbin/route/keywords
@@ -36,6 +36,7 @@ osi
prefixlen
proto1
proto2
+proxy
recvpipe
reject
rtt
diff --git a/sbin/route/route.8 b/sbin/route/route.8
index 13ab5ce..c88656c 100644
--- a/sbin/route/route.8
+++ b/sbin/route/route.8
@@ -313,6 +313,16 @@ or
.Fl ifa
modifiers may be used to determine the interface or interface address.
.Pp
+The optional
+.Fl proxy
+modifier specifies that the
+.Dv RTF_LLINFO
+routing table entry is the
+.Dq published Pq proxy-only
+.Tn ARP
+entry, as reported by
+.Xr arp 8 .
+.Pp
All symbolic names specified for a
.Ar destination
or
@@ -325,11 +335,9 @@ is then used to interpret the name as that of a network.
.Pp
.Nm Route
uses a routing socket and the new message types
-RTM_ADD,
-RTM_DELETE,
-RTM_GET,
+.Dv RTM_ADD , RTM_DELETE , RTM_GET ,
and
-RTM_CHANGE.
+.Dv RTM_CHANGE .
As such, only the super-user may modify
the routing tables.
.Sh DIAGNOSTICS
@@ -377,6 +385,7 @@ utility exits 0 on success or >0 if an error occurred.
.Xr netintro 4 ,
.Xr route 4 ,
.Xr IPXrouted 8 ,
+.Xr arp 8 ,
.Xr routed 8
.\" .Xr XNSrouted 8
.\" Xr esis 4 ,
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