From 3944c1881df4cfb2b6bbd958fa6576ec780ec83e Mon Sep 17 00:00:00 2001 From: Randall Stewart Date: Thu, 25 Apr 2013 21:55:29 +0000 Subject: MFC of r249848: This fixes the issue with the "randomly changing" default route. What it was is there are two places in ip_output.c where we do a goto again. One place was fine, it copies out the new address and then resets dst = ro->rt_dst; But the other place does *not* do that, which means earlier when we found the gateway, we have dst pointing there aka dst = ro->rt_gateway is done.. then we do a goto again.. bam now we clobber the default route. The fix is just to move the again so we are always doing dst = &ro->rt_dst; in the again loop. Approved by: re@freebsd.org (Josh Paetzel) --- sys/netinet/ip_output.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'sys') diff --git a/sys/netinet/ip_output.c b/sys/netinet/ip_output.c index 8d7ce79dcbbf..6108b26706b5 100644 --- a/sys/netinet/ip_output.c +++ b/sys/netinet/ip_output.c @@ -197,8 +197,8 @@ ip_output(struct mbuf *m, struct mbuf *opt, struct route *ro, int flags, hlen = ip->ip_hl << 2; } - dst = (struct sockaddr_in *)&ro->ro_dst; again: + dst = (struct sockaddr_in *)&ro->ro_dst; /* * If there is a cached route, * check that it is to the same destination -- cgit v1.3