diff options
author | harti <harti@FreeBSD.org> | 2003-08-05 14:59:06 +0000 |
---|---|---|
committer | harti <harti@FreeBSD.org> | 2003-08-05 14:59:06 +0000 |
commit | a00853028bf6ab555c105dde4b09bc90bd2649c1 (patch) | |
tree | 5917aff815b2c9afe29e7abef871033e067c77f6 /sys/netinet/if_atm.c | |
parent | 324045a3c2b6250be90ee641eeeca297a5b6f0db (diff) | |
download | FreeBSD-src-a00853028bf6ab555c105dde4b09bc90bd2649c1.zip FreeBSD-src-a00853028bf6ab555c105dde4b09bc90bd2649c1.tar.gz |
When adding a channel for INET failed at the device level (ioctl) the
code used to call rtrequest(RTM_DELETE, ...). This is a problem, because
the function that just has called us (route_output)
is not really happy with the route it just is creating beeing ripped out
from under it. Unfortunately we also cannot return an error from
ifa_rtrequest. Therefore mark the route just as RTF_REJECT.
Diffstat (limited to 'sys/netinet/if_atm.c')
-rw-r--r-- | sys/netinet/if_atm.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/netinet/if_atm.c b/sys/netinet/if_atm.c index 322484f..9156f91 100644 --- a/sys/netinet/if_atm.c +++ b/sys/netinet/if_atm.c @@ -162,8 +162,10 @@ failed: rt->rt_flags &= ~RTF_LLINFO; } #endif - rtrequest(RTM_DELETE, rt_key(rt), (struct sockaddr *)0, - rt_mask(rt), 0, (struct rtentry **)0); + /* mark as invalid. We cannot RTM_DELETE the route from + * here, because the recursive call to rtrequest1 does + * not really work. */ + rt->rt_flags |= RTF_REJECT; break; case RTM_DELETE: |