1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-10-19 02:29:40 +00:00

- Define fddibroadcastaddr in if_fddisubr.c.

- Add fddi_ifdetach() and fddi_ioctl().
This commit is contained in:
Matthew N. Dodd 2002-03-29 10:40:35 +00:00
parent 3880eed1bc
commit c772c98600
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=93382
2 changed files with 108 additions and 5 deletions

View File

@ -88,17 +88,21 @@ struct fddi_header {
};
#if defined(_KERNEL)
#define fddibroadcastaddr etherbroadcastaddr
#define fddi_ipmulticast_min ether_ipmulticast_min
#define fddi_ipmulticast_max ether_ipmulticast_max
#define fddi_addmulti ether_addmulti
#define fddi_delmulti ether_delmulti
#define fddi_sprintf ether_sprintf
void fddi_ifattach(struct ifnet *);
void fddi_input(struct ifnet *, struct fddi_header *, struct mbuf *);
int fddi_output(struct ifnet *,
struct mbuf *, struct sockaddr *, struct rtentry *);
#define FDDI_BPF_UNSUPPORTED 0
#define FDDI_BPF_SUPPORTED 1
void fddi_ifattach(struct ifnet *);
void fddi_ifdetach(struct ifnet *, int);
void fddi_input(struct ifnet *, struct fddi_header *, struct mbuf *);
int fddi_output(struct ifnet *, struct mbuf *, struct sockaddr *,
struct rtentry *);
int fddi_ioctl(struct ifnet *, int, caddr_t);
#endif /* _KERNEL */
#endif /* _NET_FDDI_H_ */

View File

@ -91,6 +91,9 @@ extern u_char at_org_code[ 3 ];
extern u_char aarp_org_code[ 3 ];
#endif /* NETATALK */
static u_char fddibroadcastaddr[FDDI_ADDR_LEN] =
{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
static int fddi_resolvemulti(struct ifnet *, struct sockaddr **,
struct sockaddr *);
@ -551,6 +554,102 @@ fddi_ifattach(ifp)
return;
}
void
fddi_ifdetach(ifp, bpf)
struct ifnet *ifp;
int bpf;
{
if (bpf)
bpfdetach(ifp);
if_detach(ifp);
return;
}
int
fddi_ioctl (ifp, command, data)
struct ifnet *ifp;
int command;
caddr_t data;
{
struct ifaddr *ifa;
struct ifreq *ifr;
int error;
ifa = (struct ifaddr *) data;
ifr = (struct ifreq *) data;
error = 0;
switch (command) {
case SIOCSIFADDR:
ifp->if_flags |= IFF_UP;
switch (ifa->ifa_addr->sa_family) {
#ifdef INET
case AF_INET: /* before arpwhohas */
ifp->if_init(ifp->if_softc);
arp_ifinit(ifp, ifa);
break;
#endif
#ifdef IPX
/*
* XXX - This code is probably wrong
*/
case AF_IPX: {
struct ipx_addr *ina;
struct arpcom *ac;
ina = &(IA_SIPX(ifa)->sipx_addr);
ac = IFP2AC(ifp);
if (ipx_nullhost(*ina)) {
ina->x_host = *(union ipx_host *)
ac->ac_enaddr;
} else {
bcopy((caddr_t) ina->x_host.c_host,
(caddr_t) ac->ac_enaddr,
sizeof(ac->ac_enaddr));
}
/*
* Set new address
*/
ifp->if_init(ifp->if_softc);
}
break;
#endif
default:
ifp->if_init(ifp->if_softc);
break;
}
case SIOCGIFADDR: {
struct sockaddr *sa;
sa = (struct sockaddr *) & ifr->ifr_data;
bcopy(IFP2AC(ifp)->ac_enaddr,
(caddr_t) sa->sa_data, FDDI_ADDR_LEN);
}
break;
case SIOCSIFMTU:
/*
* Set the interface MTU.
*/
if (ifr->ifr_mtu > FDDIMTU) {
error = EINVAL;
} else {
ifp->if_mtu = ifr->ifr_mtu;
}
break;
default:
break;
}
return (error);
}
static int
fddi_resolvemulti(ifp, llsa, sa)
struct ifnet *ifp;