diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2007-09-21 15:45:20 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2007-09-21 15:45:20 +0000 |
commit | fe5ecbb692cb84aa5587ad80b5b22e5bde9855eb (patch) | |
tree | 89517c0d9e9c8df010f31b82415c8ec0e9d3709c /c/src/lib/libbsp/powerpc/gen5200/network_5200 | |
parent | 2007-09-21 Joel Sherrill <joel.sherrill@oarcorp.com> (diff) | |
download | rtems-fe5ecbb692cb84aa5587ad80b5b22e5bde9855eb.tar.bz2 |
2007-09-21 Joel Sherrill <joel.sherrill@OARcorp.com>
* network_5200/network.c: Add multicast support.
Diffstat (limited to 'c/src/lib/libbsp/powerpc/gen5200/network_5200')
-rw-r--r-- | c/src/lib/libbsp/powerpc/gen5200/network_5200/network.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/c/src/lib/libbsp/powerpc/gen5200/network_5200/network.c b/c/src/lib/libbsp/powerpc/gen5200/network_5200/network.c index c31d79410e..86813df9c0 100644 --- a/c/src/lib/libbsp/powerpc/gen5200/network_5200/network.c +++ b/c/src/lib/libbsp/powerpc/gen5200/network_5200/network.c @@ -1555,6 +1555,13 @@ static void mpc5200_fec_restart(struct mpc5200_enet_struct *sc) mpc5200.ecntrl |= (FEC_ECNTRL_OE | FEC_ECNTRL_EN); } +int32_t mpc5200_fec_setMultiFilter(struct ifnet *ifp) +{ + /*struct mpc5200_enet_struct *sc = ifp->if_softc; */ + /* XXX anything to do? */ + return 0; +} + /* * Driver ioctl handler @@ -1574,6 +1581,22 @@ static int mpc5200_fec_ioctl (struct ifnet *ifp, ioctl_command_t command, caddr_ break; + case SIOCADDMULTI: + case SIOCDELMULTI: { + struct ifreq* ifr = (struct ifreq*) data; + error = (command == SIOCADDMULTI) + ? ether_addmulti(ifr, &sc->arpcom) + : ether_delmulti(ifr, &sc->arpcom); + + if (error == ENETRESET) { + if (ifp->if_flags & IFF_RUNNING) + error = mpc5200_fec_setMultiFilter(ifp); + else + error = 0; + } + break; + } + case SIOCSIFFLAGS: switch(ifp->if_flags & (IFF_UP | IFF_RUNNING)) @@ -1777,7 +1800,7 @@ int rtems_mpc5200_fec_driver_attach(struct rtems_bsdnet_ifconfig *config) ifp->if_ioctl = mpc5200_fec_ioctl; ifp->if_start = mpc5200_fec_tx_start; ifp->if_output = ether_output; - ifp->if_flags = IFF_BROADCAST; + ifp->if_flags = IFF_BROADCAST | IFF_MULTICAST; /*ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX;*/ if(ifp->if_snd.ifq_maxlen == 0) |