Allow route(8) to create "proxy only" published ARP entries.
PR: bin/12357 Submitted by: Craig Leres <leres@ee.lbl.gov>
This commit is contained in:
parent
86cd74127c
commit
1c59bf7de3
@ -36,6 +36,7 @@ osi
|
||||
prefixlen
|
||||
proto1
|
||||
proto2
|
||||
proxy
|
||||
recvpipe
|
||||
reject
|
||||
rtt
|
||||
|
@ -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 ,
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user