/** * Call ppp_connect() inside the tcpip_thread context. */ static err_t pppapi_do_ppp_connect(struct tcpip_api_call_data *m) { /* cast through void* to silence alignment warnings. * We know it works because the structs have been instantiated as struct pppapi_msg */ struct pppapi_msg *msg = (struct pppapi_msg *)(void*)m; return ppp_connect(msg->msg.ppp, msg->msg.msg.connect.holdoff); }
void ppp_reconnect(struct ppp_context_s *ctx) { int ret; int retry = PPP_MAX_CONNECT; struct pppd_settings_s *pppd_settings = ctx->settings; netlib_ifdown((char*)ctx->ifname); lcp_disconnect(ctx, ++ctx->ppp_id); sleep(1); lcp_disconnect(ctx, ++ctx->ppp_id); sleep(1); write(ctx->ctl.fd, "+++", 3); sleep(2); write(ctx->ctl.fd, "ATE1\r\n", 6); if (pppd_settings->disconnect_script) { ret = chat(&ctx->ctl, pppd_settings->disconnect_script); if (ret < 0) { printf("ppp: disconnect script failed\n"); } } if (pppd_settings->connect_script) { do { ret = chat(&ctx->ctl, pppd_settings->connect_script); if (ret < 0) { printf("ppp: connect script failed\n"); --retry; if (retry == 0) { retry = PPP_MAX_CONNECT; #ifdef PPP_ARCH_HAVE_MODEM_RESET ppp_arch_modem_reset(pppd_settings->ttyname); #endif sleep(45); } else { sleep(10); } } } while (ret != 0); } ppp_init(ctx); ppp_connect(ctx); ctx->ip_len = 0; }
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); }
/** * Call ppp_connect() inside the tcpip_thread context. */ static void pppapi_do_ppp_connect(struct pppapi_msg_msg *msg) { msg->err = ppp_connect(msg->ppp, msg->msg.connect.holdoff); TCPIP_PPPAPI_ACK(msg); }
static void init_netifs(void) { #if LWIP_HAVE_SLIPIF #if SLIP_PTY_TEST u8_t siodev_slip = 3; #else u8_t siodev_slip = 0; #endif #if LWIP_IPV4 netif_add(&slipif, ip_2_ip4(&ipaddr_slip), ip_2_ip4(&netmask_slip), ip_2_ip4(&gw_slip), (void*)&siodev_slip, slipif_init, tcpip_input); #else /* LWIP_IPV4 */ netif_add(&slipif, (void*)&siodev_slip, slipif_init, tcpip_input); #endif /* LWIP_IPV4 */ #if LWIP_IPV6 netif_create_ip6_linklocal_address(&slipif, 1); #endif #if LWIP_NETIF_STATUS_CALLBACK netif_set_status_callback(&slipif, netif_status_callback); #endif /* LWIP_NETIF_STATUS_CALLBACK */ netif_set_link_up(&slipif); netif_set_up(&slipif); #endif /* LWIP_HAVE_SLIPIF */ #if PPP_SUPPORT #if PPP_PTY_TEST ppp_sio = sio_open(2); #else ppp_sio = sio_open(0); #endif if(!ppp_sio) { perror("Error opening device: "); exit(1); } ppp = pppos_create(&pppos_netif, ppp_output_cb, ppp_link_status_cb, NULL); if (!ppp) { printf("Could not create PPP control interface"); exit(1); } #ifdef LWIP_PPP_CHAP_TEST ppp_set_auth(ppp, PPPAUTHTYPE_CHAP, "lwip", "mysecret"); #endif ppp_connect(ppp, 0); #if LWIP_NETIF_STATUS_CALLBACK netif_set_status_callback(&pppos_netif, netif_status_callback); #endif /* LWIP_NETIF_STATUS_CALLBACK */ #endif /* PPP_SUPPORT */ #if LWIP_IPV4 #if LWIP_DHCP IP_ADDR4(&gw, 0,0,0,0); IP_ADDR4(&ipaddr, 0,0,0,0); IP_ADDR4(&netmask, 0,0,0,0); #endif /* LWIP_DHCP */ netif_add(&netif, ip_2_ip4(&ipaddr), ip_2_ip4(&netmask), ip_2_ip4(&gw), NULL, tapif_init, tcpip_input); #else /* LWIP_IPV4 */ netif_add(&netif, NULL, tapif_init, tcpip_input); #endif /* LWIP_IPV4 */ #if LWIP_IPV6 netif_create_ip6_linklocal_address(&netif, 1); #endif #if LWIP_NETIF_STATUS_CALLBACK netif_set_status_callback(&netif, netif_status_callback); #endif /* LWIP_NETIF_STATUS_CALLBACK */ netif_set_default(&netif); netif_set_up(&netif); #if LWIP_DHCP dhcp_start(&netif); #endif /* LWIP_DHCP */ #if 0 /* Only used for testing purposes: */ netif_add(&ipaddr, &netmask, &gw, NULL, pcapif_init, tcpip_input); #endif #if LWIP_TCP && LWIP_NETCONN tcpecho_init(); shell_init(); httpd_init(); #endif #if LWIP_UDP && LWIP_NETCONN udpecho_init(); #endif /* sys_timeout(5000, tcp_debug_timeout, NULL);*/ }
static void init_netifs(void) { #if PPP_SUPPORT sio_fd_t ppp_sio; ppp_pcb *ppp; #if PPP_PTY_TEST ppp_sio = sio_open(2); #else ppp_sio = sio_open(0); #endif if(!ppp_sio) { perror("Error opening device: "); exit(1); } ppp = pppos_create(&pppos_netif, ppp_sio, ppp_link_status_cb, NULL); if (!ppp) { printf("Could not create PPP control interface"); exit(1); } #ifdef LWIP_PPP_CHAP_TEST ppp_set_auth(ppp, PPPAUTHTYPE_CHAP, "lwip", "mysecret"); #endif ppp_connect(ppp, 0); #endif /* PPP_SUPPORT */ #if LWIP_DHCP IP4_ADDR(&gw, 0,0,0,0); IP4_ADDR(&ipaddr, 0,0,0,0); IP4_ADDR(&netmask, 0,0,0,0); #endif netif_set_default(netif_add(&netif,&ipaddr, &netmask, &gw, NULL, tapif_init, tcpip_input)); netif_set_up(&netif); #if LWIP_DHCP dhcp_start(&netif); #endif #if LWIP_IPV6 netif_create_ip6_linklocal_address(&netif, 1); #endif #if 0 /* Only used for testing purposes: */ netif_add(&ipaddr, &netmask, &gw, NULL, pcapif_init, tcpip_input); #endif #if LWIP_TCP tcpecho_init(); shell_init(); httpd_init(); #endif #if LWIP_UDP udpecho_init(); #endif /* sys_timeout(5000, tcp_debug_timeout, NULL);*/ }
/* This function initializes all network interfaces */ static void msvc_netif_init(void) { #if LWIP_IPV4 && USE_ETHERNET ip4_addr_t ipaddr, netmask, gw; #endif /* LWIP_IPV4 && USE_ETHERNET */ #if USE_SLIPIF u8_t num_slip1 = 0; #if LWIP_IPV4 ip4_addr_t ipaddr_slip1, netmask_slip1, gw_slip1; #endif #if USE_SLIPIF > 1 u8_t num_slip2 = 1; #if LWIP_IPV4 ip4_addr_t ipaddr_slip2, netmask_slip2, gw_slip2; #endif #endif /* USE_SLIPIF > 1 */ #endif /* USE_SLIPIF */ #if USE_DHCP || USE_AUTOIP err_t err; #endif #if USE_PPP const char *username = NULL, *password = NULL; #ifdef PPP_USERNAME username = PPP_USERNAME; #endif #ifdef PPP_PASSWORD password = PPP_PASSWORD; #endif printf("ppp_connect: COM%d\n", (int)sio_idx); #if PPPOS_SUPPORT ppp_sio = sio_open(sio_idx); if (ppp_sio == NULL) { printf("sio_open error\n"); } else { ppp = pppos_create(&ppp_netif, ppp_output_cb, pppLinkStatusCallback, NULL); if (ppp == NULL) { printf("pppos_create error\n"); } else { ppp_set_auth(ppp, PPPAUTHTYPE_ANY, username, password); ppp_connect(ppp, 0); } } #endif /* PPPOS_SUPPORT */ #endif /* USE_PPP */ #if USE_ETHERNET #if LWIP_IPV4 #define NETIF_ADDRS &ipaddr, &netmask, &gw, ip4_addr_set_zero(&gw); ip4_addr_set_zero(&ipaddr); ip4_addr_set_zero(&netmask); #if USE_ETHERNET_TCPIP #if USE_DHCP printf("Starting lwIP, local interface IP is dhcp-enabled\n"); #elif USE_AUTOIP printf("Starting lwIP, local interface IP is autoip-enabled\n"); #else /* USE_DHCP */ LWIP_PORT_INIT_GW(&gw); LWIP_PORT_INIT_IPADDR(&ipaddr); LWIP_PORT_INIT_NETMASK(&netmask); printf("Starting lwIP, local interface IP is %s\n", ip4addr_ntoa(&ipaddr)); #endif /* USE_DHCP */ #endif /* USE_ETHERNET_TCPIP */ #else /* LWIP_IPV4 */ #define NETIF_ADDRS printf("Starting lwIP, IPv4 disable\n"); #endif /* LWIP_IPV4 */ #if NO_SYS netif_set_default(netif_add(&netif, NETIF_ADDRS NULL, pcapif_init, netif_input)); #else /* NO_SYS */ netif_set_default(netif_add(&netif, NETIF_ADDRS NULL, pcapif_init, tcpip_input)); #endif /* NO_SYS */ #if LWIP_IPV6 netif_create_ip6_linklocal_address(&netif, 1); printf("ip6 linklocal address: "); ip6_addr_debug_print(0xFFFFFFFF & ~LWIP_DBG_HALT, netif_ip6_addr(&netif, 0)); printf("\n"); #endif /* LWIP_IPV6 */ #if LWIP_NETIF_STATUS_CALLBACK netif_set_status_callback(&netif, status_callback); #endif /* LWIP_NETIF_STATUS_CALLBACK */ #if LWIP_NETIF_LINK_CALLBACK netif_set_link_callback(&netif, link_callback); #endif /* LWIP_NETIF_LINK_CALLBACK */ #if USE_ETHERNET_TCPIP #if LWIP_AUTOIP autoip_set_struct(&netif, &netif_autoip); #endif /* LWIP_AUTOIP */ #if LWIP_DHCP dhcp_set_struct(&netif, &netif_dhcp); #endif /* LWIP_DHCP */ netif_set_up(&netif); #if USE_DHCP err = dhcp_start(&netif); LWIP_ASSERT("dhcp_start failed", err == ERR_OK); #elif USE_AUTOIP err = autoip_start(&netif); LWIP_ASSERT("autoip_start failed", err == ERR_OK); #endif /* USE_DHCP */ #else /* USE_ETHERNET_TCPIP */ /* Use ethernet for PPPoE only */ netif.flags &= ~(NETIF_FLAG_ETHARP | NETIF_FLAG_IGMP); /* no ARP */ netif.flags |= NETIF_FLAG_ETHERNET; /* but pure ethernet */ #endif /* USE_ETHERNET_TCPIP */ #if USE_PPP && PPPOE_SUPPORT /* start PPPoE after ethernet netif is added! */ ppp = pppoe_create(&ppp_netif, &netif, NULL, NULL, pppLinkStatusCallback, NULL); if (ppp == NULL) { printf("pppos_create error\n"); } else { ppp_set_auth(ppp, PPPAUTHTYPE_ANY, username, password); ppp_connect(ppp, 0); } #endif /* USE_PPP && PPPOE_SUPPORT */ #endif /* USE_ETHERNET */ #if USE_SLIPIF #if LWIP_IPV4 #define SLIP1_ADDRS &ipaddr_slip1, &netmask_slip1, &gw_slip1, LWIP_PORT_INIT_SLIP1_IPADDR(&ipaddr_slip1); LWIP_PORT_INIT_SLIP1_GW(&gw_slip1); LWIP_PORT_INIT_SLIP1_NETMASK(&netmask_slip1); printf("Starting lwIP slipif, local interface IP is %s\n", ip4addr_ntoa(&ipaddr_slip1)); #else #define SLIP1_ADDRS printf("Starting lwIP slipif\n"); #endif #if defined(SIO_USE_COMPORT) && SIO_USE_COMPORT num_slip1++; /* COM ports cannot be 0-based */ #endif netif_add(&slipif1, SLIP1_ADDRS &num_slip1, slipif_init, ip_input); #if !USE_ETHERNET netif_set_default(&slipif1); #endif /* !USE_ETHERNET */ #if LWIP_IPV6 netif_create_ip6_linklocal_address(&slipif1, 1); printf("SLIP ip6 linklocal address: "); ip6_addr_debug_print(0xFFFFFFFF & ~LWIP_DBG_HALT, netif_ip6_addr(&slipif1, 0)); printf("\n"); #endif /* LWIP_IPV6 */ #if LWIP_NETIF_STATUS_CALLBACK netif_set_status_callback(&slipif1, status_callback); #endif /* LWIP_NETIF_STATUS_CALLBACK */ #if LWIP_NETIF_LINK_CALLBACK netif_set_link_callback(&slipif1, link_callback); #endif /* LWIP_NETIF_LINK_CALLBACK */ netif_set_up(&slipif1); #if USE_SLIPIF > 1 #if LWIP_IPV4 #define SLIP2_ADDRS &ipaddr_slip2, &netmask_slip2, &gw_slip2, LWIP_PORT_INIT_SLIP2_IPADDR(&ipaddr_slip2); LWIP_PORT_INIT_SLIP2_GW(&gw_slip2); LWIP_PORT_INIT_SLIP2_NETMASK(&netmask_slip2); printf("Starting lwIP SLIP if #2, local interface IP is %s\n", ip4addr_ntoa(&ipaddr_slip2)); #else #define SLIP2_ADDRS printf("Starting lwIP SLIP if #2\n"); #endif #if defined(SIO_USE_COMPORT) && SIO_USE_COMPORT num_slip2++; /* COM ports cannot be 0-based */ #endif netif_add(&slipif2, SLIP2_ADDRS &num_slip2, slipif_init, ip_input); #if LWIP_IPV6 netif_create_ip6_linklocal_address(&slipif1, 1); printf("SLIP2 ip6 linklocal address: "); ip6_addr_debug_print(0xFFFFFFFF & ~LWIP_DBG_HALT, netif_ip6_addr(&slipif2, 0)); printf("\n"); #endif /* LWIP_IPV6 */ #if LWIP_NETIF_STATUS_CALLBACK netif_set_status_callback(&slipif2, status_callback); #endif /* LWIP_NETIF_STATUS_CALLBACK */ #if LWIP_NETIF_LINK_CALLBACK netif_set_link_callback(&slipif2, link_callback); #endif /* LWIP_NETIF_LINK_CALLBACK */ netif_set_up(&slipif2); #endif /* USE_SLIPIF > 1*/ #endif /* USE_SLIPIF */ }
/** * Start the PPP connection */ static void gprs_do_connect(gprs_t * gprs) { UNTIMEOUT(); gprs_set_state(gprs,GPRS_STATE_CONNECTING); ppp_connect(gprs->pcb,0); }