Lines Matching refs:pcb
218 void ppp_set_auth(ppp_pcb *pcb, u8_t authtype, const char *user, const char *passwd) {
219 LWIP_ASSERT("pcb->phase == PPP_PHASE_DEAD", pcb->phase == PPP_PHASE_DEAD);
222 pcb->settings.refuse_pap = !(authtype & PPPAUTHTYPE_PAP);
225 pcb->settings.refuse_chap = !(authtype & PPPAUTHTYPE_CHAP);
227 pcb->settings.refuse_mschap = !(authtype & PPPAUTHTYPE_MSCHAP);
228 pcb->settings.refuse_mschap_v2 = !(authtype & PPPAUTHTYPE_MSCHAP_V2);
232 pcb->settings.refuse_eap = !(authtype & PPPAUTHTYPE_EAP);
234 pcb->settings.user = user;
235 pcb->settings.passwd = passwd;
241 void ppp_set_mppe(ppp_pcb *pcb, u8_t flags) {
242 LWIP_ASSERT("pcb->phase == PPP_PHASE_DEAD", pcb->phase == PPP_PHASE_DEAD);
245 pcb->settings.require_mppe = 0;
249 pcb->settings.require_mppe = 1;
250 pcb->settings.refuse_mppe_stateful = !(flags & PPP_MPPE_ALLOW_STATEFUL);
251 pcb->settings.refuse_mppe_40 = !!(flags & PPP_MPPE_REFUSE_40);
252 pcb->settings.refuse_mppe_128 = !!(flags & PPP_MPPE_REFUSE_128);
257 void ppp_set_notify_phase_callback(ppp_pcb *pcb, ppp_notify_phase_cb_fn notify_phase_cb) {
258 pcb->notify_phase_cb = notify_phase_cb;
259 notify_phase_cb(pcb, pcb->phase, pcb->ctx_cb);
274 err_t ppp_connect(ppp_pcb *pcb, u16_t holdoff) {
276 if (pcb->phase != PPP_PHASE_DEAD) {
280 PPPDEBUG(LOG_DEBUG, ("ppp_connect[%d]: holdoff=%d\n", pcb->netif->num, holdoff));
285 ppp_do_connect(pcb);
289 new_phase(pcb, PPP_PHASE_HOLDOFF);
290 sys_timeout((u32_t)(holdoff*1000), ppp_do_connect, pcb);
303 err_t ppp_listen(ppp_pcb *pcb) {
305 if (pcb->phase != PPP_PHASE_DEAD) {
309 PPPDEBUG(LOG_DEBUG, ("ppp_listen[%d]\n", pcb->netif->num));
313 if (pcb->link_cb->listen) {
314 new_phase(pcb, PPP_PHASE_INITIALIZE);
315 pcb->link_cb->listen(pcb, pcb->link_ctx_cb);
334 ppp_close(ppp_pcb *pcb, u8_t nocarrier)
338 pcb->err_code = PPPERR_USER;
341 if (pcb->phase == PPP_PHASE_HOLDOFF) {
342 sys_untimeout(ppp_do_connect, pcb);
343 new_phase(pcb, PPP_PHASE_DEAD);
347 if (pcb->phase == PPP_PHASE_DEAD) {
348 pcb->link_status_cb(pcb, pcb->err_code, pcb->ctx_cb);
353 if (pcb->phase >= PPP_PHASE_TERMINATE) {
358 if (pcb->phase < PPP_PHASE_ESTABLISH) {
359 new_phase(pcb, PPP_PHASE_DISCONNECT);
360 ppp_link_terminated(pcb);
371 if (nocarrier && pcb->phase == PPP_PHASE_RUNNING) {
372 PPPDEBUG(LOG_DEBUG, ("ppp_close[%d]: carrier lost -> lcp_lowerdown\n", pcb->netif->num));
373 lcp_lowerdown(pcb);
375 link_terminated(pcb);
380 PPPDEBUG(LOG_DEBUG, ("ppp_close[%d]: kill_link -> lcp_close\n", pcb->netif->num));
382 lcp_close(pcb, "User request");
396 err_t ppp_free(ppp_pcb *pcb) {
399 if (pcb->phase != PPP_PHASE_DEAD) {
403 PPPDEBUG(LOG_DEBUG, ("ppp_free[%d]\n", pcb->netif->num));
405 netif_remove(pcb->netif);
407 err = pcb->link_cb->free(pcb, pcb->link_ctx_cb);
409 LWIP_MEMPOOL_FREE(PPP_PCB, pcb);
416 ppp_ioctl(ppp_pcb *pcb, u8_t cmd, void *arg)
419 if (pcb == NULL) {
430 || pcb->if4_up
433 || pcb->if6_up
442 *(int *)arg = (int)(pcb->err_code);
459 ppp_pcb *pcb = (ppp_pcb*)arg;
461 LWIP_ASSERT("pcb->phase == PPP_PHASE_DEAD || pcb->phase == PPP_PHASE_HOLDOFF", pcb->phase == PPP_PHASE_DEAD || pcb->phase == PPP_PHASE_HOLDOFF);
463 new_phase(pcb, PPP_PHASE_INITIALIZE);
464 pcb->link_cb->connect(pcb, pcb->link_ctx_cb);
508 ppp_pcb *pcb = (ppp_pcb*)netif->state;
515 || (protocol == PPP_IP && !pcb->if4_up)
518 || (protocol == PPP_IPV6 && !pcb->if6_up)
521 PPPDEBUG(LOG_ERR, ("ppp_netif_output[%d]: link not up\n", pcb->netif->num));
527 if (pcb->settings.require_mppe && pcb->ccp_transmit_method != CI_MPPE) {
528 PPPDEBUG(LOG_ERR, ("ppp_netif_output[%d]: MPPE required, not up\n", pcb->netif->num));
538 if (protocol == PPP_IP && pcb->vj_enabled) {
539 switch (vj_compress_tcp(&pcb->vj_comp, &pb)) {
557 PPPDEBUG(LOG_WARNING, ("ppp_netif_output[%d]: bad IP packet\n", pcb->netif->num));
560 MIB2_STATS_NETIF_INC(pcb->netif, ifoutdiscards);
567 switch (pcb->ccp_transmit_method) {
572 if ((err = mppe_compress(pcb, &pcb->mppe_comp, &pb, protocol)) != ERR_OK) {
589 PPPDEBUG(LOG_ERR, ("ppp_netif_output[%d]: bad CCP transmit method\n", pcb->netif->num));
594 err = pcb->link_cb->netif_output(pcb, pcb->link_ctx_cb, pb, protocol);
650 ppp_pcb *pcb;
660 pcb = (ppp_pcb*)LWIP_MEMPOOL_ALLOC(PPP_PCB);
661 if (pcb == NULL) {
665 memset(pcb, 0, sizeof(ppp_pcb));
669 pcb->settings.pap_timeout_time = UPAP_DEFTIMEOUT;
670 pcb->settings.pap_max_transmits = UPAP_DEFTRANSMITS;
672 pcb->settings.pap_req_timeout = UPAP_DEFREQTIME;
677 pcb->settings.chap_timeout_time = CHAP_DEFTIMEOUT;
678 pcb->settings.chap_max_transmits = CHAP_DEFTRANSMITS;
680 pcb->settings.chap_rechallenge_time = CHAP_DEFRECHALLENGETIME;
685 pcb->settings.eap_req_time = EAP_DEFREQTIME;
686 pcb->settings.eap_allow_req = EAP_DEFALLOWREQ;
688 pcb->settings.eap_timeout_time = EAP_DEFTIMEOUT;
689 pcb->settings.eap_max_transmits = EAP_DEFTRANSMITS;
693 pcb->settings.lcp_loopbackfail = LCP_DEFLOOPBACKFAIL;
694 pcb->settings.lcp_echo_interval = LCP_ECHOINTERVAL;
695 pcb->settings.lcp_echo_fails = LCP_MAXECHOFAILS;
697 pcb->settings.fsm_timeout_time = FSM_DEFTIMEOUT;
698 pcb->settings.fsm_max_conf_req_transmits = FSM_DEFMAXCONFREQS;
699 pcb->settings.fsm_max_term_transmits = FSM_DEFMAXTERMREQS;
700 pcb->settings.fsm_max_nak_loops = FSM_DEFMAXNAKLOOPS;
702 pcb->netif = pppif;
704 if (!netif_add(pcb->netif,
708 (void *)pcb, ppp_netif_init_cb, NULL)) {
709 LWIP_MEMPOOL_FREE(PPP_PCB, pcb);
714 pcb->link_cb = callbacks;
715 pcb->link_ctx_cb = link_ctx_cb;
716 pcb->link_status_cb = link_status_cb;
717 pcb->ctx_cb = ctx_cb;
723 (*protp->init)(pcb);
726 new_phase(pcb, PPP_PHASE_DEAD);
727 return pcb;
731 void ppp_start(ppp_pcb *pcb) {
732 PPPDEBUG(LOG_DEBUG, ("ppp_start[%d]\n", pcb->netif->num));
739 pcb->mppe_keys_set = 0;
740 memset(&pcb->mppe_comp, 0, sizeof(pcb->mppe_comp));
741 memset(&pcb->mppe_decomp, 0, sizeof(pcb->mppe_decomp));
744 vj_compress_init(&pcb->vj_comp);
748 new_phase(pcb, PPP_PHASE_ESTABLISH);
749 lcp_open(pcb);
750 lcp_lowerup(pcb);
751 PPPDEBUG(LOG_DEBUG, ("ppp_start[%d]: finished\n", pcb->netif->num));
755 void ppp_link_failed(ppp_pcb *pcb) {
756 PPPDEBUG(LOG_DEBUG, ("ppp_link_failed[%d]\n", pcb->netif->num));
757 new_phase(pcb, PPP_PHASE_DEAD);
758 pcb->err_code = PPPERR_OPEN;
759 pcb->link_status_cb(pcb, pcb->err_code, pcb->ctx_cb);
763 void ppp_link_end(ppp_pcb *pcb) {
764 PPPDEBUG(LOG_DEBUG, ("ppp_link_end[%d]\n", pcb->netif->num));
765 new_phase(pcb, PPP_PHASE_DEAD);
766 if (pcb->err_code == PPPERR_NONE) {
767 pcb->err_code = PPPERR_CONNECT;
769 pcb->link_status_cb(pcb, pcb->err_code, pcb->ctx_cb);
776 void ppp_input(ppp_pcb *pcb, struct pbuf *pb) {
785 PPPDEBUG(LOG_ERR, ("ppp_input[%d]: packet too short\n", pcb->netif->num));
791 ppp_dump_packet(pcb, "rcvd", (unsigned char *)pb->payload, pb->len);
797 MIB2_STATS_NETIF_INC(pcb->netif, ifinucastpkts);
798 MIB2_STATS_NETIF_ADD(pcb->netif, ifinoctets, pb->tot_len);
803 if (protocol != PPP_LCP && pcb->lcp_fsm.state != PPP_FSM_OPENED) {
812 if (pcb->phase <= PPP_PHASE_AUTHENTICATE
827 ppp_dbglog("discarding proto 0x%x in phase %d", protocol, pcb->phase);
839 if (pcb->settings.require_mppe && protocol != PPP_COMP && protocol < 0x8000) {
840 PPPDEBUG(LOG_ERR, ("ppp_input[%d]: MPPE required, received unencrypted data!\n", pcb->netif->num));
848 switch (pcb->ccp_receive_method) {
851 if (mppe_decompress(pcb, &pcb->mppe_decomp, &pb) != ERR_OK) {
857 PPPDEBUG(LOG_ERR, ("ppp_input[%d]: bad CCP receive method\n", pcb->netif->num));
882 PPPDEBUG(LOG_INFO, ("ppp_input[%d]: ip in pbuf len=%d\n", pcb->netif->num, pb->tot_len));
883 ip4_input(pb, pcb->netif);
889 PPPDEBUG(LOG_INFO, ("ppp_input[%d]: ip6 in pbuf len=%d\n", pcb->netif->num, pb->tot_len));
890 ip6_input(pb, pcb->netif);
900 PPPDEBUG(LOG_INFO, ("ppp_input[%d]: vj_comp in pbuf len=%d\n", pcb->netif->num, pb->tot_len));
901 if (pcb->vj_enabled && vj_uncompress_tcp(&pb, &pcb->vj_comp) >= 0) {
902 ip4_input(pb, pcb->netif);
906 PPPDEBUG(LOG_WARNING, ("ppp_input[%d]: Dropping VJ compressed\n", pcb->netif->num));
914 PPPDEBUG(LOG_INFO, ("ppp_input[%d]: vj_un in pbuf len=%d\n", pcb->netif->num, pb->tot_len));
915 if (pcb->vj_enabled && vj_uncompress_uncomp(pb, &pcb->vj_comp) >= 0) {
916 ip4_input(pb, pcb->netif);
920 PPPDEBUG(LOG_WARNING, ("ppp_input[%d]: Dropping VJ uncompressed\n", pcb->netif->num));
934 (*protp->input)(pcb, (u8_t*)pb->payload, pb->len);
952 (*protp->datainput)(pcb, pb->payload, pb->len);
968 PPPDEBUG(LOG_WARNING, ("ppp_input[%d]: Dropping (pbuf_add_header failed)\n", pcb->netif->num));
971 lcp_sprotrej(pcb, (u8_t*)pb->payload, pb->len);
978 MIB2_STATS_NETIF_INC(pcb->netif, ifindiscards);
992 err_t ppp_write(ppp_pcb *pcb, struct pbuf *p) {
994 ppp_dump_packet(pcb, "sent", (unsigned char *)p->payload+2, p->len-2);
996 return pcb->link_cb->write(pcb, pcb->link_ctx_cb, p);
999 void ppp_link_terminated(ppp_pcb *pcb) {
1000 PPPDEBUG(LOG_DEBUG, ("ppp_link_terminated[%d]\n", pcb->netif->num));
1001 pcb->link_cb->disconnect(pcb, pcb->link_ctx_cb);
1002 PPPDEBUG(LOG_DEBUG, ("ppp_link_terminated[%d]: finished.\n", pcb->netif->num));
1014 void new_phase(ppp_pcb *pcb, int p) {
1015 pcb->phase = p;
1016 PPPDEBUG(LOG_DEBUG, ("ppp phase changed[%d]: phase=%d\n", pcb->netif->num, pcb->phase));
1018 if (pcb->notify_phase_cb != NULL) {
1019 pcb->notify_phase_cb(pcb, p, pcb->ctx_cb);
1028 int ppp_send_config(ppp_pcb *pcb, int mtu, u32_t accm, int pcomp, int accomp) {
1030 /* pcb->mtu = mtu; -- set correctly with netif_set_mtu */
1032 if (pcb->link_cb->send_config) {
1033 pcb->link_cb->send_config(pcb, pcb->link_ctx_cb, accm, pcomp, accomp);
1036 PPPDEBUG(LOG_INFO, ("ppp_send_config[%d]\n", pcb->netif->num) );
1044 int ppp_recv_config(ppp_pcb *pcb, int mru, u32_t accm, int pcomp, int accomp) {
1047 if (pcb->link_cb->recv_config) {
1048 pcb->link_cb->recv_config(pcb, pcb->link_ctx_cb, accm, pcomp, accomp);
1051 PPPDEBUG(LOG_INFO, ("ppp_recv_config[%d]\n", pcb->netif->num));
1059 int sifaddr(ppp_pcb *pcb, u32_t our_adr, u32_t his_adr, u32_t netmask) {
1065 netif_set_addr(pcb->netif, &ip, &nm, &gw);
1074 int cifaddr(ppp_pcb *pcb, u32_t our_adr, u32_t his_adr) {
1078 netif_set_addr(pcb->netif, IP4_ADDR_ANY4, IP4_ADDR_BROADCAST, IP4_ADDR_ANY4);
1088 int sifproxyarp(ppp_pcb *pcb, u32_t his_adr) {
1089 LWIP_UNUSED_ARG(pcb);
1099 int cifproxyarp(ppp_pcb *pcb, u32_t his_adr) {
1100 LWIP_UNUSED_ARG(pcb);
1110 int sdns(ppp_pcb *pcb, u32_t ns1, u32_t ns2) {
1112 LWIP_UNUSED_ARG(pcb);
1125 int cdns(ppp_pcb *pcb, u32_t ns1, u32_t ns2) {
1128 LWIP_UNUSED_ARG(pcb);
1149 int sifvjcomp(ppp_pcb *pcb, int vjcomp, int cidcomp, int maxcid) {
1150 pcb->vj_enabled = vjcomp;
1151 pcb->vj_comp.compressSlot = cidcomp;
1152 pcb->vj_comp.maxSlotIndex = maxcid;
1154 pcb->netif->num, vjcomp, cidcomp, maxcid));
1162 int sifup(ppp_pcb *pcb) {
1163 pcb->if4_up = 1;
1164 pcb->err_code = PPPERR_NONE;
1165 netif_set_link_up(pcb->netif);
1167 PPPDEBUG(LOG_DEBUG, ("sifup[%d]: err_code=%d\n", pcb->netif->num, pcb->err_code));
1168 pcb->link_status_cb(pcb, pcb->err_code, pcb->ctx_cb);
1177 int sifdown(ppp_pcb *pcb) {
1179 pcb->if4_up = 0;
1184 && !pcb->if6_up
1188 netif_set_link_down(pcb->netif);
1190 PPPDEBUG(LOG_DEBUG, ("sifdown[%d]: err_code=%d\n", pcb->netif->num, pcb->err_code));
1242 int sif6addr(ppp_pcb *pcb, eui64_t our_eui64, eui64_t his_eui64) {
1247 netif_ip6_addr_set(pcb->netif, 0, &ip6);
1248 netif_ip6_addr_set_state(pcb->netif, 0, IP6_ADDR_PREFERRED);
1257 int cif6addr(ppp_pcb *pcb, eui64_t our_eui64, eui64_t his_eui64) {
1261 netif_ip6_addr_set_state(pcb->netif, 0, IP6_ADDR_INVALID);
1262 netif_ip6_addr_set(pcb->netif, 0, IP6_ADDR_ANY6);
1269 int sif6up(ppp_pcb *pcb) {
1271 pcb->if6_up = 1;
1272 pcb->err_code = PPPERR_NONE;
1273 netif_set_link_up(pcb->netif);
1275 PPPDEBUG(LOG_DEBUG, ("sif6up[%d]: err_code=%d\n", pcb->netif->num, pcb->err_code));
1276 pcb->link_status_cb(pcb, pcb->err_code, pcb->ctx_cb);
1285 int sif6down(ppp_pcb *pcb) {
1287 pcb->if6_up = 0;
1292 && !pcb->if4_up
1296 netif_set_link_down(pcb->netif);
1298 PPPDEBUG(LOG_DEBUG, ("sif6down[%d]: err_code=%d\n", pcb->netif->num, pcb->err_code));
1307 int sifnpmode(ppp_pcb *pcb, int proto, enum NPmode mode) {
1308 LWIP_UNUSED_ARG(pcb);
1318 void netif_set_mtu(ppp_pcb *pcb, int mtu) {
1320 pcb->netif->mtu = mtu;
1321 PPPDEBUG(LOG_INFO, ("netif_set_mtu[%d]: mtu=%d\n", pcb->netif->num, mtu));
1327 int netif_get_mtu(ppp_pcb *pcb) {
1329 return pcb->netif->mtu;
1338 ccp_test(ppp_pcb *pcb, u_char *opt_ptr, int opt_len, int for_transmit)
1340 LWIP_UNUSED_ARG(pcb);
1352 ccp_set(ppp_pcb *pcb, u8_t isopen, u8_t isup, u8_t receive_method, u8_t transmit_method)
1356 pcb->ccp_receive_method = receive_method;
1357 pcb->ccp_transmit_method = transmit_method;
1359 pcb->netif->num, isopen, isup, receive_method, transmit_method));
1363 ccp_reset_comp(ppp_pcb *pcb)
1365 switch (pcb->ccp_transmit_method) {
1368 mppe_comp_reset(pcb, &pcb->mppe_comp);
1377 ccp_reset_decomp(ppp_pcb *pcb)
1379 switch (pcb->ccp_receive_method) {
1382 mppe_decomp_reset(pcb, &pcb->mppe_decomp);
1397 ccp_fatal_error(ppp_pcb *pcb)
1399 LWIP_UNUSED_ARG(pcb);
1410 int get_idle_time(ppp_pcb *pcb, struct ppp_idle *ip) {
1412 LWIP_UNUSED_ARG(pcb);