First piece of fixing ppp/proxy arp problem:
If an attempt to add a route fails because an "ARP table" entry is in the way, remove the ARP entry and retry the add. Reviewed by: nate
This commit is contained in:
parent
2924d49169
commit
4dde4205e1
@ -26,7 +26,7 @@
|
|||||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* $Id: in_rmx.c,v 1.21 1995/12/05 17:45:45 wollman Exp $
|
* $Id: in_rmx.c,v 1.22 1995/12/19 20:46:13 wollman Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -82,6 +82,7 @@ in_addroute(void *v_arg, void *n_arg, struct radix_node_head *head,
|
|||||||
{
|
{
|
||||||
struct rtentry *rt = (struct rtentry *)treenodes;
|
struct rtentry *rt = (struct rtentry *)treenodes;
|
||||||
struct sockaddr_in *sin = (struct sockaddr_in *)rt_key(rt);
|
struct sockaddr_in *sin = (struct sockaddr_in *)rt_key(rt);
|
||||||
|
struct radix_node *ret;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For IP, all unicast non-host routes are automatically cloning.
|
* For IP, all unicast non-host routes are automatically cloning.
|
||||||
@ -126,7 +127,32 @@ in_addroute(void *v_arg, void *n_arg, struct radix_node_head *head,
|
|||||||
rt->rt_rmx.rmx_mtu = rt->rt_ifp->if_mtu;
|
rt->rt_rmx.rmx_mtu = rt->rt_ifp->if_mtu;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return rn_addroute(v_arg, n_arg, head, treenodes);
|
ret = rn_addroute(v_arg, n_arg, head, treenodes);
|
||||||
|
if (ret == NULL && rt->rt_flags & RTF_HOST) {
|
||||||
|
struct rtentry *rt2;
|
||||||
|
/*
|
||||||
|
* We are trying to add a host route, but can't.
|
||||||
|
* Find out if it is because of an
|
||||||
|
* ARP entry and delete it if so.
|
||||||
|
*/
|
||||||
|
rt2 = rtalloc1((struct sockaddr *)sin, 0,
|
||||||
|
RTF_CLONING | RTF_PRCLONING);
|
||||||
|
if (rt2) {
|
||||||
|
if (rt2->rt_flags & RTF_LLINFO &&
|
||||||
|
rt2->rt_flags & RTF_HOST &&
|
||||||
|
rt2->rt_gateway &&
|
||||||
|
rt2->rt_gateway->sa_family == AF_LINK) {
|
||||||
|
rtrequest(RTM_DELETE,
|
||||||
|
(struct sockaddr *)rt_key(rt2),
|
||||||
|
rt2->rt_gateway,
|
||||||
|
rt_mask(rt2), rt2->rt_flags, 0);
|
||||||
|
ret = rn_addroute(v_arg, n_arg, head,
|
||||||
|
treenodes);
|
||||||
|
}
|
||||||
|
RTFREE(rt2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user