Date: Mon, 20 Jun 2016 07:54:46 GMT From: yuanxunzhang@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r305360 - soc2016/yuanxunzhang/head/sys/net Message-ID: <201606200754.u5K7sk9d093227@socsvn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: yuanxunzhang Date: Mon Jun 20 07:54:46 2016 New Revision: 305360 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=305360 Log: EAPS: add functions for eaps interface initialization Modified: soc2016/yuanxunzhang/head/sys/net/eaps.c soc2016/yuanxunzhang/head/sys/net/eaps.h Modified: soc2016/yuanxunzhang/head/sys/net/eaps.c ============================================================================== --- soc2016/yuanxunzhang/head/sys/net/eaps.c Mon Jun 20 06:45:42 2016 (r305359) +++ soc2016/yuanxunzhang/head/sys/net/eaps.c Mon Jun 20 07:54:46 2016 (r305360) @@ -66,6 +66,10 @@ */ static int eaps_clone_create(struct if_clone *, int, caddr_t); static void eaps_clone_destroy(struct ifnet *); +static int eaps_ioctl(struct ifnet *, u_long, caddr_t); +static int eaps_transmit(struct ifnet *, struct mbuf *); +static void eaps_qflush(struct ifnet *); +static void bridge_init(void *); static VNET_DEFINE(struct if_clone *, eaps_cloner); #define V_eaps_cloner VNET(eaps_cloner) @@ -142,7 +146,33 @@ static int eaps_clone_create(struct if_clone *ifc, int unit, caddr_t params) { - printf("%s: Kernel debug test-1.\n", __func__); + struct eaps_softc *sc; + struct ifnet *ifp; + + sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK|M_ZERO); + ifp = sc->sc_ifp = if_alloc(IFT_ETHER); + if (ifp == NULL) { + free(sc, M_DEVBUF); + return (ENOSPC); + } + + EAPS_LOCK_INIT(sc); + + ifp->if_softc = sc; + if_initname(ifp, eaps_name, unit); + ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST; + ifp->if_ioctl = eaps_ioctl; + ifp->if_transmit = eaps_transmit; + ifp->if_qflush = eaps_qflush; + ifp->if_init = eaps_init; + ifp->if_type = IFT_EAPS; + + ether_ifattach(ifp, sc->sc_defaddr); + + EAPS_LIST_LOCK(); + LIST_INSERT_HEAD(&V_eaps_list, sc, sc_entries); + EAPS_LIST_UNLOCK(); + return (0); } @@ -157,3 +187,74 @@ } +/* + * eaps_ioctl: + * + * Handle a control request from the operator. + */ +static int +eaps_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) +{ + struct bridge_softc *sc = ifp->if_softc; + struct ifreq *ifr = (struct ifreq *)data; + struct ifdrv *ifd = (struct ifdrv *) data; + + switch (cmd) { + + break; + default: + error = ether_ioctl(ifp, cmd, data); + break; + } + + return (error); +} + +/* + * eaps_transmit: + * + * Do output on a bridge. + * + */ +static int +eaps_transmit(struct ifnet *ifp, struct mbuf *m) +{ + struct eaps_softc *sc; + struct ether_header *eh; + struct ifnet *dst_if; + int error = 0; + + sc = ifp->if_softc; + ETHER_BPF_MTAP(ifp, m); + + return (error); +} + +/* + * The ifp->if_qflush entry point for eaps(4) is no-op. + */ +static void +bridge_qflush(struct ifnet *ifp __unused) +{ +} + +/* + * eaps_init: + * + * Initialize a eaps interface. + */ +static void +eaps_init(void *xsc) +{ + struct eaps_softc *sc = (struct eaps_softc *)xsc; + struct ifnet *ifp = sc->sc_ifp; + + if (ifp->if_drv_flags & IFF_DRV_RUNNING) + return; + + BRIDGE_LOCK(sc); + ifp->if_drv_flags |= IFF_DRV_RUNNING; + BRIDGE_UNLOCK(sc); +} + + Modified: soc2016/yuanxunzhang/head/sys/net/eaps.h ============================================================================== --- soc2016/yuanxunzhang/head/sys/net/eaps.h Mon Jun 20 06:45:42 2016 (r305359) +++ soc2016/yuanxunzhang/head/sys/net/eaps.h Mon Jun 20 07:54:46 2016 (r305360) @@ -137,6 +137,17 @@ #define EAPS_S_PREFORWARD 0x05 /* Transit in PREFORWARDING State */ #define EAPS_S_INIT 0x06 /* Master node in INIT state */ + +#define EAPS_LOCK_INIT(_sc) rm_init(&(_sc)->sc_mtx, "eaps rmlock") +#define EAPS_LOCK_DESTROY(_sc) rm_destroy(&(_sc)->sc_mtx) +#define EAPS_RLOCK(_sc, _p) rm_rlock(&(_sc)->sc_mtx, (_p)) +#define EAPS_WLOCK(_sc) rm_wlock(&(_sc)->sc_mtx) +#define EAPS_RUNLOCK(_sc, _p) rm_runlock(&(_sc)->sc_mtx, (_p)) +#define EAPS_WUNLOCK(_sc) rm_wunlock(&(_sc)->sc_mtx) +#define EAPS_RLOCK_ASSERT(_sc) rm_assert(&(_sc)->sc_mtx, RA_RLOCKED) +#define EAPS_WLOCK_ASSERT(_sc) rm_assert(&(_sc)->sc_mtx, RA_WLOCKED) +#define EAPS_UNLOCK_ASSERT(_sc) rm_assert(&(_sc)->sc_mtx, RA_UNLOCKED) + #endif /* _KERNEL */ #endif /* _NET_EAPS_H_ */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201606200754.u5K7sk9d093227>