From b9f17f8a4153d257baeda355a117c06527f0119b Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Fri, 21 Sep 2007 15:45:11 +0000 Subject: 2007-09-21 Joel Sherrill * network_5200/network.c: Add multicast support. --- c/src/lib/libbsp/powerpc/gen5200/ChangeLog | 4 ++++ .../libbsp/powerpc/gen5200/network_5200/network.c | 25 +++++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) (limited to 'c') diff --git a/c/src/lib/libbsp/powerpc/gen5200/ChangeLog b/c/src/lib/libbsp/powerpc/gen5200/ChangeLog index 2781b56330..de1862da53 100644 --- a/c/src/lib/libbsp/powerpc/gen5200/ChangeLog +++ b/c/src/lib/libbsp/powerpc/gen5200/ChangeLog @@ -1,3 +1,7 @@ +2007-09-21 Joel Sherrill + + * network_5200/network.c: Add multicast support. + 2007-09-12 Joel Sherrill PR 1257/bsps 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) -- cgit v1.2.3