diff options
Diffstat (limited to 'sys/netatalk/at_control.c')
-rw-r--r-- | sys/netatalk/at_control.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/sys/netatalk/at_control.c b/sys/netatalk/at_control.c index 8ae0f62..91e8653 100644 --- a/sys/netatalk/at_control.c +++ b/sys/netatalk/at_control.c @@ -136,7 +136,7 @@ at_control( int cmd, caddr_t data, struct ifnet *ifp, struct proc *p ) } aa->aa_ifa.ifa_addr = (struct sockaddr *)&aa->aa_addr; - aa->aa_ifa.ifa_dstaddr = (struct sockaddr *)&aa->aa_addr; + aa->aa_ifa.ifa_dstaddr = (struct sockaddr *)&aa->aa_dstaddr; aa->aa_ifa.ifa_netmask = (struct sockaddr *)&aa->aa_netmask; /* @@ -378,29 +378,30 @@ at_ifinit( ifp, aa, sat ) return( error ); } - /* Initialize interface netmask, which is silly for us */ + /* Initialize netmask and broadcast address */ bzero(&aa->aa_netmask, sizeof(aa->aa_netmask)); + aa->aa_ifa.ifa_netmask = (struct sockaddr *) &aa->aa_netmask; aa->aa_netmask.sat_len = sizeof(struct sockaddr_at); aa->aa_netmask.sat_family = AF_APPLETALK; - aa->aa_ifa.ifa_netmask = (struct sockaddr *) &aa->aa_netmask; + + bzero(&aa->aa_broadaddr, sizeof(aa->aa_broadaddr)); + aa->aa_ifa.ifa_broadaddr = (struct sockaddr *) &aa->aa_broadaddr; + aa->aa_broadaddr.sat_len = sizeof(struct sockaddr_at); + aa->aa_broadaddr.sat_family = AF_APPLETALK; /* "Add a route to the network" */ aa->aa_ifa.ifa_metric = ifp->if_metric; if (ifp->if_flags & IFF_BROADCAST) { - bzero(&aa->aa_broadaddr, sizeof(aa->aa_broadaddr)); - aa->aa_broadaddr.sat_len = sat->sat_len; - aa->aa_broadaddr.sat_family = AF_APPLETALK; aa->aa_broadaddr.sat_addr.s_net = htons(0); aa->aa_broadaddr.sat_addr.s_node = 0xff; - aa->aa_ifa.ifa_broadaddr = (struct sockaddr *) &aa->aa_broadaddr; aa->aa_netmask.sat_addr.s_net = htons(0xffff); /* XXX */ - aa->aa_netmask.sat_addr.s_node = htons(0); /* XXX */ + aa->aa_netmask.sat_addr.s_node = 0; /* XXX */ } else if (ifp->if_flags & IFF_LOOPBACK) { aa->aa_ifa.ifa_dstaddr = aa->aa_ifa.ifa_addr; aa->aa_netmask.sat_addr.s_net = htons(0xffff); /* XXX */ - aa->aa_netmask.sat_addr.s_node = htons(0xffff); /* XXX */ + aa->aa_netmask.sat_addr.s_node = 0xff; /* XXX */ flags |= RTF_HOST; } else if (ifp->if_flags & IFF_POINTOPOINT) { aa->aa_ifa.ifa_dstaddr = aa->aa_ifa.ifa_addr; @@ -408,7 +409,7 @@ at_ifinit( ifp, aa, sat ) aa->aa_netmask.sat_addr.s_node = htons(0xffff); flags |= RTF_HOST; } - error = rtinit(&(aa->aa_ifa), (int)RTM_ADD, flags); + error = rtinit(&aa->aa_ifa, RTM_ADD, flags); #if 0 if ( ifp->if_flags & IFF_LOOPBACK ) { |