/* Initialize interface. */ static void el_init(void *xsc) { struct el_softc *sc = xsc; struct ifnet *ifp = &sc->arpcom.ac_if; u_short base = sc->el_base; /* First, reset the board. */ dprintf(("Resetting board...\n")); el_hardreset(sc); /* Configure rx */ dprintf(("Configuring rx...\n")); if(ifp->if_flags & IFF_PROMISC) outb(base+EL_RXC,(EL_RXC_PROMISC|EL_RXC_AGF|EL_RXC_DSHORT|EL_RXC_DDRIB|EL_RXC_DOFLOW)); else outb(base+EL_RXC,(EL_RXC_ABROAD|EL_RXC_AGF|EL_RXC_DSHORT|EL_RXC_DDRIB|EL_RXC_DOFLOW)); outb(base+EL_RBC,0); /* Configure TX */ dprintf(("Configuring tx...\n")); outb(base+EL_TXC,0); /* Start reception */ dprintf(("Starting reception...\n")); outb(base+EL_AC,(EL_AC_IRQE|EL_AC_RX)); /* Set flags appropriately */ ifp->if_flags |= IFF_RUNNING; ifp->if_flags &= ~IFF_OACTIVE; /* And start output. */ el_start(ifp); }
/* Initialize interface. */ void el_init(int unit) { struct el_softc *sc; struct ifnet *ifp; int s; u_short base; /* Set up pointers */ sc = &el_softc[unit]; ifp = &sc->arpcom.ac_if; base = sc->el_base; /* If address not known, do nothing. */ if(ifp->if_addrlist == (struct ifaddr *)0) return; s = splimp(); /* First, reset the board. */ dprintf(("Resetting board...\n")); el_hardreset(unit); /* Configure rx */ dprintf(("Configuring rx...\n")); if(ifp->if_flags & IFF_PROMISC) outb(base+EL_RXC,(EL_RXC_PROMISC|EL_RXC_AGF|EL_RXC_DSHORT|EL_RXC_DDRIB|EL_RXC_DOFLOW)); else outb(base+EL_RXC,(EL_RXC_ABROAD|EL_RXC_AGF|EL_RXC_DSHORT|EL_RXC_DDRIB|EL_RXC_DOFLOW)); outb(base+EL_RBC,0); /* Configure TX */ dprintf(("Configuring tx...\n")); outb(base+EL_TXC,0); /* Start reception */ dprintf(("Starting reception...\n")); outb(base+EL_AC,(EL_AC_IRQE|EL_AC_RX)); /* Set flags appropriately */ ifp->if_flags |= IFF_RUNNING; ifp->if_flags &= ~IFF_OACTIVE; /* And start output. */ el_start(ifp); splx(s); }
int main(int argc, char **argv) { int listenfd, connfd, n; EL *el; CF *conf; char *opName[] = { "Listen", "ServerPath", "ClusterManagerName", "ClusterManagerPort"}; char *ptr; socklen_t addrlen; char BUFF[MAXLINE]; struct sockaddr_storage cliaddr; if (argc > 2) err_quit("usage: node [path to config file] <--help>\n"); if (argc == 2 && strcmp(argv[1],"--help") != 0) conf = cfileInit(argv[1],opName); else if (argc == 1) conf = cfileInit(DB_CONF,opName); connfd = tcpConnect( getOption(conf,"ClusterManagerName"), getOption(conf,"ClusterManagerPort")); if (connfd < 0) err_quit("error for connecting cluster manager.\n"); strcpy(BUFF,"REG "); getExternalIp(BUFF + 4); strcat(BUFF,"\r\n"); write(connfd,BUFF,strlen(BUFF)); if ((n = read(connfd,BUFF,MAXLINE)) > 0) { BUFF[n] = '\0'; if (strcmp(BUFF,"REG ERR\r\n") == 0) err_quit("error for registering node in cluster"); } else err_quit("error for registering node in cluster"); close(connfd); if ((ptr = getOption(conf,"Listen")) != NULL) listenfd = tcpListen(getOption(conf,"ServerName"),ptr,&addrlen); else err_quit("error for opening listen port.\n"); if ((el = el_open()) == NULL) err_quit("node error for creating epoll.\n"); el_addFileEvent(el,listenfd,AE_READABLE,sendRequesData,(void *)conf); el_start(el,AE_BLOCK); el_close(el); }