static int connect_pppoe_ses(void) { int i,err=-1; if( pppoe_server == 1 ){ srv_init_ses(ses,devnam); }else{ client_init_ses(ses,devnam); } strlcpy(ppp_devnam, devnam, sizeof(ppp_devnam)); err= session_connect ( ses ); if(err < 0){ poe_fatal(ses,"Failed to negotiate PPPoE connection: %d %m",errno,errno); } poe_info(ses,"Connecting PPPoE socket: %E %04x %s %p", ses->sp.sa_addr.pppoe.remote, ses->sp.sa_addr.pppoe.sid, ses->sp.sa_addr.pppoe.dev,ses); err = connect(ses->fd, (struct sockaddr*)&ses->sp, sizeof(struct sockaddr_pppox)); if( err < 0 ){ poe_fatal(ses,"Failed to connect PPPoE socket: %d %m",errno,errno); return err; } /* Once the logging is fixed, print a message here indicating connection parameters */ return ses->fd; }
static int connect_pppoe_ses(void) { int err=-1; if( pppoe_server == 1 ){ srv_init_ses(ses,devnam); }else{ client_init_ses(ses,devnam); } #if 0 ses->np=1; /* jamal debug the discovery portion */ #endif strcpy(ppp_devnam, devnam); err= session_connect ( ses ); if(err < 0){ if (!kill_link) poe_error(ses,"Failed to negotiate PPPoE connection: %d - %m", errno,errno); return -1; } poe_info(ses,"Connecting PPPoE socket: %E %04x %s %p", ses->sp.sa_addr.pppoe.remote, ses->sp.sa_addr.pppoe.sid, ses->sp.sa_addr.pppoe.dev,ses); err = connect(ses->fd, (struct sockaddr*)&ses->sp, sizeof(struct sockaddr_pppox)); if( err < 0 ){ poe_fatal(ses,"Failed to connect PPPoE socket: %d %m",errno,errno); return err; } #if 0 if (ses->np) fatal("discovery complete\n"); #endif /* Once the logging is fixed, print a message here indicating connection parameters */ return ses->fd; }
int main(int argc, char** argv){ int ret; struct filter *filt; struct session *ses = (struct session *)malloc(sizeof(struct session)); char buf[256]; ses=(void *)malloc(sizeof(struct session)); if(!ses){ return -1; } memset(ses,0,sizeof(struct session)); openlog ("pppoed", LOG_PID | LOG_NDELAY, LOG_PPPOE); setlogmask (LOG_UPTO (ses->opt_debug ? LOG_DEBUG : LOG_INFO)); if ((get_args (argc,(char **) argv,ses)) <1) poe_die(-1); filt=ses->filt; /* makes the code more readable */ if (!ses->np) { poe_create_pidfile (ses); // signal (SIGINT, &sigproc); // signal (SIGTERM, &sigproc); signal (SIGCHLD, &sigchild); } if(ses->type == SESSION_CLIENT){ poe_info(ses,"calling client_init_ses\n"); ret = client_init_ses(ses,ses->name); if( ret < 0 ){ return -1; } while (ses->filt->num_restart > 0) { poe_info(ses,"Restart number %d ",ses->filt->num_restart); ppp_connect (ses); ses->filt->num_restart--; } }else if( ses->type == SESSION_SERVER ){ poe_info(ses,"calling srv_init_ses\n"); ret = srv_init_ses(ses,ses->name); if( ret < 0 ){ return -1; } ret = 1; while(ret>=0) ret = ppp_connect(ses); } poe_info(ses,"ppp_connect came back! %d",ret); exit(0); }
static int connect_pppoe_ses(void) { int err=-1; int rcvbuf; //brcm // cwu #if 0 if( pppoe_server == 1 ){ srv_init_ses(ses,devnam); }else{ client_init_ses(ses,devnam); } #endif client_init_ses(ses,devnam); #if 0 ses->np=1; /* jamal debug the discovery portion */ #endif strlcpy(ppp_devnam, devnam, sizeof(ppp_devnam)); //brcm if (disc_sock > 0) { rcvbuf=5000; setsockopt(disc_sock, SOL_SOCKET, SO_RCVBUF, &rcvbuf, sizeof(rcvbuf)); } err= session_connect ( ses ); /* * brcm, after pppoe session is up, we don't read disc_sock, * reduce socket rx buffer to avoid to exhaust all rx buffer */ if (disc_sock > 0) { rcvbuf=256; setsockopt(disc_sock, SOL_SOCKET, SO_RCVBUF, &rcvbuf, sizeof(rcvbuf)); } if(err < 0){ if (!link_up(devnam)) return 0; else if (!get_sock_intf(devnam)) return 0; else poe_fatal(ses,"Failed to negotiate PPPoE connection: %d %m",errno,errno); } // cwu /* poe_info(ses,"Connecting PPPoE socket: %E %04x %s %p", ses->sp.sa_addr.pppoe.remote, ses->sp.sa_addr.pppoe.sid, ses->sp.sa_addr.pppoe.dev,ses); */ err = connect(ses->fd, (struct sockaddr*)&ses->sp, sizeof(struct sockaddr_pppox)); if( err < 0 ){ poe_fatal(ses,"Failed to connect PPPoE socket: %d %m",errno,errno); return err; } #if 0 if (ses->np) fatal("discovery complete\n"); #endif /* Once the logging is fixed, print a message here indicating connection parameters */ return ses->fd; }