summaryrefslogtreecommitdiffstats
path: root/sys/netatalk
diff options
context:
space:
mode:
authorjulian <julian@FreeBSD.org>1996-09-03 06:23:13 +0000
committerjulian <julian@FreeBSD.org>1996-09-03 06:23:13 +0000
commitc6223a506f729abf5fe4f18166aac816e34fd9fe (patch)
tree14b93f61d4f7fa6fc424dc73ca6a13b257d956c3 /sys/netatalk
parenta0cc35f037b722340139bd91ea5e089d6789af43 (diff)
downloadFreeBSD-src-c6223a506f729abf5fe4f18166aac816e34fd9fe.zip
FreeBSD-src-c6223a506f729abf5fe4f18166aac816e34fd9fe.tar.gz
allow a new loopback route to overwrite an old one..
this allows the atalkd to be restarted.. a better fix will come later.
Diffstat (limited to 'sys/netatalk')
-rw-r--r--sys/netatalk/at_control.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/sys/netatalk/at_control.c b/sys/netatalk/at_control.c
index 9fa4614..9297089 100644
--- a/sys/netatalk/at_control.c
+++ b/sys/netatalk/at_control.c
@@ -344,11 +344,16 @@ at_scrub( ifp, aa )
struct at_ifaddr *aa;
{
int error;
+ struct at_addr addr;
+ struct at_addr mask;
if ( aa->aa_flags & AFA_ROUTE ) {
if (ifp->if_flags & IFF_LOOPBACK) {
- if ((error = rtinit( &aa->aa_ifa, RTM_DELETE, RTF_HOST)) != 0)
- return( error );
+ if (error = aa_delsingleroute(&aa->aa_ifa,
+ &aa->aa_addr.sat_addr,
+ &aa->aa_netmask.sat_addr)) {
+ return( error );
+ }
} else if (ifp->if_flags & IFF_POINTOPOINT) {
if ((error = rtinit( &aa->aa_ifa, RTM_DELETE, RTF_HOST)) != 0)
return( error );
@@ -463,6 +468,7 @@ at_ifinit( ifp, aa, sat )
aa->aa_addr = oldaddr;
aa->aa_firstnet = onr.nr_firstnet;
aa->aa_lastnet = onr.nr_lastnet;
+ splx(s);
return( EINVAL );
}
/*
@@ -516,7 +522,6 @@ at_ifinit( ifp, aa, sat )
* though why wait 200mSec?
*/
timeout( (timeout_func_t)aarpprobe, (caddr_t)ifp, hz / 5 );
- splx( s );
if ( tsleep( aa, PPAUSE|PCATCH, "at_ifinit", 0 )) {
/*
* theoretically we shouldn't time out here
@@ -526,6 +531,7 @@ at_ifinit( ifp, aa, sat )
aa->aa_addr = oldaddr;
aa->aa_firstnet = onr.nr_firstnet;
aa->aa_lastnet = onr.nr_lastnet;
+ splx( s );
return( EINTR );
}
@@ -535,7 +541,6 @@ at_ifinit( ifp, aa, sat )
* a free spot, or if we need to iterate to the next
* address to try.
*/
- s = splimp();
if (( aa->aa_flags & AFA_PROBING ) == 0 ) {
break;
}
@@ -627,7 +632,7 @@ at_ifinit( ifp, aa, sat )
rtaddr.s_net = AA_SAT( aa )->sat_addr.s_net;
rtaddr.s_node = AA_SAT( aa )->sat_addr.s_node;
rtmask.s_net = 0xffff;
- rtmask.s_node = 0x0;
+ rtmask.s_node = 0x0; /* XXX should not be so.. should be HOST route */
error = aa_addsingleroute(&aa->aa_ifa, &rtaddr, &rtmask);
}
OpenPOWER on IntegriCloud