Lines Matching refs:sp

203 	void	(*Up)(struct sppp *sp);
204 void (*Down)(struct sppp *sp);
205 void (*Open)(struct sppp *sp);
206 void (*Close)(struct sppp *sp);
207 void (*TO)(void *sp);
208 int (*RCR)(struct sppp *sp, struct lcp_header *h, int len);
209 void (*RCN_rej)(struct sppp *sp, struct lcp_header *h, int len);
210 void (*RCN_nak)(struct sppp *sp, struct lcp_header *h, int len);
212 void (*tlu)(struct sppp *sp);
213 void (*tld)(struct sppp *sp);
214 void (*tls)(struct sppp *sp);
215 void (*tlf)(struct sppp *sp);
216 void (*scr)(struct sppp *sp);
227 struct ifnet *ifp = &sp->pp_if; \
233 void sppp_cp_input(const struct cp *cp, struct sppp *sp,
235 void sppp_cp_send(struct sppp *sp, u_short proto, u_char type,
237 void sppp_cp_change_state(const struct cp *cp, struct sppp *sp,
240 struct sppp *sp, unsigned int type, u_int id,
243 void sppp_up_event(const struct cp *cp, struct sppp *sp);
244 void sppp_down_event(const struct cp *cp, struct sppp *sp);
245 void sppp_open_event(const struct cp *cp, struct sppp *sp);
246 void sppp_close_event(const struct cp *cp, struct sppp *sp);
247 void sppp_increasing_timeout(const struct cp *cp, struct sppp *sp);
248 void sppp_to_event(const struct cp *cp, struct sppp *sp);
250 void sppp_null(struct sppp *sp);
252 void sppp_lcp_init(struct sppp *sp);
253 void sppp_lcp_up(struct sppp *sp);
254 void sppp_lcp_down(struct sppp *sp);
255 void sppp_lcp_open(struct sppp *sp);
256 void sppp_lcp_close(struct sppp *sp);
257 void sppp_lcp_TO(void *sp);
258 int sppp_lcp_RCR(struct sppp *sp, struct lcp_header *h, int len);
259 void sppp_lcp_RCN_rej(struct sppp *sp, struct lcp_header *h, int len);
260 void sppp_lcp_RCN_nak(struct sppp *sp, struct lcp_header *h, int len);
261 void sppp_lcp_tlu(struct sppp *sp);
262 void sppp_lcp_tld(struct sppp *sp);
263 void sppp_lcp_tls(struct sppp *sp);
264 void sppp_lcp_tlf(struct sppp *sp);
265 void sppp_lcp_scr(struct sppp *sp);
266 void sppp_lcp_check_and_close(struct sppp *sp);
267 int sppp_ncp_check(struct sppp *sp);
269 void sppp_ipcp_init(struct sppp *sp);
270 void sppp_ipcp_destroy(struct sppp *sp);
271 void sppp_ipcp_up(struct sppp *sp);
272 void sppp_ipcp_down(struct sppp *sp);
273 void sppp_ipcp_open(struct sppp *sp);
274 void sppp_ipcp_close(struct sppp *sp);
275 void sppp_ipcp_TO(void *sp);
276 int sppp_ipcp_RCR(struct sppp *sp, struct lcp_header *h, int len);
277 void sppp_ipcp_RCN_rej(struct sppp *sp, struct lcp_header *h, int len);
278 void sppp_ipcp_RCN_nak(struct sppp *sp, struct lcp_header *h, int len);
279 void sppp_ipcp_tlu(struct sppp *sp);
280 void sppp_ipcp_tld(struct sppp *sp);
281 void sppp_ipcp_tls(struct sppp *sp);
282 void sppp_ipcp_tlf(struct sppp *sp);
283 void sppp_ipcp_scr(struct sppp *sp);
285 void sppp_ipv6cp_init(struct sppp *sp);
286 void sppp_ipv6cp_destroy(struct sppp *sp);
287 void sppp_ipv6cp_up(struct sppp *sp);
288 void sppp_ipv6cp_down(struct sppp *sp);
289 void sppp_ipv6cp_open(struct sppp *sp);
290 void sppp_ipv6cp_close(struct sppp *sp);
291 void sppp_ipv6cp_TO(void *sp);
292 int sppp_ipv6cp_RCR(struct sppp *sp, struct lcp_header *h, int len);
293 void sppp_ipv6cp_RCN_rej(struct sppp *sp, struct lcp_header *h, int len);
294 void sppp_ipv6cp_RCN_nak(struct sppp *sp, struct lcp_header *h, int len);
295 void sppp_ipv6cp_tlu(struct sppp *sp);
296 void sppp_ipv6cp_tld(struct sppp *sp);
297 void sppp_ipv6cp_tls(struct sppp *sp);
298 void sppp_ipv6cp_tlf(struct sppp *sp);
299 void sppp_ipv6cp_scr(struct sppp *sp);
301 void sppp_get_ip6_addrs(struct sppp *sp, struct in6_addr *src,
303 void sppp_set_ip6_addr(struct sppp *sp, const struct in6_addr *src, const struct in6_addr *dst);
304 void sppp_update_ip6_addr(void *sp);
305 void sppp_suggest_ip6_addr(struct sppp *sp, struct in6_addr *suggest);
307 void sppp_pap_input(struct sppp *sp, struct mbuf *m);
308 void sppp_pap_init(struct sppp *sp);
309 void sppp_pap_open(struct sppp *sp);
310 void sppp_pap_close(struct sppp *sp);
311 void sppp_pap_TO(void *sp);
312 void sppp_pap_my_TO(void *sp);
313 void sppp_pap_tlu(struct sppp *sp);
314 void sppp_pap_tld(struct sppp *sp);
315 void sppp_pap_scr(struct sppp *sp);
317 void sppp_chap_input(struct sppp *sp, struct mbuf *m);
318 void sppp_chap_init(struct sppp *sp);
319 void sppp_chap_open(struct sppp *sp);
320 void sppp_chap_close(struct sppp *sp);
321 void sppp_chap_TO(void *sp);
322 void sppp_chap_tlu(struct sppp *sp);
323 void sppp_chap_tld(struct sppp *sp);
324 void sppp_chap_scr(struct sppp *sp);
334 int sppp_get_params(struct sppp *sp, struct ifreq *data);
335 int sppp_set_params(struct sppp *sp, struct ifreq *data);
336 void sppp_get_ip_addrs(struct sppp *sp, u_int32_t *src, u_int32_t *dst,
339 void sppp_phase_network(struct sppp *sp);
346 void sppp_set_phase(struct sppp *sp);
421 struct sppp *sp = (struct sppp *)ifp; in sppp_proto_up() local
426 if (sp->state[IDX_IPCP] == STATE_OPENED) in sppp_proto_up()
431 if (sp->state[IDX_IPV6CP] == STATE_OPENED) in sppp_proto_up()
449 struct sppp *sp = (struct sppp *)ifp; in sppp_input() local
457 ifp->if_ibytes += m->m_pkthdr.len + sp->pp_framebytes; in sppp_input()
459 sp->pp_last_receive = tv.tv_sec; in sppp_input()
502 if (sp->state[IDX_LCP] == STATE_OPENED) in sppp_input()
503 sppp_cp_send (sp, PPP_LCP, PROTO_REJ, in sppp_input()
504 ++sp->pp_seq, 2, &ht.protocol); in sppp_input()
514 sppp_cp_input(&lcp, sp, m); in sppp_input()
518 if (sp->pp_phase >= PHASE_AUTHENTICATE) in sppp_input()
519 sppp_pap_input(sp, m); in sppp_input()
523 if (sp->pp_phase >= PHASE_AUTHENTICATE) in sppp_input()
524 sppp_chap_input(sp, m); in sppp_input()
528 if (sp->pp_phase == PHASE_NETWORK) in sppp_input()
529 sppp_cp_input(&ipcp, sp, m); in sppp_input()
533 if (sp->state[IDX_IPCP] == STATE_OPENED) { in sppp_input()
534 sp->pp_last_activity = tv.tv_sec; in sppp_input()
543 if (sp->pp_phase == PHASE_NETWORK) in sppp_input()
544 sppp_cp_input(&ipv6cp, sp, m); in sppp_input()
548 if (sp->state[IDX_IPV6CP] == STATE_OPENED) { in sppp_input()
549 sp->pp_last_activity = tv.tv_sec; in sppp_input()
580 struct sppp *sp = (struct sppp*) ifp; in sppp_output() local
597 sp->pp_last_activity = tv.tv_sec; in sppp_output()
613 lcp.Open(sp); in sppp_output()
658 if (sp->state[IDX_IPCP] != STATE_OPENED) in sppp_output()
673 if (sp->state[IDX_IPV6CP] != STATE_OPENED) in sppp_output()
712 ifp->if_obytes += sp->pp_framebytes; in sppp_output()
721 struct sppp *sp = (struct sppp*) ifp; in sppp_attach() local
731 sp->pp_next = spppq; in sppp_attach()
732 spppq = sp; in sppp_attach()
734 sp->pp_if.if_type = IFT_PPP; in sppp_attach()
735 sp->pp_if.if_output = sppp_output; in sppp_attach()
736 sp->pp_if.if_rtrequest = sppp_rtrequest; in sppp_attach()
737 ifq_init_maxlen(&sp->pp_if.if_snd, 50); in sppp_attach()
738 mq_init(&sp->pp_cpq, 50, IPL_NET); in sppp_attach()
739 sp->pp_loopcnt = 0; in sppp_attach()
740 sp->pp_alivecnt = 0; in sppp_attach()
741 sp->pp_last_activity = 0; in sppp_attach()
742 sp->pp_last_receive = 0; in sppp_attach()
743 sp->pp_seq = 0; in sppp_attach()
744 sp->pp_rseq = 0; in sppp_attach()
745 sp->pp_phase = PHASE_DEAD; in sppp_attach()
746 sp->pp_up = lcp.Up; in sppp_attach()
747 sp->pp_down = lcp.Down; in sppp_attach()
750 timeout_set(&sp->ch[i], (cps[i])->TO, (void *)sp); in sppp_attach()
751 timeout_set(&sp->pap_my_to_ch, sppp_pap_my_TO, (void *)sp); in sppp_attach()
753 sppp_lcp_init(sp); in sppp_attach()
754 sppp_ipcp_init(sp); in sppp_attach()
755 sppp_ipv6cp_init(sp); in sppp_attach()
756 sppp_pap_init(sp); in sppp_attach()
757 sppp_chap_init(sp); in sppp_attach()
763 struct sppp **q, *p, *sp = (struct sppp*) ifp; in sppp_detach() local
766 sppp_ipcp_destroy(sp); in sppp_detach()
767 sppp_ipv6cp_destroy(sp); in sppp_detach()
771 if (p == sp) { in sppp_detach()
781 UNTIMEOUT((cps[i])->TO, (void *)sp, sp->ch[i]); in sppp_detach()
782 UNTIMEOUT(sppp_pap_my_TO, (void *)sp, sp->pap_my_to_ch); in sppp_detach()
785 if (sp->myauth.name != NULL) in sppp_detach()
786 free(sp->myauth.name, M_DEVBUF, strlen(sp->myauth.name) + 1); in sppp_detach()
787 if (sp->myauth.secret != NULL) in sppp_detach()
788 free(sp->myauth.secret, M_DEVBUF, in sppp_detach()
789 strlen(sp->myauth.secret) + 1); in sppp_detach()
790 if (sp->hisauth.name != NULL) in sppp_detach()
791 free(sp->hisauth.name, M_DEVBUF, strlen(sp->hisauth.name) + 1); in sppp_detach()
792 if (sp->hisauth.secret != NULL) in sppp_detach()
793 free(sp->hisauth.secret, M_DEVBUF, in sppp_detach()
794 strlen(sp->hisauth.secret) + 1); in sppp_detach()
803 struct sppp *sp = (struct sppp*) ifp; in sppp_flush() local
805 ifq_purge(&sp->pp_if.if_snd); in sppp_flush()
806 mq_purge(&sp->pp_cpq); in sppp_flush()
815 struct sppp *sp = (struct sppp*) ifp; in sppp_isempty() local
819 empty = mq_empty(&sp->pp_cpq) && ifq_empty(&sp->pp_if.if_snd); in sppp_isempty()
830 struct sppp *sp = (struct sppp*) ifp; in sppp_dequeue() local
839 m = mq_dequeue(&sp->pp_cpq); in sppp_dequeue()
840 if (m == NULL && sppp_ncp_check(sp)) { in sppp_dequeue()
841 m = ifq_dequeue(&sp->pp_if.if_snd); in sppp_dequeue()
854 struct sppp *sp = (struct sppp*) ifp; in sppp_ioctl() local
880 lcp.Close(sp); in sppp_ioctl()
885 lcp.Open(sp); in sppp_ioctl()
894 (sp->lcp.their_mru > 0 && in sppp_ioctl()
895 ifr->ifr_mtu > sp->lcp.their_mru)) { in sppp_ioctl()
906 rv = sppp_get_params(sp, ifr); in sppp_ioctl()
912 rv = sppp_set_params(sp, ifr); in sppp_ioctl()
930 sppp_cp_send(struct sppp *sp, u_short proto, u_char type, in sppp_cp_send() argument
945 m->m_pkthdr.pf.prio = sp->pp_if.if_llprio; in sppp_cp_send()
966 len = m->m_pkthdr.len + sp->pp_framebytes; in sppp_cp_send()
967 if (mq_enqueue(&sp->pp_cpq, m) != 0) { in sppp_cp_send()
982 sppp_cp_input(const struct cp *cp, struct sppp *sp, struct mbuf *m) in sppp_cp_input() argument
1003 sppp_state_name(sp->state[cp->protoidx]), in sppp_cp_input()
1023 switch (sp->state[cp->protoidx]) { in sppp_cp_input()
1028 sppp_cp_send(sp, cp->proto, TERM_ACK, h->ident, in sppp_cp_input()
1032 rv = (cp->RCR)(sp, h, len); in sppp_cp_input()
1036 switch (sp->state[cp->protoidx]) { in sppp_cp_input()
1038 sppp_cp_change_state(cp, sp, rv? in sppp_cp_input()
1040 (cp->tld)(sp); in sppp_cp_input()
1041 (cp->scr)(sp); in sppp_cp_input()
1045 sppp_cp_change_state(cp, sp, rv? in sppp_cp_input()
1049 sp->rst_counter[cp->protoidx] = sp->lcp.max_configure; in sppp_cp_input()
1050 sppp_cp_change_state(cp, sp, rv? in sppp_cp_input()
1052 (cp->scr)(sp); in sppp_cp_input()
1056 sppp_cp_change_state(cp, sp, STATE_OPENED); in sppp_cp_input()
1061 (cp->tlu)(sp); in sppp_cp_input()
1063 sppp_cp_change_state(cp, sp, STATE_ACK_RCVD); in sppp_cp_input()
1074 if (h->ident != sp->confid[cp->protoidx]) { in sppp_cp_input()
1078 h->ident, sp->confid[cp->protoidx]); in sppp_cp_input()
1082 switch (sp->state[cp->protoidx]) { in sppp_cp_input()
1085 sppp_cp_send(sp, cp->proto, TERM_ACK, h->ident, 0, 0); in sppp_cp_input()
1091 sp->rst_counter[cp->protoidx] = sp->lcp.max_configure; in sppp_cp_input()
1092 sppp_cp_change_state(cp, sp, STATE_ACK_RCVD); in sppp_cp_input()
1095 sppp_cp_change_state(cp, sp, STATE_REQ_SENT); in sppp_cp_input()
1096 (cp->tld)(sp); in sppp_cp_input()
1097 (cp->scr)(sp); in sppp_cp_input()
1100 sppp_cp_change_state(cp, sp, STATE_REQ_SENT); in sppp_cp_input()
1101 (cp->scr)(sp); in sppp_cp_input()
1104 sp->rst_counter[cp->protoidx] = sp->lcp.max_configure; in sppp_cp_input()
1105 sppp_cp_change_state(cp, sp, STATE_OPENED); in sppp_cp_input()
1109 (cp->tlu)(sp); in sppp_cp_input()
1121 if (h->ident != sp->confid[cp->protoidx]) { in sppp_cp_input()
1125 h->ident, sp->confid[cp->protoidx]); in sppp_cp_input()
1130 (cp->RCN_nak)(sp, h, len); in sppp_cp_input()
1132 (cp->RCN_rej)(sp, h, len); in sppp_cp_input()
1134 switch (sp->state[cp->protoidx]) { in sppp_cp_input()
1137 sppp_cp_send(sp, cp->proto, TERM_ACK, h->ident, 0, 0); in sppp_cp_input()
1141 sp->rst_counter[cp->protoidx] = sp->lcp.max_configure; in sppp_cp_input()
1142 (cp->scr)(sp); in sppp_cp_input()
1145 sppp_cp_change_state(cp, sp, STATE_ACK_SENT); in sppp_cp_input()
1146 (cp->tld)(sp); in sppp_cp_input()
1147 (cp->scr)(sp); in sppp_cp_input()
1150 sppp_cp_change_state(cp, sp, STATE_ACK_SENT); in sppp_cp_input()
1151 (cp->scr)(sp); in sppp_cp_input()
1166 switch (sp->state[cp->protoidx]) { in sppp_cp_input()
1169 sppp_cp_change_state(cp, sp, STATE_REQ_SENT); in sppp_cp_input()
1181 sppp_cp_send(sp, cp->proto, TERM_ACK, h->ident, 0, 0); in sppp_cp_input()
1184 sp->rst_counter[cp->protoidx] = 0; in sppp_cp_input()
1185 sppp_cp_change_state(cp, sp, STATE_STOPPING); in sppp_cp_input()
1186 (cp->tld)(sp); in sppp_cp_input()
1198 switch (sp->state[cp->protoidx]) { in sppp_cp_input()
1205 sppp_cp_change_state(cp, sp, STATE_CLOSED); in sppp_cp_input()
1206 (cp->tlf)(sp); in sppp_cp_input()
1209 sppp_cp_change_state(cp, sp, STATE_STOPPED); in sppp_cp_input()
1210 (cp->tlf)(sp); in sppp_cp_input()
1213 sppp_cp_change_state(cp, sp, STATE_REQ_SENT); in sppp_cp_input()
1216 sppp_cp_change_state(cp, sp, STATE_ACK_RCVD); in sppp_cp_input()
1217 (cp->tld)(sp); in sppp_cp_input()
1218 (cp->scr)(sp); in sppp_cp_input()
1260 upper ? sppp_state_name(sp->state[upper->protoidx]) : "?"); in sppp_cp_input()
1267 if (sp->state[upper->protoidx] == STATE_REQ_SENT) { in sppp_cp_input()
1268 upper->Close(sp); in sppp_cp_input()
1274 switch (sp->state[cp->protoidx]) { in sppp_cp_input()
1284 sppp_cp_change_state(cp, sp, STATE_REQ_SENT); in sppp_cp_input()
1303 if (sp->state[cp->protoidx] != STATE_OPENED) { in sppp_cp_input()
1321 if (nmagic == sp->lcp.magic) { in sppp_cp_input()
1325 lcp.Close(sp); in sppp_cp_input()
1329 p[0] = sp->lcp.magic >> 24; in sppp_cp_input()
1330 p[1] = sp->lcp.magic >> 16; in sppp_cp_input()
1331 p[2] = sp->lcp.magic >> 8; in sppp_cp_input()
1332 p[3] = sp->lcp.magic; in sppp_cp_input()
1337 sppp_cp_send (sp, PPP_LCP, ECHO_REPLY, h->ident, len-4, h+1); in sppp_cp_input()
1342 if (h->ident != sp->lcp.echoid) { in sppp_cp_input()
1360 if (nmagic != sp->lcp.magic) in sppp_cp_input()
1361 sp->pp_alivecnt = 0; in sppp_cp_input()
1369 sppp_cp_send(sp, cp->proto, CODE_REJ, ++sp->pp_seq, in sppp_cp_input()
1381 sppp_up_event(const struct cp *cp, struct sppp *sp) in sppp_up_event() argument
1388 sppp_state_name(sp->state[cp->protoidx])); in sppp_up_event()
1390 switch (sp->state[cp->protoidx]) { in sppp_up_event()
1392 sppp_cp_change_state(cp, sp, STATE_CLOSED); in sppp_up_event()
1395 sp->rst_counter[cp->protoidx] = sp->lcp.max_configure; in sppp_up_event()
1396 sppp_cp_change_state(cp, sp, STATE_REQ_SENT); in sppp_up_event()
1397 (cp->scr)(sp); in sppp_up_event()
1408 sppp_down_event(const struct cp *cp, struct sppp *sp) in sppp_down_event() argument
1415 sppp_state_name(sp->state[cp->protoidx])); in sppp_down_event()
1417 switch (sp->state[cp->protoidx]) { in sppp_down_event()
1420 sppp_cp_change_state(cp, sp, STATE_INITIAL); in sppp_down_event()
1423 sppp_cp_change_state(cp, sp, STATE_STARTING); in sppp_down_event()
1424 (cp->tls)(sp); in sppp_down_event()
1430 sppp_cp_change_state(cp, sp, STATE_STARTING); in sppp_down_event()
1433 sppp_cp_change_state(cp, sp, STATE_STARTING); in sppp_down_event()
1434 (cp->tld)(sp); in sppp_down_event()
1446 sppp_open_event(const struct cp *cp, struct sppp *sp) in sppp_open_event() argument
1453 sppp_state_name(sp->state[cp->protoidx])); in sppp_open_event()
1455 switch (sp->state[cp->protoidx]) { in sppp_open_event()
1457 sppp_cp_change_state(cp, sp, STATE_STARTING); in sppp_open_event()
1458 (cp->tls)(sp); in sppp_open_event()
1463 sp->rst_counter[cp->protoidx] = sp->lcp.max_configure; in sppp_open_event()
1464 sppp_cp_change_state(cp, sp, STATE_REQ_SENT); in sppp_open_event()
1465 (cp->scr)(sp); in sppp_open_event()
1475 sppp_cp_change_state(cp, sp, STATE_STOPPING); in sppp_open_event()
1482 sppp_close_event(const struct cp *cp, struct sppp *sp) in sppp_close_event() argument
1489 sppp_state_name(sp->state[cp->protoidx])); in sppp_close_event()
1491 switch (sp->state[cp->protoidx]) { in sppp_close_event()
1497 sppp_cp_change_state(cp, sp, STATE_INITIAL); in sppp_close_event()
1498 (cp->tlf)(sp); in sppp_close_event()
1501 sppp_cp_change_state(cp, sp, STATE_CLOSED); in sppp_close_event()
1504 sppp_cp_change_state(cp, sp, STATE_CLOSING); in sppp_close_event()
1507 sppp_cp_change_state(cp, sp, STATE_CLOSING); in sppp_close_event()
1508 sp->rst_counter[cp->protoidx] = sp->lcp.max_terminate; in sppp_close_event()
1509 sppp_cp_send(sp, cp->proto, TERM_REQ, ++sp->pp_seq, 0, 0); in sppp_close_event()
1510 (cp->tld)(sp); in sppp_close_event()
1515 sp->rst_counter[cp->protoidx] = sp->lcp.max_terminate; in sppp_close_event()
1516 sppp_cp_send(sp, cp->proto, TERM_REQ, ++sp->pp_seq, 0, 0); in sppp_close_event()
1517 sppp_cp_change_state(cp, sp, STATE_CLOSING); in sppp_close_event()
1523 sppp_increasing_timeout(const struct cp *cp, struct sppp *sp) in sppp_increasing_timeout() argument
1527 timo = sp->lcp.max_configure - sp->rst_counter[cp->protoidx]; in sppp_increasing_timeout()
1530 timeout_add_sec(&sp->ch[cp->protoidx], timo * sp->lcp.timeout); in sppp_increasing_timeout()
1534 sppp_to_event(const struct cp *cp, struct sppp *sp) in sppp_to_event() argument
1543 sppp_state_name(sp->state[cp->protoidx]), in sppp_to_event()
1544 sp->rst_counter[cp->protoidx]); in sppp_to_event()
1546 if (--sp->rst_counter[cp->protoidx] < 0) in sppp_to_event()
1548 switch (sp->state[cp->protoidx]) { in sppp_to_event()
1550 sppp_cp_change_state(cp, sp, STATE_CLOSED); in sppp_to_event()
1551 (cp->tlf)(sp); in sppp_to_event()
1554 sppp_cp_change_state(cp, sp, STATE_STOPPED); in sppp_to_event()
1555 (cp->tlf)(sp); in sppp_to_event()
1560 sppp_cp_change_state(cp, sp, STATE_STOPPED); in sppp_to_event()
1561 (cp->tlf)(sp); in sppp_to_event()
1566 switch (sp->state[cp->protoidx]) { in sppp_to_event()
1569 sppp_cp_send(sp, cp->proto, TERM_REQ, ++sp->pp_seq, in sppp_to_event()
1571 sppp_increasing_timeout (cp, sp); in sppp_to_event()
1576 sppp_cp_change_state(cp, sp, STATE_REQ_SENT); in sppp_to_event()
1577 (cp->scr)(sp); in sppp_to_event()
1580 sppp_increasing_timeout (cp, sp); in sppp_to_event()
1581 (cp->scr)(sp); in sppp_to_event()
1593 sppp_cp_change_state(const struct cp *cp, struct sppp *sp, int newstate) in sppp_cp_change_state() argument
1597 if (debug && sp->state[cp->protoidx] != newstate) in sppp_cp_change_state()
1600 sppp_state_name(sp->state[cp->protoidx]), in sppp_cp_change_state()
1602 sp->state[cp->protoidx] = newstate; in sppp_cp_change_state()
1610 UNTIMEOUT(cp->TO, (void *)sp, sp->ch[cp->protoidx]); in sppp_cp_change_state()
1617 if (!timeout_pending(&sp->ch[cp->protoidx])) in sppp_cp_change_state()
1618 sppp_increasing_timeout (cp, sp); in sppp_cp_change_state()
1630 sppp_lcp_init(struct sppp *sp) in sppp_lcp_init() argument
1632 sp->lcp.opts = (1 << LCP_OPT_MAGIC); in sppp_lcp_init()
1633 sp->lcp.magic = 0; in sppp_lcp_init()
1634 sp->state[IDX_LCP] = STATE_INITIAL; in sppp_lcp_init()
1635 sp->fail_counter[IDX_LCP] = 0; in sppp_lcp_init()
1636 sp->lcp.protos = 0; in sppp_lcp_init()
1637 sp->lcp.mru = sp->pp_if.if_mtu; in sppp_lcp_init()
1638 sp->lcp.their_mru = 0; in sppp_lcp_init()
1647 sp->lcp.timeout = 1; /* seconds */ in sppp_lcp_init()
1648 sp->lcp.max_terminate = 2; in sppp_lcp_init()
1649 sp->lcp.max_configure = 10; in sppp_lcp_init()
1650 sp->lcp.max_failure = 10; in sppp_lcp_init()
1654 sppp_lcp_up(struct sppp *sp) in sppp_lcp_up() argument
1659 sp->pp_alivecnt = 0; in sppp_lcp_up()
1660 sp->lcp.opts = (1 << LCP_OPT_MAGIC); in sppp_lcp_up()
1661 sp->lcp.magic = 0; in sppp_lcp_up()
1662 sp->lcp.protos = 0; in sppp_lcp_up()
1663 if (sp->pp_if.if_mtu != PP_MTU) { in sppp_lcp_up()
1664 sp->lcp.mru = sp->pp_if.if_mtu; in sppp_lcp_up()
1665 sp->lcp.opts |= (1 << LCP_OPT_MRU); in sppp_lcp_up()
1667 sp->lcp.mru = PP_MTU; in sppp_lcp_up()
1668 sp->lcp.their_mru = PP_MTU; in sppp_lcp_up()
1671 sp->pp_last_receive = sp->pp_last_activity = tv.tv_sec; in sppp_lcp_up()
1683 if (sp->state[IDX_LCP] == STATE_INITIAL) { in sppp_lcp_up()
1686 sp->pp_flags |= PP_CALLIN; in sppp_lcp_up()
1687 lcp.Open(sp); in sppp_lcp_up()
1691 (sp->state[IDX_LCP] == STATE_INITIAL)) { in sppp_lcp_up()
1693 lcp.Open(sp); in sppp_lcp_up()
1696 sppp_up_event(&lcp, sp); in sppp_lcp_up()
1700 sppp_lcp_down(struct sppp *sp) in sppp_lcp_down() argument
1704 sppp_down_event(&lcp, sp); in sppp_lcp_down()
1724 if (sp->state[IDX_LCP] != STATE_INITIAL) in sppp_lcp_down()
1725 lcp.Close(sp); in sppp_lcp_down()
1726 sp->lcp.their_mru = 0; in sppp_lcp_down()
1727 sp->pp_flags &= ~PP_CALLIN; in sppp_lcp_down()
1733 sppp_lcp_open(struct sppp *sp) in sppp_lcp_open() argument
1738 if (sp->hisauth.proto != 0) in sppp_lcp_open()
1739 sp->lcp.opts |= (1 << LCP_OPT_AUTH_PROTO); in sppp_lcp_open()
1741 sp->lcp.opts &= ~(1 << LCP_OPT_AUTH_PROTO); in sppp_lcp_open()
1742 sp->pp_flags &= ~PP_NEEDAUTH; in sppp_lcp_open()
1743 sppp_open_event(&lcp, sp); in sppp_lcp_open()
1747 sppp_lcp_close(struct sppp *sp) in sppp_lcp_close() argument
1749 sppp_close_event(&lcp, sp); in sppp_lcp_close()
1765 sppp_lcp_RCR(struct sppp *sp, struct lcp_header *h, int len) in sppp_lcp_RCR() argument
1822 if (sp->myauth.proto == 0) { in sppp_lcp_RCR()
1833 sp->pp_flags |= PP_NEEDAUTH; in sppp_lcp_RCR()
1849 sppp_cp_send(sp, PPP_LCP, CONF_REJ, h->ident, rlen, buf); in sppp_lcp_RCR()
1872 if (nmagic != sp->lcp.magic) { in sppp_lcp_RCR()
1879 ++sp->pp_loopcnt; in sppp_lcp_RCR()
1885 nmagic = ~sp->lcp.magic; in sppp_lcp_RCR()
1911 sp->lcp.their_mru = p[2] * 256 + p[3]; in sppp_lcp_RCR()
1913 addlog("%lu ", sp->lcp.their_mru); in sppp_lcp_RCR()
1918 if (sp->myauth.proto != authproto) { in sppp_lcp_RCR()
1922 sppp_proto_name(sp->hisauth.proto), in sppp_lcp_RCR()
1924 p[2] = sp->myauth.proto >> 8; in sppp_lcp_RCR()
1925 p[3] = sp->myauth.proto; in sppp_lcp_RCR()
1942 if (++sp->fail_counter[IDX_LCP] >= sp->lcp.max_failure) { in sppp_lcp_RCR()
1946 sp->lcp.max_failure); in sppp_lcp_RCR()
1947 sppp_cp_send(sp, PPP_LCP, CONF_REJ, h->ident, rlen, buf); in sppp_lcp_RCR()
1951 sppp_cp_send(sp, PPP_LCP, CONF_NAK, h->ident, rlen, buf); in sppp_lcp_RCR()
1957 sp->fail_counter[IDX_LCP] = 0; in sppp_lcp_RCR()
1958 sp->pp_loopcnt = 0; in sppp_lcp_RCR()
1959 sppp_cp_send (sp, PPP_LCP, CONF_ACK, in sppp_lcp_RCR()
1973 sppp_lcp_RCN_rej(struct sppp *sp, struct lcp_header *h, int len) in sppp_lcp_RCN_rej() argument
1993 sp->lcp.opts &= ~(1 << LCP_OPT_MAGIC); in sppp_lcp_RCN_rej()
1994 sp->lcp.magic = 0; in sppp_lcp_RCN_rej()
2002 sp->lcp.opts &= ~(1 << LCP_OPT_MRU); in sppp_lcp_RCN_rej()
2010 if ((sp->pp_flags & PP_CALLIN) == 0 && in sppp_lcp_RCN_rej()
2011 (sp->hisauth.flags & AUTHFLAG_NOCALLOUT) != 0) { in sppp_lcp_RCN_rej()
2015 sp->lcp.opts &= ~(1 << LCP_OPT_AUTH_PROTO); in sppp_lcp_RCN_rej()
2020 lcp.Close(sp); in sppp_lcp_RCN_rej()
2033 sppp_lcp_RCN_nak(struct sppp *sp, struct lcp_header *h, int len) in sppp_lcp_RCN_nak() argument
2054 if ((sp->lcp.opts & (1 << LCP_OPT_MAGIC)) && in sppp_lcp_RCN_nak()
2063 if (magic == ~sp->lcp.magic) { in sppp_lcp_RCN_nak()
2066 sp->lcp.magic = arc4random(); in sppp_lcp_RCN_nak()
2068 sp->lcp.magic = magic; in sppp_lcp_RCN_nak()
2088 sp->lcp.mru = mru; in sppp_lcp_RCN_nak()
2089 sp->lcp.opts |= (1 << LCP_OPT_MRU); in sppp_lcp_RCN_nak()
2099 lcp.Close(sp); in sppp_lcp_RCN_nak()
2108 sppp_lcp_tlu(struct sppp *sp) in sppp_lcp_tlu() argument
2110 struct ifnet *ifp = &sp->pp_if; in sppp_lcp_tlu()
2125 (cps[i])->Open(sp); in sppp_lcp_tlu()
2127 if ((sp->lcp.opts & (1 << LCP_OPT_AUTH_PROTO)) != 0 || in sppp_lcp_tlu()
2128 (sp->pp_flags & PP_NEEDAUTH) != 0) in sppp_lcp_tlu()
2129 sp->pp_phase = PHASE_AUTHENTICATE; in sppp_lcp_tlu()
2131 sp->pp_phase = PHASE_NETWORK; in sppp_lcp_tlu()
2133 sppp_set_phase(sp); in sppp_lcp_tlu()
2144 (cps[i])->Open(sp); in sppp_lcp_tlu()
2146 if (sp->pp_phase == PHASE_NETWORK) { in sppp_lcp_tlu()
2150 (cps[i])->Open(sp); in sppp_lcp_tlu()
2155 if (sp->lcp.protos & mask && ((cps[i])->flags & CP_LCP) == 0) in sppp_lcp_tlu()
2156 (cps[i])->Up(sp); in sppp_lcp_tlu()
2159 if (sp->pp_chg) in sppp_lcp_tlu()
2160 sp->pp_chg(sp, (int)sp->pp_phase); in sppp_lcp_tlu()
2162 if (sp->pp_phase == PHASE_NETWORK) in sppp_lcp_tlu()
2164 sppp_lcp_check_and_close(sp); in sppp_lcp_tlu()
2168 sppp_lcp_tld(struct sppp *sp) in sppp_lcp_tld() argument
2173 sp->pp_phase = PHASE_TERMINATE; in sppp_lcp_tld()
2175 sppp_set_phase(sp); in sppp_lcp_tld()
2184 if (sp->lcp.protos & mask && ((cps[i])->flags & CP_LCP) == 0) { in sppp_lcp_tld()
2185 (cps[i])->Down(sp); in sppp_lcp_tld()
2186 (cps[i])->Close(sp); in sppp_lcp_tld()
2191 sppp_lcp_tls(struct sppp *sp) in sppp_lcp_tls() argument
2193 sp->pp_phase = PHASE_ESTABLISH; in sppp_lcp_tls()
2195 sppp_set_phase(sp); in sppp_lcp_tls()
2198 if (sp->pp_tls) in sppp_lcp_tls()
2199 (sp->pp_tls)(sp); in sppp_lcp_tls()
2203 sppp_lcp_tlf(struct sppp *sp) in sppp_lcp_tlf() argument
2205 sp->pp_phase = PHASE_DEAD; in sppp_lcp_tlf()
2206 sppp_set_phase(sp); in sppp_lcp_tlf()
2209 if (sp->pp_tlf) in sppp_lcp_tlf()
2210 (sp->pp_tlf)(sp); in sppp_lcp_tlf()
2214 sppp_lcp_scr(struct sppp *sp) in sppp_lcp_scr() argument
2220 if (sp->lcp.opts & (1 << LCP_OPT_MAGIC)) { in sppp_lcp_scr()
2221 if (! sp->lcp.magic) in sppp_lcp_scr()
2222 sp->lcp.magic = arc4random(); in sppp_lcp_scr()
2225 opt[i++] = sp->lcp.magic >> 24; in sppp_lcp_scr()
2226 opt[i++] = sp->lcp.magic >> 16; in sppp_lcp_scr()
2227 opt[i++] = sp->lcp.magic >> 8; in sppp_lcp_scr()
2228 opt[i++] = sp->lcp.magic; in sppp_lcp_scr()
2231 if (sp->lcp.opts & (1 << LCP_OPT_MRU)) { in sppp_lcp_scr()
2234 opt[i++] = sp->lcp.mru >> 8; in sppp_lcp_scr()
2235 opt[i++] = sp->lcp.mru; in sppp_lcp_scr()
2238 if (sp->lcp.opts & (1 << LCP_OPT_AUTH_PROTO)) { in sppp_lcp_scr()
2239 authproto = sp->hisauth.proto; in sppp_lcp_scr()
2248 sp->confid[IDX_LCP] = ++sp->pp_seq; in sppp_lcp_scr()
2249 sppp_cp_send (sp, PPP_LCP, CONF_REQ, sp->confid[IDX_LCP], i, opt); in sppp_lcp_scr()
2256 sppp_ncp_check(struct sppp *sp) in sppp_ncp_check() argument
2261 if (sp->lcp.protos & mask && (cps[i])->flags & CP_NCP) in sppp_ncp_check()
2271 sppp_lcp_check_and_close(struct sppp *sp) in sppp_lcp_check_and_close() argument
2274 if (sp->pp_phase < PHASE_NETWORK) in sppp_lcp_check_and_close()
2278 if (sppp_ncp_check(sp)) in sppp_lcp_check_and_close()
2281 lcp.Close(sp); in sppp_lcp_check_and_close()
2292 sppp_ipcp_init(struct sppp *sp) in sppp_ipcp_init() argument
2294 sp->ipcp.opts = 0; in sppp_ipcp_init()
2295 sp->ipcp.flags = 0; in sppp_ipcp_init()
2296 sp->state[IDX_IPCP] = STATE_INITIAL; in sppp_ipcp_init()
2297 sp->fail_counter[IDX_IPCP] = 0; in sppp_ipcp_init()
2298 task_set(&sp->ipcp.set_addr_task, sppp_set_ip_addrs, sp); in sppp_ipcp_init()
2299 task_set(&sp->ipcp.clear_addr_task, sppp_clear_ip_addrs, sp); in sppp_ipcp_init()
2303 sppp_ipcp_destroy(struct sppp *sp) in sppp_ipcp_destroy() argument
2305 task_del(systq, &sp->ipcp.set_addr_task); in sppp_ipcp_destroy()
2306 task_del(systq, &sp->ipcp.clear_addr_task); in sppp_ipcp_destroy()
2310 sppp_ipcp_up(struct sppp *sp) in sppp_ipcp_up() argument
2312 sppp_up_event(&ipcp, sp); in sppp_ipcp_up()
2316 sppp_ipcp_down(struct sppp *sp) in sppp_ipcp_down() argument
2318 sppp_down_event(&ipcp, sp); in sppp_ipcp_down()
2322 sppp_ipcp_open(struct sppp *sp) in sppp_ipcp_open() argument
2324 sppp_open_event(&ipcp, sp); in sppp_ipcp_open()
2328 sppp_ipcp_close(struct sppp *sp) in sppp_ipcp_close() argument
2330 sppp_close_event(&ipcp, sp); in sppp_ipcp_close()
2346 sppp_ipcp_RCR(struct sppp *sp, struct lcp_header *h, int len) in sppp_ipcp_RCR() argument
2349 struct ifnet *ifp = &sp->pp_if; in sppp_ipcp_RCR()
2409 sppp_cp_send(sp, PPP_IPCP, CONF_REJ, h->ident, rlen, buf); in sppp_ipcp_RCR()
2415 if (sp->ipcp.flags & IPCP_HISADDR_SEEN) in sppp_ipcp_RCR()
2416 hisaddr = sp->ipcp.req_hisaddr; /* we already agreed on that */ in sppp_ipcp_RCR()
2418 sppp_get_ip_addrs(sp, 0, &hisaddr, 0); /* user configuration */ in sppp_ipcp_RCR()
2436 ((sp->ipcp.flags & IPCP_HISADDR_DYN) && in sppp_ipcp_RCR()
2449 sp->ipcp.flags |= IPCP_HISADDR_SEEN; in sppp_ipcp_RCR()
2450 sp->ipcp.req_hisaddr = desiredaddr; in sppp_ipcp_RCR()
2491 if (rlen == 0 && !(sp->ipcp.flags & IPCP_HISADDR_SEEN)) { in sppp_ipcp_RCR()
2506 sppp_cp_send (sp, PPP_IPCP, CONF_NAK, h->ident, rlen, buf); in sppp_ipcp_RCR()
2510 sppp_cp_send (sp, PPP_IPCP, CONF_ACK, in sppp_ipcp_RCR()
2524 sppp_ipcp_RCN_rej(struct sppp *sp, struct lcp_header *h, int len) in sppp_ipcp_RCN_rej() argument
2527 struct ifnet *ifp = &sp->pp_if; in sppp_ipcp_RCN_rej()
2548 sp->ipcp.opts &= ~(1 << SPPP_IPCP_OPT_ADDRESS); in sppp_ipcp_RCN_rej()
2552 sp->ipcp.opts &= ~(1 << SPPP_IPCP_OPT_COMPRESS); in sppp_ipcp_RCN_rej()
2556 sp->ipcp.opts &= ~(1 << SPPP_IPCP_OPT_PRIMDNS); in sppp_ipcp_RCN_rej()
2559 sp->ipcp.opts &= ~(1 << SPPP_IPCP_OPT_SECDNS); in sppp_ipcp_RCN_rej()
2572 sppp_ipcp_RCN_nak(struct sppp *sp, struct lcp_header *h, int len) in sppp_ipcp_RCN_nak() argument
2575 struct ifnet *ifp = &sp->pp_if; in sppp_ipcp_RCN_nak()
2601 sp->ipcp.opts |= (1 << SPPP_IPCP_OPT_ADDRESS); in sppp_ipcp_RCN_nak()
2611 if (sp->ipcp.flags & IPCP_MYADDR_DYN) { in sppp_ipcp_RCN_nak()
2614 sp->ipcp.flags |= IPCP_MYADDR_SEEN; in sppp_ipcp_RCN_nak()
2615 sp->ipcp.req_myaddr = wantaddr; in sppp_ipcp_RCN_nak()
2628 memcpy(&sp->ipcp.dns[0].s_addr, p + 2, in sppp_ipcp_RCN_nak()
2629 sizeof(sp->ipcp.dns[0])); in sppp_ipcp_RCN_nak()
2633 memcpy(&sp->ipcp.dns[1].s_addr, p + 2, in sppp_ipcp_RCN_nak()
2634 sizeof(sp->ipcp.dns[1])); in sppp_ipcp_RCN_nak()
2643 sppp_ipcp_tlu(struct sppp *sp) in sppp_ipcp_tlu() argument
2645 if (sp->ipcp.req_myaddr != 0 || sp->ipcp.req_hisaddr != 0) in sppp_ipcp_tlu()
2646 task_add(systq, &sp->ipcp.set_addr_task); in sppp_ipcp_tlu()
2650 sppp_ipcp_tld(struct sppp *sp) in sppp_ipcp_tld() argument
2655 sppp_ipcp_tls(struct sppp *sp) in sppp_ipcp_tls() argument
2660 sp->ipcp.flags &= ~(IPCP_HISADDR_SEEN|IPCP_MYADDR_SEEN| in sppp_ipcp_tls()
2662 sp->ipcp.req_myaddr = 0; in sppp_ipcp_tls()
2663 sp->ipcp.req_hisaddr = 0; in sppp_ipcp_tls()
2664 memset(&sp->ipcp.dns, 0, sizeof(sp->ipcp.dns)); in sppp_ipcp_tls()
2666 sppp_get_ip_addrs(sp, &myaddr, &hisaddr, 0); in sppp_ipcp_tls()
2686 sp->ipcp.flags |= IPCP_MYADDR_DYN; in sppp_ipcp_tls()
2687 sp->ipcp.opts |= (1 << SPPP_IPCP_OPT_ADDRESS); in sppp_ipcp_tls()
2694 sp->ipcp.flags |= IPCP_HISADDR_DYN; in sppp_ipcp_tls()
2698 sp->ipcp.opts |= (1 << SPPP_IPCP_OPT_PRIMDNS); in sppp_ipcp_tls()
2699 sp->ipcp.opts |= (1 << SPPP_IPCP_OPT_SECDNS); in sppp_ipcp_tls()
2702 sp->lcp.protos |= (1 << IDX_IPCP); in sppp_ipcp_tls()
2706 sppp_ipcp_tlf(struct sppp *sp) in sppp_ipcp_tlf() argument
2708 if (sp->ipcp.flags & (IPCP_MYADDR_DYN|IPCP_HISADDR_DYN)) in sppp_ipcp_tlf()
2710 task_add(systq, &sp->ipcp.clear_addr_task); in sppp_ipcp_tlf()
2713 sp->lcp.protos &= ~(1 << IDX_IPCP); in sppp_ipcp_tlf()
2714 sppp_lcp_check_and_close(sp); in sppp_ipcp_tlf()
2718 sppp_ipcp_scr(struct sppp *sp) in sppp_ipcp_scr() argument
2725 if (sp->ipcp.opts & (1 << SPPP_IPCP_OPT_COMPRESSION)) { in sppp_ipcp_scr()
2735 if (sp->ipcp.opts & (1 << SPPP_IPCP_OPT_ADDRESS)) { in sppp_ipcp_scr()
2736 if (sp->ipcp.flags & IPCP_MYADDR_SEEN) in sppp_ipcp_scr()
2738 ouraddr = sp->ipcp.req_myaddr; in sppp_ipcp_scr()
2740 sppp_get_ip_addrs(sp, &ouraddr, 0, 0); in sppp_ipcp_scr()
2749 if (sp->ipcp.opts & (1 << SPPP_IPCP_OPT_PRIMDNS)) { in sppp_ipcp_scr()
2752 memcpy(&opt[i], &sp->ipcp.dns[0].s_addr, in sppp_ipcp_scr()
2753 sizeof(sp->ipcp.dns[0])); in sppp_ipcp_scr()
2754 i += sizeof(sp->ipcp.dns[0]); in sppp_ipcp_scr()
2757 if (sp->ipcp.opts & (1 << SPPP_IPCP_OPT_SECDNS)) { in sppp_ipcp_scr()
2760 memcpy(&opt[i], &sp->ipcp.dns[1].s_addr, in sppp_ipcp_scr()
2761 sizeof(sp->ipcp.dns[1])); in sppp_ipcp_scr()
2762 i += sizeof(sp->ipcp.dns[1]); in sppp_ipcp_scr()
2765 sp->confid[IDX_IPCP] = ++sp->pp_seq; in sppp_ipcp_scr()
2766 sppp_cp_send(sp, PPP_IPCP, CONF_REQ, sp->confid[IDX_IPCP], i, opt); in sppp_ipcp_scr()
2779 sppp_ipv6cp_init(struct sppp *sp) in sppp_ipv6cp_init() argument
2781 sp->ipv6cp.opts = 0; in sppp_ipv6cp_init()
2782 sp->ipv6cp.flags = 0; in sppp_ipv6cp_init()
2783 sp->state[IDX_IPV6CP] = STATE_INITIAL; in sppp_ipv6cp_init()
2784 sp->fail_counter[IDX_IPV6CP] = 0; in sppp_ipv6cp_init()
2785 task_set(&sp->ipv6cp.set_addr_task, sppp_update_ip6_addr, sp); in sppp_ipv6cp_init()
2789 sppp_ipv6cp_destroy(struct sppp *sp) in sppp_ipv6cp_destroy() argument
2791 task_del(systq, &sp->ipv6cp.set_addr_task); in sppp_ipv6cp_destroy()
2795 sppp_ipv6cp_up(struct sppp *sp) in sppp_ipv6cp_up() argument
2797 sppp_up_event(&ipv6cp, sp); in sppp_ipv6cp_up()
2801 sppp_ipv6cp_down(struct sppp *sp) in sppp_ipv6cp_down() argument
2803 sppp_down_event(&ipv6cp, sp); in sppp_ipv6cp_down()
2807 sppp_ipv6cp_open(struct sppp *sp) in sppp_ipv6cp_open() argument
2812 sp->ipv6cp.flags &= ~(IPV6CP_MYIFID_SEEN|IPV6CP_MYIFID_DYN); in sppp_ipv6cp_open()
2814 sppp_get_ip6_addrs(sp, &myaddr, &hisaddr, NULL); in sppp_ipv6cp_open()
2828 sp->ipv6cp.opts |= (1 << IPV6CP_OPT_IFID); in sppp_ipv6cp_open()
2829 sppp_open_event(&ipv6cp, sp); in sppp_ipv6cp_open()
2833 sppp_ipv6cp_close(struct sppp *sp) in sppp_ipv6cp_close() argument
2835 sppp_close_event(&ipv6cp, sp); in sppp_ipv6cp_close()
2845 sppp_ipv6cp_RCR(struct sppp *sp, struct lcp_header *h, int len) in sppp_ipv6cp_RCR() argument
2848 struct ifnet *ifp = &sp->pp_if; in sppp_ipv6cp_RCR()
2915 sppp_cp_send(sp, PPP_IPV6CP, CONF_REJ, h->ident, rlen, buf); in sppp_ipv6cp_RCR()
2921 if (sp->ipv6cp.flags & IPV6CP_MYIFID_DYN) in sppp_ipv6cp_RCR()
2922 myaddr = sp->ipv6cp.req_ifid.ifra_addr.sin6_addr; in sppp_ipv6cp_RCR()
2924 sppp_get_ip6_addrs(sp, &myaddr, NULL, NULL); in sppp_ipv6cp_RCR()
2958 sppp_set_ip6_addr(sp, &myaddr, &desiredaddr); in sppp_ipv6cp_RCR()
2974 sppp_suggest_ip6_addr(sp, &suggestaddr); in sppp_ipv6cp_RCR()
2993 sppp_cp_send(sp, PPP_IPV6CP, type, h->ident, origlen, h + 1); in sppp_ipv6cp_RCR()
3006 sppp_cp_send(sp, PPP_IPV6CP, type, h->ident, rlen, buf); in sppp_ipv6cp_RCR()
3015 sppp_ipv6cp_RCN_rej(struct sppp *sp, struct lcp_header *h, int len) in sppp_ipv6cp_RCN_rej() argument
3018 struct ifnet *ifp = &sp->pp_if; in sppp_ipv6cp_RCN_rej()
3039 sp->ipv6cp.opts &= ~(1 << IPV6CP_OPT_IFID); in sppp_ipv6cp_RCN_rej()
3043 sp->ipv6cp.opts &= ~(1 << IPV6CP_OPT_COMPRESS); in sppp_ipv6cp_RCN_rej()
3054 sppp_ipv6cp_RCN_nak(struct sppp *sp, struct lcp_header *h, int len) in sppp_ipv6cp_RCN_nak() argument
3057 struct ifnet *ifp = &sp->pp_if; in sppp_ipv6cp_RCN_nak()
3083 sp->ipv6cp.flags |= IPV6CP_MYIFID_DYN; in sppp_ipv6cp_RCN_nak()
3087 (sp->ipv6cp.flags & IPV6CP_MYIFID_SEEN)) { in sppp_ipv6cp_RCN_nak()
3094 sppp_suggest_ip6_addr(sp, &suggestaddr); in sppp_ipv6cp_RCN_nak()
3095 sppp_set_ip6_addr(sp, &suggestaddr, NULL); in sppp_ipv6cp_RCN_nak()
3096 sp->ipv6cp.flags &= ~IPV6CP_MYIFID_SEEN; in sppp_ipv6cp_RCN_nak()
3100 sp->ipv6cp.opts |= (1 << IPV6CP_OPT_IFID); in sppp_ipv6cp_RCN_nak()
3105 sppp_set_ip6_addr(sp, &suggestaddr, NULL); in sppp_ipv6cp_RCN_nak()
3108 sp->ipv6cp.flags |= IPV6CP_MYIFID_SEEN; in sppp_ipv6cp_RCN_nak()
3125 sppp_ipv6cp_tlu(struct sppp *sp) in sppp_ipv6cp_tlu() argument
3130 sppp_ipv6cp_tld(struct sppp *sp) in sppp_ipv6cp_tld() argument
3135 sppp_ipv6cp_tls(struct sppp *sp) in sppp_ipv6cp_tls() argument
3138 sp->lcp.protos |= (1 << IDX_IPV6CP); in sppp_ipv6cp_tls()
3142 sppp_ipv6cp_tlf(struct sppp *sp) in sppp_ipv6cp_tlf() argument
3145 sp->lcp.protos &= ~(1 << IDX_IPV6CP); in sppp_ipv6cp_tlf()
3146 sppp_lcp_check_and_close(sp); in sppp_ipv6cp_tlf()
3150 sppp_ipv6cp_scr(struct sppp *sp) in sppp_ipv6cp_scr() argument
3156 if (sp->ipv6cp.opts & (1 << IPV6CP_OPT_IFID)) { in sppp_ipv6cp_scr()
3157 if (sp->ipv6cp.flags & IPV6CP_MYIFID_DYN) in sppp_ipv6cp_scr()
3158 ouraddr = sp->ipv6cp.req_ifid.ifra_addr.sin6_addr; in sppp_ipv6cp_scr()
3160 sppp_get_ip6_addrs(sp, &ouraddr, NULL, NULL); in sppp_ipv6cp_scr()
3168 if (sp->ipv6cp.opts & (1 << IPV6CP_OPT_COMPRESSION)) { in sppp_ipv6cp_scr()
3177 sp->confid[IDX_IPV6CP] = ++sp->pp_seq; in sppp_ipv6cp_scr()
3178 sppp_cp_send(sp, PPP_IPV6CP, CONF_REQ, sp->confid[IDX_IPV6CP], i, opt); in sppp_ipv6cp_scr()
3182 sppp_ipv6cp_init(struct sppp *sp) in sppp_ipv6cp_init() argument
3187 sppp_ipv6cp_destroy(struct sppp *sp) in sppp_ipv6cp_destroy() argument
3192 sppp_ipv6cp_up(struct sppp *sp) in sppp_ipv6cp_up() argument
3197 sppp_ipv6cp_down(struct sppp *sp) in sppp_ipv6cp_down() argument
3202 sppp_ipv6cp_open(struct sppp *sp) in sppp_ipv6cp_open() argument
3207 sppp_ipv6cp_close(struct sppp *sp) in sppp_ipv6cp_close() argument
3212 sppp_ipv6cp_TO(void *sp) in sppp_ipv6cp_TO() argument
3217 sppp_ipv6cp_RCR(struct sppp *sp, struct lcp_header *h, in sppp_ipv6cp_RCR() argument
3224 sppp_ipv6cp_RCN_rej(struct sppp *sp, struct lcp_header *h, in sppp_ipv6cp_RCN_rej() argument
3230 sppp_ipv6cp_RCN_nak(struct sppp *sp, struct lcp_header *h, in sppp_ipv6cp_RCN_nak() argument
3236 sppp_ipv6cp_tlu(struct sppp *sp) in sppp_ipv6cp_tlu() argument
3241 sppp_ipv6cp_tld(struct sppp *sp) in sppp_ipv6cp_tld() argument
3246 sppp_ipv6cp_tls(struct sppp *sp) in sppp_ipv6cp_tls() argument
3251 sppp_ipv6cp_tlf(struct sppp *sp) in sppp_ipv6cp_tlf() argument
3256 sppp_ipv6cp_scr(struct sppp *sp) in sppp_ipv6cp_scr() argument
3350 sppp_chap_input(struct sppp *sp, struct mbuf *m) in sppp_chap_input() argument
3408 MD5Update(&ctx, sp->myauth.secret, strlen(sp->myauth.secret)); in sppp_chap_input()
3413 sppp_auth_send(&chap, sp, CHAP_RESPONSE, h->ident, in sppp_chap_input()
3416 strlen(sp->myauth.name), in sppp_chap_input()
3417 sp->myauth.name, in sppp_chap_input()
3432 sp->pp_flags &= ~PP_NEEDAUTH; in sppp_chap_input()
3433 if (sp->myauth.proto == PPP_CHAP && in sppp_chap_input()
3434 (sp->lcp.opts & (1 << LCP_OPT_AUTH_PROTO)) && in sppp_chap_input()
3435 (sp->lcp.protos & (1 << IDX_CHAP)) == 0) { in sppp_chap_input()
3445 sppp_phase_network(sp); in sppp_chap_input()
3483 if (h->ident != sp->confid[IDX_CHAP]) { in sppp_chap_input()
3489 h->ident, sp->confid[IDX_CHAP]); in sppp_chap_input()
3492 if (name_len != strlen(sp->hisauth.name) in sppp_chap_input()
3493 || bcmp(name, sp->hisauth.name, name_len) != 0) { in sppp_chap_input()
3498 sppp_print_string(sp->hisauth.name, in sppp_chap_input()
3499 strlen(sp->hisauth.name)); in sppp_chap_input()
3506 sppp_state_name(sp->state[IDX_CHAP]), in sppp_chap_input()
3526 MD5Update(&ctx, sp->hisauth.secret, strlen(sp->hisauth.secret)); in sppp_chap_input()
3527 MD5Update(&ctx, sp->chap_challenge, AUTHCHALEN); in sppp_chap_input()
3536 sppp_auth_send(&chap, sp, CHAP_FAILURE, h->ident, in sppp_chap_input()
3539 chap.tld(sp); in sppp_chap_input()
3543 if (sp->state[IDX_CHAP] == STATE_REQ_SENT || in sppp_chap_input()
3544 sp->state[IDX_CHAP] == STATE_OPENED) in sppp_chap_input()
3545 sppp_auth_send(&chap, sp, CHAP_SUCCESS, h->ident, in sppp_chap_input()
3548 if (sp->state[IDX_CHAP] == STATE_REQ_SENT) { in sppp_chap_input()
3549 sppp_cp_change_state(&chap, sp, STATE_OPENED); in sppp_chap_input()
3550 chap.tlu(sp); in sppp_chap_input()
3560 sppp_state_name(sp->state[IDX_CHAP]), in sppp_chap_input()
3572 sppp_chap_init(struct sppp *sp) in sppp_chap_init() argument
3575 sp->state[IDX_CHAP] = STATE_CLOSED; in sppp_chap_init()
3576 sp->fail_counter[IDX_CHAP] = 0; in sppp_chap_init()
3580 sppp_chap_open(struct sppp *sp) in sppp_chap_open() argument
3582 if (sp->myauth.proto == PPP_CHAP && in sppp_chap_open()
3583 (sp->lcp.opts & (1 << LCP_OPT_AUTH_PROTO)) != 0) { in sppp_chap_open()
3585 chap.scr(sp); in sppp_chap_open()
3586 sp->rst_counter[IDX_CHAP] = sp->lcp.max_configure; in sppp_chap_open()
3587 sppp_cp_change_state(&chap, sp, STATE_REQ_SENT); in sppp_chap_open()
3593 sppp_chap_close(struct sppp *sp) in sppp_chap_close() argument
3595 if (sp->state[IDX_CHAP] != STATE_CLOSED) in sppp_chap_close()
3596 sppp_cp_change_state(&chap, sp, STATE_CLOSED); in sppp_chap_close()
3602 struct sppp *sp = (struct sppp *)cookie; in sppp_chap_TO() local
3610 sppp_state_name(sp->state[IDX_CHAP]), in sppp_chap_TO()
3611 sp->rst_counter[IDX_CHAP]); in sppp_chap_TO()
3613 if (--sp->rst_counter[IDX_CHAP] < 0) in sppp_chap_TO()
3615 switch (sp->state[IDX_CHAP]) { in sppp_chap_TO()
3617 chap.tld(sp); in sppp_chap_TO()
3618 sppp_cp_change_state(&chap, sp, STATE_CLOSED); in sppp_chap_TO()
3623 switch (sp->state[IDX_CHAP]) { in sppp_chap_TO()
3626 sp->rst_counter[IDX_CHAP] = sp->lcp.max_configure; in sppp_chap_TO()
3629 chap.scr(sp); in sppp_chap_TO()
3631 sppp_cp_change_state(&chap, sp, STATE_REQ_SENT); in sppp_chap_TO()
3639 sppp_chap_tlu(struct sppp *sp) in sppp_chap_tlu() argument
3644 sp->rst_counter[IDX_CHAP] = sp->lcp.max_configure; in sppp_chap_tlu()
3652 if ((sp->hisauth.flags & AUTHFLAG_NORECHALLENGE) == 0) { in sppp_chap_tlu()
3659 timeout_add_sec(&sp->ch[IDX_CHAP], i); in sppp_chap_tlu()
3666 sp->pp_phase == PHASE_NETWORK? "reconfirmed": "tlu"); in sppp_chap_tlu()
3667 if ((sp->hisauth.flags & AUTHFLAG_NORECHALLENGE) == 0) in sppp_chap_tlu()
3675 sp->lcp.protos |= (1 << IDX_CHAP); in sppp_chap_tlu()
3677 if (sp->pp_flags & PP_NEEDAUTH) { in sppp_chap_tlu()
3692 if (sp->pp_phase != PHASE_NETWORK) in sppp_chap_tlu()
3693 sppp_phase_network(sp); in sppp_chap_tlu()
3697 sppp_chap_tld(struct sppp *sp) in sppp_chap_tld() argument
3703 UNTIMEOUT(chap.TO, (void *)sp, sp->ch[IDX_CHAP]); in sppp_chap_tld()
3704 sp->lcp.protos &= ~(1 << IDX_CHAP); in sppp_chap_tld()
3706 lcp.Close(sp); in sppp_chap_tld()
3710 sppp_chap_scr(struct sppp *sp) in sppp_chap_scr() argument
3715 arc4random_buf(sp->chap_challenge, sizeof(sp->chap_challenge)); in sppp_chap_scr()
3718 sp->confid[IDX_CHAP] = ++sp->pp_seq; in sppp_chap_scr()
3720 sppp_auth_send(&chap, sp, CHAP_CHALLENGE, sp->confid[IDX_CHAP], in sppp_chap_scr()
3722 (size_t)AUTHCHALEN, sp->chap_challenge, in sppp_chap_scr()
3723 strlen(sp->myauth.name), in sppp_chap_scr()
3724 sp->myauth.name, in sppp_chap_scr()
3744 sppp_pap_input(struct sppp *sp, struct mbuf *m) in sppp_pap_input() argument
3787 sppp_state_name(sp->state[IDX_PAP]), in sppp_pap_input()
3797 bcmp(name, sp->hisauth.name, name_len) != 0 || in sppp_pap_input()
3798 bcmp(passwd, sp->hisauth.secret, passwd_len) != 0) { in sppp_pap_input()
3801 sppp_auth_send(&pap, sp, PAP_NAK, h->ident, in sppp_pap_input()
3805 pap.tld(sp); in sppp_pap_input()
3809 if (sp->state[IDX_PAP] == STATE_REQ_SENT || in sppp_pap_input()
3810 sp->state[IDX_PAP] == STATE_OPENED) { in sppp_pap_input()
3812 sppp_auth_send(&pap, sp, PAP_ACK, h->ident, in sppp_pap_input()
3817 if (sp->state[IDX_PAP] == STATE_REQ_SENT) { in sppp_pap_input()
3818 sppp_cp_change_state(&pap, sp, STATE_OPENED); in sppp_pap_input()
3819 pap.tlu(sp); in sppp_pap_input()
3825 UNTIMEOUT(sppp_pap_my_TO, (void *)sp, sp->pap_my_to_ch); in sppp_pap_input()
3837 sp->pp_flags &= ~PP_NEEDAUTH; in sppp_pap_input()
3838 if (sp->myauth.proto == PPP_PAP && in sppp_pap_input()
3839 (sp->lcp.opts & (1 << LCP_OPT_AUTH_PROTO)) && in sppp_pap_input()
3840 (sp->lcp.protos & (1 << IDX_PAP)) == 0) { in sppp_pap_input()
3850 sppp_phase_network(sp); in sppp_pap_input()
3854 UNTIMEOUT(sppp_pap_my_TO, (void *)sp, sp->pap_my_to_ch); in sppp_pap_input()
3887 sppp_pap_init(struct sppp *sp) in sppp_pap_init() argument
3890 sp->state[IDX_PAP] = STATE_CLOSED; in sppp_pap_init()
3891 sp->fail_counter[IDX_PAP] = 0; in sppp_pap_init()
3895 sppp_pap_open(struct sppp *sp) in sppp_pap_open() argument
3897 if (sp->hisauth.proto == PPP_PAP && in sppp_pap_open()
3898 (sp->lcp.opts & (1 << LCP_OPT_AUTH_PROTO)) != 0) { in sppp_pap_open()
3900 sp->rst_counter[IDX_PAP] = sp->lcp.max_configure; in sppp_pap_open()
3901 sppp_cp_change_state(&pap, sp, STATE_REQ_SENT); in sppp_pap_open()
3903 if (sp->myauth.proto == PPP_PAP) { in sppp_pap_open()
3905 pap.scr(sp); in sppp_pap_open()
3906 timeout_add_sec(&sp->pap_my_to_ch, sp->lcp.timeout); in sppp_pap_open()
3911 sppp_pap_close(struct sppp *sp) in sppp_pap_close() argument
3913 if (sp->state[IDX_PAP] != STATE_CLOSED) in sppp_pap_close()
3914 sppp_cp_change_state(&pap, sp, STATE_CLOSED); in sppp_pap_close()
3924 struct sppp *sp = (struct sppp *)cookie; in sppp_pap_TO() local
3932 sppp_state_name(sp->state[IDX_PAP]), in sppp_pap_TO()
3933 sp->rst_counter[IDX_PAP]); in sppp_pap_TO()
3935 if (--sp->rst_counter[IDX_PAP] < 0) in sppp_pap_TO()
3937 switch (sp->state[IDX_PAP]) { in sppp_pap_TO()
3939 pap.tld(sp); in sppp_pap_TO()
3940 sppp_cp_change_state(&pap, sp, STATE_CLOSED); in sppp_pap_TO()
3945 switch (sp->state[IDX_PAP]) { in sppp_pap_TO()
3948 sppp_cp_change_state(&pap, sp, STATE_REQ_SENT); in sppp_pap_TO()
3963 struct sppp *sp = (struct sppp *)cookie; in sppp_pap_my_TO() local
3970 pap.scr(sp); in sppp_pap_my_TO()
3974 sppp_pap_tlu(struct sppp *sp) in sppp_pap_tlu() argument
3979 sp->rst_counter[IDX_PAP] = sp->lcp.max_configure; in sppp_pap_tlu()
3987 sp->lcp.protos |= (1 << IDX_PAP); in sppp_pap_tlu()
3989 if (sp->pp_flags & PP_NEEDAUTH) { in sppp_pap_tlu()
3999 sppp_phase_network(sp); in sppp_pap_tlu()
4003 sppp_pap_tld(struct sppp *sp) in sppp_pap_tld() argument
4009 UNTIMEOUT(pap.TO, (void *)sp, sp->ch[IDX_PAP]); in sppp_pap_tld()
4010 UNTIMEOUT(sppp_pap_my_TO, (void *)sp, sp->pap_my_to_ch); in sppp_pap_tld()
4011 sp->lcp.protos &= ~(1 << IDX_PAP); in sppp_pap_tld()
4013 lcp.Close(sp); in sppp_pap_tld()
4017 sppp_pap_scr(struct sppp *sp) in sppp_pap_scr() argument
4021 sp->confid[IDX_PAP] = ++sp->pp_seq; in sppp_pap_scr()
4022 pwdlen = strlen(sp->myauth.secret); in sppp_pap_scr()
4023 idlen = strlen(sp->myauth.name); in sppp_pap_scr()
4025 sppp_auth_send(&pap, sp, PAP_REQ, sp->confid[IDX_PAP], in sppp_pap_scr()
4027 (size_t)idlen, sp->myauth.name, in sppp_pap_scr()
4029 (size_t)pwdlen, sp->myauth.secret, in sppp_pap_scr()
4045 sppp_auth_send(const struct cp *cp, struct sppp *sp, in sppp_auth_send() argument
4061 m->m_pkthdr.pf.prio = sp->pp_if.if_llprio; in sppp_auth_send()
4100 len = m->m_pkthdr.len + sp->pp_framebytes; in sppp_auth_send()
4101 if (mq_enqueue(&sp->pp_cpq, m) != 0) { in sppp_auth_send()
4118 struct sppp *sp; in sppp_keepalive() local
4125 for (sp=spppq; sp; sp=sp->pp_next) { in sppp_keepalive()
4126 struct ifnet *ifp = &sp->pp_if; in sppp_keepalive()
4129 if (! (sp->pp_flags & PP_KEEPALIVE) || in sppp_keepalive()
4134 if (sp->pp_phase < PHASE_AUTHENTICATE) in sppp_keepalive()
4138 if ((tv.tv_sec - sp->pp_last_receive) < NORECV_TIME) { in sppp_keepalive()
4139 sp->pp_alivecnt = 0; in sppp_keepalive()
4143 if (sp->pp_alivecnt >= MAXALIVECNT) { in sppp_keepalive()
4146 mq_purge(&sp->pp_cpq); in sppp_keepalive()
4149 sp->pp_alivecnt = 0; in sppp_keepalive()
4152 lcp.Close(sp); in sppp_keepalive()
4156 sppp_cp_change_state(&lcp, sp, STATE_STOPPED); in sppp_keepalive()
4160 if (sp->pp_tlf) in sppp_keepalive()
4161 sp->pp_tlf(sp); in sppp_keepalive()
4164 if (sp->pp_alivecnt < MAXALIVECNT) in sppp_keepalive()
4165 ++sp->pp_alivecnt; in sppp_keepalive()
4166 if (sp->pp_phase >= PHASE_AUTHENTICATE) { in sppp_keepalive()
4167 u_int32_t nmagic = htonl(sp->lcp.magic); in sppp_keepalive()
4168 sp->lcp.echoid = ++sp->pp_seq; in sppp_keepalive()
4169 sppp_cp_send (sp, PPP_LCP, ECHO_REQ, in sppp_keepalive()
4170 sp->lcp.echoid, 4, &nmagic); in sppp_keepalive()
4182 sppp_get_ip_addrs(struct sppp *sp, u_int32_t *src, u_int32_t *dst, in sppp_get_ip_addrs() argument
4185 struct ifnet *ifp = &sp->pp_if; in sppp_get_ip_addrs()
4255 struct sppp *sp = arg1; in sppp_set_ip_addrs() local
4258 struct ifnet *ifp = &sp->pp_if; in sppp_set_ip_addrs()
4264 sppp_get_ip_addrs(sp, &myaddr, &hisaddr, NULL); in sppp_set_ip_addrs()
4265 if ((sp->ipcp.flags & IPCP_MYADDR_DYN) && in sppp_set_ip_addrs()
4266 (sp->ipcp.flags & IPCP_MYADDR_SEEN)) in sppp_set_ip_addrs()
4267 myaddr = sp->ipcp.req_myaddr; in sppp_set_ip_addrs()
4268 if ((sp->ipcp.flags & IPCP_HISADDR_DYN) && in sppp_set_ip_addrs()
4269 (sp->ipcp.flags & IPCP_HISADDR_SEEN)) in sppp_set_ip_addrs()
4270 hisaddr = sp->ipcp.req_hisaddr; in sppp_set_ip_addrs()
4303 sp->ipcp.saved_hisaddr = dest->sin_addr.s_addr; in sppp_set_ip_addrs()
4328 struct sppp *sp = (struct sppp *)arg1; in sppp_clear_ip_addrs() local
4329 struct ifnet *ifp = &sp->pp_if; in sppp_clear_ip_addrs()
4338 if (sp->ipcp.flags & IPCP_HISADDR_DYN) in sppp_clear_ip_addrs()
4339 remote = sp->ipcp.saved_hisaddr; in sppp_clear_ip_addrs()
4341 sppp_get_ip_addrs(sp, 0, &remote, 0); in sppp_clear_ip_addrs()
4363 if (sp->ipcp.flags & IPCP_MYADDR_DYN) in sppp_clear_ip_addrs()
4365 if (sp->ipcp.flags & IPCP_HISADDR_DYN) in sppp_clear_ip_addrs()
4367 dest->sin_addr.s_addr = sp->ipcp.saved_hisaddr; in sppp_clear_ip_addrs()
4377 memset(sp->ipcp.dns, 0, sizeof(sp->ipcp.dns)); in sppp_clear_ip_addrs()
4390 sppp_get_ip6_addrs(struct sppp *sp, struct in6_addr *src, struct in6_addr *dst, in sppp_get_ip6_addrs() argument
4393 struct ifnet *ifp = &sp->pp_if; in sppp_get_ip6_addrs()
4427 struct sppp *sp = arg; in sppp_update_ip6_addr() local
4428 struct ifnet *ifp = &sp->pp_if; in sppp_update_ip6_addr()
4429 struct in6_aliasreq *ifra = &sp->ipv6cp.req_ifid; in sppp_update_ip6_addr()
4445 if (sp->ipv6cp.flags & IPV6CP_MYIFID_DYN) { in sppp_update_ip6_addr()
4482 sppp_set_ip6_addr(struct sppp *sp, const struct in6_addr *src, in sppp_set_ip6_addr() argument
4485 struct ifnet *ifp = &sp->pp_if; in sppp_set_ip6_addr()
4486 struct in6_aliasreq *ifra = &sp->ipv6cp.req_ifid; in sppp_set_ip6_addr()
4509 task_add(systq, &sp->ipv6cp.set_addr_task); in sppp_set_ip6_addr()
4516 sppp_suggest_ip6_addr(struct sppp *sp, struct in6_addr *suggest) in sppp_suggest_ip6_addr() argument
4521 sppp_get_ip6_addrs(sp, &myaddr, NULL, NULL); in sppp_suggest_ip6_addr()
4539 sppp_get_params(struct sppp *sp, struct ifreq *ifr) in sppp_get_params() argument
4553 spr->phase = sp->pp_phase; in sppp_get_params()
4569 auth = (cmd == SPPPIOGMAUTH) ? &sp->myauth : &sp->hisauth; in sppp_get_params()
4592 memcpy(spd->dns, sp->ipcp.dns, sizeof(spd->dns)); in sppp_get_params()
4611 sppp_set_params(struct sppp *sp, struct ifreq *ifr) in sppp_set_params() argument
4659 auth = (cmd == SPPPIOSMAUTH) ? &sp->myauth : &sp->hisauth; in sppp_set_params()
4681 explicit_bzero(sp->chap_challenge, sizeof sp->chap_challenge); in sppp_set_params()
4722 sppp_phase_network(struct sppp *sp) in sppp_phase_network() argument
4727 sp->pp_phase = PHASE_NETWORK; in sppp_phase_network()
4729 sppp_set_phase(sp); in sppp_phase_network()
4734 (cps[i])->Open(sp); in sppp_phase_network()
4738 if (sp->lcp.protos & mask && ((cps[i])->flags & CP_NCP)) in sppp_phase_network()
4739 (cps[i])->Up(sp); in sppp_phase_network()
4742 sppp_lcp_check_and_close(sp); in sppp_phase_network()
4927 sppp_set_phase(struct sppp *sp) in sppp_set_phase() argument
4934 sppp_phase_name(sp->pp_phase)); in sppp_set_phase()
4937 if (sp->pp_phase == PHASE_NETWORK) in sppp_set_phase()
4953 struct sppp *sp = ifp->if_softc; in sppp_update_dns() local
4961 if (sp->ipcp.dns[i].s_addr == INADDR_ANY) in sppp_update_dns()
4963 sz = sizeof(sp->ipcp.dns[i]); in sppp_update_dns()
4964 memcpy(rtdns.sr_dns + i * sz, &sp->ipcp.dns[i].s_addr, sz); in sppp_update_dns()