summaryrefslogtreecommitdiff
path: root/sys/net/rtsock.c
diff options
context:
space:
mode:
authorBrian Somers <brian@FreeBSD.org>2001-12-19 16:03:27 +0000
committerBrian Somers <brian@FreeBSD.org>2001-12-19 16:03:27 +0000
commit02a5d63eff8541df302bb7ced88f0f1df3f07386 (patch)
tree8e8d5c255bc20d6445398c6d2beb54fc060d8943 /sys/net/rtsock.c
parente579ba1aeaf8ceb2b73d6e929daf3a362b06ecf2 (diff)
Notes
Diffstat (limited to 'sys/net/rtsock.c')
-rw-r--r--sys/net/rtsock.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/sys/net/rtsock.c b/sys/net/rtsock.c
index 84f38d64ec2a..2de17fa42c60 100644
--- a/sys/net/rtsock.c
+++ b/sys/net/rtsock.c
@@ -424,8 +424,14 @@ route_output(m, so)
/* new gateway could require new ifaddr, ifp;
flags may also be different; ifp may be specified
by ll sockaddr when protocol address is ambiguous */
- if ((error = rt_getifa(&info)) != 0)
- senderr(error);
+#define equal(a1, a2) (bcmp((caddr_t)(a1), (caddr_t)(a2), (a1)->sa_len) == 0)
+ if ((rt->rt_flags & RTF_GATEWAY && gate != NULL) ||
+ ifpaddr != NULL ||
+ (ifaaddr != NULL &&
+ !equal(ifaaddr, rt->rt_ifa->ifa_addr))) {
+ if ((error = rt_getifa(&info)) != 0)
+ senderr(error);
+ }
if (gate != NULL &&
(error = rt_setgate(rt, rt_key(rt), gate)) != 0)
senderr(error);