Lines Matching refs:sp

205 	void	(*Up)(struct sppp *sp);
206 void (*Down)(struct sppp *sp);
207 void (*Open)(struct sppp *sp);
208 void (*Close)(struct sppp *sp);
209 void (*TO)(void *sp);
210 int (*RCR)(struct sppp *sp, struct lcp_header *h, int len);
211 void (*RCN_rej)(struct sppp *sp, struct lcp_header *h, int len);
212 void (*RCN_nak)(struct sppp *sp, struct lcp_header *h, int len);
214 void (*tlu)(struct sppp *sp);
215 void (*tld)(struct sppp *sp);
216 void (*tls)(struct sppp *sp);
217 void (*tlf)(struct sppp *sp);
218 void (*scr)(struct sppp *sp);
245 struct ifnet *ifp = &sp->pp_if; \
251 static void sppp_cisco_send(struct sppp *sp, int type, long par1, long par2);
252 static void sppp_cisco_input(struct sppp *sp, struct mbuf *m);
254 static void sppp_cp_input(const struct cp *cp, struct sppp *sp,
256 static void sppp_cp_send(struct sppp *sp, u_short proto, u_char type,
259 static void sppp_cp_change_state(const struct cp *cp, struct sppp *sp,
262 struct sppp *sp, unsigned int type, unsigned int id,
265 static void sppp_up_event(const struct cp *cp, struct sppp *sp);
266 static void sppp_down_event(const struct cp *cp, struct sppp *sp);
267 static void sppp_open_event(const struct cp *cp, struct sppp *sp);
268 static void sppp_close_event(const struct cp *cp, struct sppp *sp);
269 static void sppp_to_event(const struct cp *cp, struct sppp *sp);
271 static void sppp_null(struct sppp *sp);
273 static void sppp_lcp_init(struct sppp *sp);
274 static void sppp_lcp_up(struct sppp *sp);
275 static void sppp_lcp_down(struct sppp *sp);
276 static void sppp_lcp_open(struct sppp *sp);
277 static void sppp_lcp_close(struct sppp *sp);
278 static void sppp_lcp_TO(void *sp);
279 static int sppp_lcp_RCR(struct sppp *sp, struct lcp_header *h, int len);
280 static void sppp_lcp_RCN_rej(struct sppp *sp, struct lcp_header *h, int len);
281 static void sppp_lcp_RCN_nak(struct sppp *sp, struct lcp_header *h, int len);
282 static void sppp_lcp_tlu(struct sppp *sp);
283 static void sppp_lcp_tld(struct sppp *sp);
284 static void sppp_lcp_tls(struct sppp *sp);
285 static void sppp_lcp_tlf(struct sppp *sp);
286 static void sppp_lcp_scr(struct sppp *sp);
287 static void sppp_lcp_check_and_close(struct sppp *sp);
288 static int sppp_ncp_check(struct sppp *sp);
290 static void sppp_ipcp_init(struct sppp *sp);
291 static void sppp_ipcp_up(struct sppp *sp);
292 static void sppp_ipcp_down(struct sppp *sp);
293 static void sppp_ipcp_open(struct sppp *sp);
294 static void sppp_ipcp_close(struct sppp *sp);
295 static void sppp_ipcp_TO(void *sp);
296 static int sppp_ipcp_RCR(struct sppp *sp, struct lcp_header *h, int len);
297 static void sppp_ipcp_RCN_rej(struct sppp *sp, struct lcp_header *h, int len);
298 static void sppp_ipcp_RCN_nak(struct sppp *sp, struct lcp_header *h, int len);
299 static void sppp_ipcp_tlu(struct sppp *sp);
300 static void sppp_ipcp_tld(struct sppp *sp);
301 static void sppp_ipcp_tls(struct sppp *sp);
302 static void sppp_ipcp_tlf(struct sppp *sp);
303 static void sppp_ipcp_scr(struct sppp *sp);
305 static void sppp_ipv6cp_init(struct sppp *sp);
306 static void sppp_ipv6cp_up(struct sppp *sp);
307 static void sppp_ipv6cp_down(struct sppp *sp);
308 static void sppp_ipv6cp_open(struct sppp *sp);
309 static void sppp_ipv6cp_close(struct sppp *sp);
310 static void sppp_ipv6cp_TO(void *sp);
311 static int sppp_ipv6cp_RCR(struct sppp *sp, struct lcp_header *h, int len);
312 static void sppp_ipv6cp_RCN_rej(struct sppp *sp, struct lcp_header *h, int len);
313 static void sppp_ipv6cp_RCN_nak(struct sppp *sp, struct lcp_header *h, int len);
314 static void sppp_ipv6cp_tlu(struct sppp *sp);
315 static void sppp_ipv6cp_tld(struct sppp *sp);
316 static void sppp_ipv6cp_tls(struct sppp *sp);
317 static void sppp_ipv6cp_tlf(struct sppp *sp);
318 static void sppp_ipv6cp_scr(struct sppp *sp);
320 static void sppp_pap_input(struct sppp *sp, struct mbuf *m);
321 static void sppp_pap_init(struct sppp *sp);
322 static void sppp_pap_open(struct sppp *sp);
323 static void sppp_pap_close(struct sppp *sp);
324 static void sppp_pap_TO(void *sp);
325 static void sppp_pap_my_TO(void *sp);
326 static void sppp_pap_tlu(struct sppp *sp);
327 static void sppp_pap_tld(struct sppp *sp);
328 static void sppp_pap_scr(struct sppp *sp);
330 static void sppp_chap_input(struct sppp *sp, struct mbuf *m);
331 static void sppp_chap_init(struct sppp *sp);
332 static void sppp_chap_open(struct sppp *sp);
333 static void sppp_chap_close(struct sppp *sp);
334 static void sppp_chap_TO(void *sp);
335 static void sppp_chap_tlu(struct sppp *sp);
336 static void sppp_chap_tld(struct sppp *sp);
337 static void sppp_chap_scr(struct sppp *sp);
350 static int sppp_params(struct sppp *sp, u_long cmd, void *data);
351 static void sppp_get_ip_addrs(struct sppp *sp, u_long *src, u_long *dst,
354 static void sppp_phase_network(struct sppp *sp);
357 static void sppp_set_ip_addr(struct sppp *sp, u_long src);
359 static void sppp_get_ip6_addrs(struct sppp *sp, struct in6_addr *src,
362 static void sppp_set_ip6_addr(struct sppp *sp, const struct in6_addr *src);
363 static void sppp_gen_ip6_addr(struct sppp *sp, const struct in6_addr *src);
365 static void sppp_suggest_ip6_addr(struct sppp *sp, struct in6_addr *src);
458 struct sppp *sp = (struct sppp *)ifp; in sppp_input() local
489 if (sp->pp_mode == IFF_CISCO) { in sppp_input()
506 if (sp->state[IDX_LCP] == STATE_OPENED) in sppp_input()
507 sppp_cp_send (sp, PPP_LCP, PROTO_REJ, in sppp_input()
508 ++sp->pp_seq[IDX_LCP], m->m_pkthdr.len + 2, in sppp_input()
513 sppp_cp_input(&lcp, sp, m); in sppp_input()
517 if (sp->pp_phase >= PHASE_AUTHENTICATE) in sppp_input()
518 sppp_pap_input(sp, m); in sppp_input()
522 if (sp->pp_phase >= PHASE_AUTHENTICATE) in sppp_input()
523 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()
539 if (sp->state[IDX_IPCP] == STATE_OPENED) { in sppp_input()
544 sp->pp_comp, in sppp_input()
570 if (sp->state[IDX_IPCP] == STATE_OPENED) { in sppp_input()
574 sp->pp_comp, in sppp_input()
589 if (sp->pp_phase == PHASE_NETWORK) in sppp_input()
590 sppp_cp_input(&ipv6cp, sp, m); in sppp_input()
595 if (sp->state[IDX_IPV6CP] == STATE_OPENED) { in sppp_input()
606 if (sp->pp_mode != IFF_CISCO) { in sppp_input()
661 sp->pp_last_recv = time_uptime; in sppp_input()
671 struct sppp *sp = (struct sppp*) ifp; in sppp_output_serialized() local
702 !(sp->confflags & CONF_ENABLE_IPV6)) in sppp_output_serialized()
711 lcp.Open(sp); in sppp_output_serialized()
752 if (IF_QFULL (&sp->pp_fastq)) in sppp_output_serialized()
755 ifq = &sp->pp_fastq; in sppp_output_serialized()
761 ifq = &sp->pp_fastq; in sppp_output_serialized()
763 ifq = &sp->pp_fastq; in sppp_output_serialized()
768 if (sp->pp_mode != IFF_CISCO && (sp->ipcp.flags & IPCP_VJ) && in sppp_output_serialized()
770 switch (sl_compress_tcp(m, ip, sp->pp_comp, in sppp_output_serialized()
771 sp->ipcp.compress_cid)) { in sppp_output_serialized()
812 if (sp->pp_mode == IFF_CISCO) { in sppp_output_serialized()
823 if (sp->pp_mode == IFF_CISCO) in sppp_output_serialized()
836 if (sp->state[IDX_IPCP] != STATE_OPENED) in sppp_output_serialized()
843 if (sp->pp_mode == IFF_CISCO) in sppp_output_serialized()
856 if (sp->state[IDX_IPV6CP] != STATE_OPENED) in sppp_output_serialized()
905 sp->pp_last_sent = time_uptime; in sppp_output_serialized()
928 struct sppp *sp = (struct sppp*) ifp; in sppp_attach() local
936 sp->pp_next = spppq; in sppp_attach()
937 spppq = sp; in sppp_attach()
939 sp->pp_if.if_mtu = PP_MTU; in sppp_attach()
940 sp->pp_if.if_flags = IFF_POINTOPOINT | IFF_MULTICAST; in sppp_attach()
941 sp->pp_if.if_type = IFT_PPP; in sppp_attach()
942 sp->pp_if.if_output = sppp_output; in sppp_attach()
944 sp->pp_flags = PP_KEEPALIVE; in sppp_attach()
946 ifq_set_maxlen(&sp->pp_if.if_snd, 32); in sppp_attach()
947 sp->pp_fastq.ifq_maxlen = 32; in sppp_attach()
948 sp->pp_cpq.ifq_maxlen = 20; in sppp_attach()
949 sp->pp_loopcnt = 0; in sppp_attach()
950 sp->pp_alivecnt = 0; in sppp_attach()
951 bzero(&sp->pp_seq[0], sizeof(sp->pp_seq)); in sppp_attach()
952 bzero(&sp->pp_rseq[0], sizeof(sp->pp_rseq)); in sppp_attach()
953 sp->pp_phase = PHASE_DEAD; in sppp_attach()
954 sp->pp_up = lcp.Up; in sppp_attach()
955 sp->pp_down = lcp.Down; in sppp_attach()
956 sp->pp_last_recv = sp->pp_last_sent = time_uptime; in sppp_attach()
957 sp->confflags = 0; in sppp_attach()
959 sp->confflags |= CONF_ENABLE_VJ; in sppp_attach()
962 sp->confflags |= CONF_ENABLE_IPV6; in sppp_attach()
964 sp->pp_comp = kmalloc(sizeof(struct slcompress), M_TEMP, M_WAITOK); in sppp_attach()
965 sl_compress_init(sp->pp_comp, -1); in sppp_attach()
966 sppp_lcp_init(sp); in sppp_attach()
967 sppp_ipcp_init(sp); in sppp_attach()
968 sppp_ipv6cp_init(sp); in sppp_attach()
969 sppp_pap_init(sp); in sppp_attach()
970 sppp_chap_init(sp); in sppp_attach()
976 struct sppp **q, *p, *sp = (struct sppp*) ifp; in sppp_detach() local
981 if (p == sp) { in sppp_detach()
991 callout_stop(&sp->timeout[i]); in sppp_detach()
992 callout_stop(&sp->pap_my_to); in sppp_detach()
1001 struct sppp *sp = (struct sppp*) ifp; in sppp_flush() local
1003 ifq_purge_all(&sp->pp_if.if_snd); in sppp_flush()
1004 IF_DRAIN(&sp->pp_fastq); in sppp_flush()
1005 IF_DRAIN(&sp->pp_cpq); in sppp_flush()
1014 struct sppp *sp = (struct sppp*) ifp; in sppp_isempty() local
1018 empty = IF_QEMPTY(&sp->pp_fastq) && IF_QEMPTY(&sp->pp_cpq) && in sppp_isempty()
1019 ifsq_is_empty(ifq_get_subq_default(&sp->pp_if.if_snd)); in sppp_isempty()
1030 struct sppp *sp = (struct sppp*) ifp; in sppp_dequeue() local
1041 IF_DEQUEUE(&sp->pp_cpq, m); in sppp_dequeue()
1043 (sppp_ncp_check(sp) || sp->pp_mode == IFF_CISCO)) { in sppp_dequeue()
1044 IF_DEQUEUE(&sp->pp_fastq, m); in sppp_dequeue()
1047 ifq_get_subq_default(&sp->pp_if.if_snd)); in sppp_dequeue()
1061 struct sppp *sp = (struct sppp*)ifp; in sppp_pick() local
1066 m = sp->pp_cpq.ifq_head; in sppp_pick()
1068 (sp->pp_phase == PHASE_NETWORK || sp->pp_mode == IFF_CISCO)) { in sppp_pick()
1069 if ((m = sp->pp_fastq.ifq_head) == NULL) in sppp_pick()
1070 m = ifsq_poll(ifq_get_subq_default(&sp->pp_if.if_snd)); in sppp_pick()
1084 struct sppp *sp = (struct sppp*) ifp; in sppp_ioctl() local
1114 if (newmode != sp->pp_mode) { in sppp_ioctl()
1121 if (sp->pp_mode != IFF_CISCO) in sppp_ioctl()
1122 lcp.Close(sp); in sppp_ioctl()
1123 else if (sp->pp_tlf) in sppp_ioctl()
1124 (sp->pp_tlf)(sp); in sppp_ioctl()
1127 sp->pp_mode = newmode; in sppp_ioctl()
1131 if (sp->pp_mode != IFF_CISCO) in sppp_ioctl()
1132 lcp.Close(sp); in sppp_ioctl()
1133 sp->pp_mode = newmode; in sppp_ioctl()
1134 if (sp->pp_mode == 0) { in sppp_ioctl()
1136 lcp.Open(sp); in sppp_ioctl()
1138 if (sp->pp_mode == IFF_CISCO) { in sppp_ioctl()
1139 if (sp->pp_tls) in sppp_ioctl()
1140 (sp->pp_tls)(sp); in sppp_ioctl()
1152 if (ifr->ifr_mtu < 128 || ifr->ifr_mtu > sp->lcp.their_mru) { in sppp_ioctl()
1161 if (*(short*)data < 128 || *(short*)data > sp->lcp.their_mru) { in sppp_ioctl()
1184 rv = sppp_params(sp, cmd, data); in sppp_ioctl()
1203 sppp_cisco_input(struct sppp *sp, struct mbuf *m) in sppp_cisco_input() argument
1234 sp->pp_alivecnt = 0; in sppp_cisco_input()
1235 sp->pp_rseq[IDX_LCP] = ntohl (h->par1); in sppp_cisco_input()
1236 if (sp->pp_seq[IDX_LCP] == sp->pp_rseq[IDX_LCP]) { in sppp_cisco_input()
1239 if (sp->pp_loopcnt >= MAXALIVECNT) { in sppp_cisco_input()
1242 sp->pp_loopcnt = 0; in sppp_cisco_input()
1245 IF_DRAIN(&sp->pp_cpq); in sppp_cisco_input()
1248 ++sp->pp_loopcnt; in sppp_cisco_input()
1251 sp->pp_seq[IDX_LCP] = krandom(); in sppp_cisco_input()
1254 sp->pp_loopcnt = 0; in sppp_cisco_input()
1262 sppp_get_ip_addrs(sp, &me, 0, &mymask); in sppp_cisco_input()
1264 sppp_cisco_send(sp, CISCO_ADDR_REPLY, me, mymask); in sppp_cisco_input()
1273 sppp_cisco_send(struct sppp *sp, int type, long par1, long par2) in sppp_cisco_send() argument
1310 if (IF_QFULL (&sp->pp_cpq)) { in sppp_cisco_send()
1311 IF_DROP (&sp->pp_fastq); in sppp_cisco_send()
1314 IF_ENQUEUE (&sp->pp_cpq, m); in sppp_cisco_send()
1329 sppp_cp_send(struct sppp *sp, u_short proto, u_char type, in sppp_cp_send() argument
1367 if (IF_QFULL (&sp->pp_cpq)) { in sppp_cp_send()
1368 IF_DROP (&sp->pp_fastq); in sppp_cp_send()
1372 IF_ENQUEUE (&sp->pp_cpq, m); in sppp_cp_send()
1383 sppp_cp_input(const struct cp *cp, struct sppp *sp, struct mbuf *m) in sppp_cp_input() argument
1404 sppp_state_name(sp->state[cp->protoidx]), in sppp_cp_input()
1426 switch (sp->state[cp->protoidx]) { in sppp_cp_input()
1431 sppp_cp_send(sp, cp->proto, TERM_ACK, h->ident, in sppp_cp_input()
1435 rv = (cp->RCR)(sp, h, len); in sppp_cp_input()
1438 (cp->tld)(sp); in sppp_cp_input()
1439 sppp_lcp_tlf(sp); in sppp_cp_input()
1442 switch (sp->state[cp->protoidx]) { in sppp_cp_input()
1444 (cp->tld)(sp); in sppp_cp_input()
1445 (cp->scr)(sp); in sppp_cp_input()
1456 if (sp->state[cp->protoidx] == (rv ? STATE_ACK_SENT: in sppp_cp_input()
1459 sppp_cp_change_state(cp, sp, rv? in sppp_cp_input()
1463 sp->rst_counter[cp->protoidx] = sp->lcp.max_configure; in sppp_cp_input()
1464 (cp->scr)(sp); in sppp_cp_input()
1465 sppp_cp_change_state(cp, sp, rv? in sppp_cp_input()
1470 sppp_cp_change_state(cp, sp, STATE_OPENED); in sppp_cp_input()
1475 (cp->tlu)(sp); in sppp_cp_input()
1477 sppp_cp_change_state(cp, sp, STATE_ACK_RCVD); in sppp_cp_input()
1483 sppp_state_name(sp->state[cp->protoidx])); in sppp_cp_input()
1488 if (h->ident != sp->confid[cp->protoidx]) { in sppp_cp_input()
1492 h->ident, sp->confid[cp->protoidx]); in sppp_cp_input()
1496 switch (sp->state[cp->protoidx]) { in sppp_cp_input()
1499 sppp_cp_send(sp, cp->proto, TERM_ACK, h->ident, 0, 0); in sppp_cp_input()
1505 sp->rst_counter[cp->protoidx] = sp->lcp.max_configure; in sppp_cp_input()
1506 sppp_cp_change_state(cp, sp, STATE_ACK_RCVD); in sppp_cp_input()
1509 (cp->tld)(sp); in sppp_cp_input()
1512 (cp->scr)(sp); in sppp_cp_input()
1513 sppp_cp_change_state(cp, sp, STATE_REQ_SENT); in sppp_cp_input()
1516 sp->rst_counter[cp->protoidx] = sp->lcp.max_configure; in sppp_cp_input()
1517 sppp_cp_change_state(cp, sp, STATE_OPENED); in sppp_cp_input()
1521 (cp->tlu)(sp); in sppp_cp_input()
1527 sppp_state_name(sp->state[cp->protoidx])); in sppp_cp_input()
1533 if (h->ident != sp->confid[cp->protoidx]) { in sppp_cp_input()
1537 h->ident, sp->confid[cp->protoidx]); in sppp_cp_input()
1542 (cp->RCN_nak)(sp, h, len); in sppp_cp_input()
1544 (cp->RCN_rej)(sp, h, len); in sppp_cp_input()
1546 switch (sp->state[cp->protoidx]) { in sppp_cp_input()
1549 sppp_cp_send(sp, cp->proto, TERM_ACK, h->ident, 0, 0); in sppp_cp_input()
1553 sp->rst_counter[cp->protoidx] = sp->lcp.max_configure; in sppp_cp_input()
1559 if (sp->pp_loopcnt) in sppp_cp_input()
1561 (cp->scr)(sp); in sppp_cp_input()
1564 (cp->tld)(sp); in sppp_cp_input()
1567 sppp_cp_change_state(cp, sp, STATE_REQ_SENT); in sppp_cp_input()
1568 (cp->scr)(sp); in sppp_cp_input()
1577 sppp_state_name(sp->state[cp->protoidx])); in sppp_cp_input()
1583 switch (sp->state[cp->protoidx]) { in sppp_cp_input()
1586 sppp_cp_change_state(cp, sp, STATE_REQ_SENT); in sppp_cp_input()
1598 sppp_cp_send(sp, cp->proto, TERM_ACK, h->ident, 0, 0); in sppp_cp_input()
1601 (cp->tld)(sp); in sppp_cp_input()
1602 sp->rst_counter[cp->protoidx] = 0; in sppp_cp_input()
1603 sppp_cp_change_state(cp, sp, STATE_STOPPING); in sppp_cp_input()
1610 sppp_state_name(sp->state[cp->protoidx])); in sppp_cp_input()
1615 switch (sp->state[cp->protoidx]) { in sppp_cp_input()
1622 sppp_cp_change_state(cp, sp, STATE_CLOSED); in sppp_cp_input()
1623 (cp->tlf)(sp); in sppp_cp_input()
1626 sppp_cp_change_state(cp, sp, STATE_STOPPED); in sppp_cp_input()
1627 (cp->tlf)(sp); in sppp_cp_input()
1630 sppp_cp_change_state(cp, sp, STATE_REQ_SENT); in sppp_cp_input()
1633 (cp->tld)(sp); in sppp_cp_input()
1634 (cp->scr)(sp); in sppp_cp_input()
1635 sppp_cp_change_state(cp, sp, STATE_ACK_RCVD); in sppp_cp_input()
1641 sppp_state_name(sp->state[cp->protoidx])); in sppp_cp_input()
1652 switch (sp->state[cp->protoidx]) { in sppp_cp_input()
1662 sppp_cp_change_state(cp, sp, STATE_REQ_SENT); in sppp_cp_input()
1668 sppp_state_name(sp->state[cp->protoidx])); in sppp_cp_input()
1697 upper ? sppp_state_name(sp->state[upper->protoidx]) : "?"); in sppp_cp_input()
1704 if (sp->state[upper->protoidx] == STATE_REQ_SENT) { in sppp_cp_input()
1705 upper->Close(sp); in sppp_cp_input()
1711 switch (sp->state[cp->protoidx]) { in sppp_cp_input()
1721 sppp_cp_change_state(cp, sp, STATE_REQ_SENT); in sppp_cp_input()
1727 sppp_state_name(sp->state[cp->protoidx])); in sppp_cp_input()
1740 if (sp->state[cp->protoidx] != STATE_OPENED) { in sppp_cp_input()
1754 if ((sp->lcp.opts & (1 << LCP_OPT_MAGIC)) && in sppp_cp_input()
1755 ntohl (*(long*)(h+1)) == sp->lcp.magic) { in sppp_cp_input()
1758 sp->pp_loopcnt = MAXALIVECNT * 5; in sppp_cp_input()
1760 IF_DRAIN(&sp->pp_cpq); in sppp_cp_input()
1764 lcp.Down(sp); in sppp_cp_input()
1765 lcp.Up(sp); in sppp_cp_input()
1768 *(long*)(h+1) = htonl (sp->lcp.magic); in sppp_cp_input()
1772 sppp_cp_send (sp, PPP_LCP, ECHO_REPLY, h->ident, len-4, h+1); in sppp_cp_input()
1777 if (h->ident != sp->lcp.echoid) { in sppp_cp_input()
1791 if (!(sp->lcp.opts & (1 << LCP_OPT_MAGIC)) || in sppp_cp_input()
1792 ntohl (*(long*)(h+1)) != sp->lcp.magic) in sppp_cp_input()
1793 sp->pp_alivecnt = 0; in sppp_cp_input()
1801 sppp_cp_send(sp, cp->proto, CODE_REJ, in sppp_cp_input()
1802 ++sp->pp_seq[cp->protoidx], m->m_pkthdr.len, h); in sppp_cp_input()
1813 sppp_up_event(const struct cp *cp, struct sppp *sp) in sppp_up_event() argument
1820 sppp_state_name(sp->state[cp->protoidx])); in sppp_up_event()
1822 switch (sp->state[cp->protoidx]) { in sppp_up_event()
1824 sppp_cp_change_state(cp, sp, STATE_CLOSED); in sppp_up_event()
1827 sp->rst_counter[cp->protoidx] = sp->lcp.max_configure; in sppp_up_event()
1828 (cp->scr)(sp); in sppp_up_event()
1829 sppp_cp_change_state(cp, sp, STATE_REQ_SENT); in sppp_up_event()
1834 sppp_state_name(sp->state[cp->protoidx])); in sppp_up_event()
1839 sppp_down_event(const struct cp *cp, struct sppp *sp) in sppp_down_event() argument
1846 sppp_state_name(sp->state[cp->protoidx])); in sppp_down_event()
1848 switch (sp->state[cp->protoidx]) { in sppp_down_event()
1851 sppp_cp_change_state(cp, sp, STATE_INITIAL); in sppp_down_event()
1854 sppp_cp_change_state(cp, sp, STATE_STARTING); in sppp_down_event()
1855 (cp->tls)(sp); in sppp_down_event()
1861 sppp_cp_change_state(cp, sp, STATE_STARTING); in sppp_down_event()
1864 (cp->tld)(sp); in sppp_down_event()
1865 sppp_cp_change_state(cp, sp, STATE_STARTING); in sppp_down_event()
1870 sppp_state_name(sp->state[cp->protoidx])); in sppp_down_event()
1876 sppp_open_event(const struct cp *cp, struct sppp *sp) in sppp_open_event() argument
1883 sppp_state_name(sp->state[cp->protoidx])); in sppp_open_event()
1885 switch (sp->state[cp->protoidx]) { in sppp_open_event()
1887 sppp_cp_change_state(cp, sp, STATE_STARTING); in sppp_open_event()
1888 (cp->tls)(sp); in sppp_open_event()
1893 sp->rst_counter[cp->protoidx] = sp->lcp.max_configure; in sppp_open_event()
1894 (cp->scr)(sp); in sppp_open_event()
1895 sppp_cp_change_state(cp, sp, STATE_REQ_SENT); in sppp_open_event()
1909 sppp_cp_change_state(cp, sp, STATE_STARTING); in sppp_open_event()
1910 (cp->tls)(sp); in sppp_open_event()
1919 sppp_cp_change_state(cp, sp, STATE_STOPPING); in sppp_open_event()
1926 sppp_close_event(const struct cp *cp, struct sppp *sp) in sppp_close_event() argument
1933 sppp_state_name(sp->state[cp->protoidx])); in sppp_close_event()
1935 switch (sp->state[cp->protoidx]) { in sppp_close_event()
1941 sppp_cp_change_state(cp, sp, STATE_INITIAL); in sppp_close_event()
1942 (cp->tlf)(sp); in sppp_close_event()
1945 sppp_cp_change_state(cp, sp, STATE_CLOSED); in sppp_close_event()
1948 sppp_cp_change_state(cp, sp, STATE_CLOSING); in sppp_close_event()
1951 (cp->tld)(sp); in sppp_close_event()
1956 sp->rst_counter[cp->protoidx] = sp->lcp.max_terminate; in sppp_close_event()
1957 sppp_cp_send(sp, cp->proto, TERM_REQ, in sppp_close_event()
1958 ++sp->pp_seq[cp->protoidx], 0, 0); in sppp_close_event()
1959 sppp_cp_change_state(cp, sp, STATE_CLOSING); in sppp_close_event()
1965 sppp_to_event(const struct cp *cp, struct sppp *sp) in sppp_to_event() argument
1974 sppp_state_name(sp->state[cp->protoidx]), in sppp_to_event()
1975 sp->rst_counter[cp->protoidx]); in sppp_to_event()
1977 if (--sp->rst_counter[cp->protoidx] < 0) in sppp_to_event()
1979 switch (sp->state[cp->protoidx]) { in sppp_to_event()
1981 sppp_cp_change_state(cp, sp, STATE_CLOSED); in sppp_to_event()
1982 (cp->tlf)(sp); in sppp_to_event()
1985 sppp_cp_change_state(cp, sp, STATE_STOPPED); in sppp_to_event()
1986 (cp->tlf)(sp); in sppp_to_event()
1991 sppp_cp_change_state(cp, sp, STATE_STOPPED); in sppp_to_event()
1992 (cp->tlf)(sp); in sppp_to_event()
1997 switch (sp->state[cp->protoidx]) { in sppp_to_event()
2000 sppp_cp_send(sp, cp->proto, TERM_REQ, in sppp_to_event()
2001 ++sp->pp_seq[cp->protoidx], 0, 0); in sppp_to_event()
2002 callout_reset(&sp->timeout[cp->protoidx], in sppp_to_event()
2003 sp->lcp.timeout, cp->TO, sp); in sppp_to_event()
2007 (cp->scr)(sp); in sppp_to_event()
2009 sppp_cp_change_state(cp, sp, STATE_REQ_SENT); in sppp_to_event()
2012 (cp->scr)(sp); in sppp_to_event()
2013 callout_reset(&sp->timeout[cp->protoidx], in sppp_to_event()
2014 sp->lcp.timeout, cp->TO, sp); in sppp_to_event()
2026 sppp_cp_change_state(const struct cp *cp, struct sppp *sp, int newstate) in sppp_cp_change_state() argument
2028 sp->state[cp->protoidx] = newstate; in sppp_cp_change_state()
2029 callout_stop(&sp->timeout[cp->protoidx]); in sppp_cp_change_state()
2043 callout_reset(&sp->timeout[cp->protoidx], in sppp_cp_change_state()
2044 sp->lcp.timeout, cp->TO, sp); in sppp_cp_change_state()
2057 sppp_lcp_init(struct sppp *sp) in sppp_lcp_init() argument
2059 sp->lcp.opts = (1 << LCP_OPT_MAGIC); in sppp_lcp_init()
2060 sp->lcp.magic = 0; in sppp_lcp_init()
2061 sp->state[IDX_LCP] = STATE_INITIAL; in sppp_lcp_init()
2062 sp->fail_counter[IDX_LCP] = 0; in sppp_lcp_init()
2063 sp->pp_seq[IDX_LCP] = 0; in sppp_lcp_init()
2064 sp->pp_rseq[IDX_LCP] = 0; in sppp_lcp_init()
2065 sp->lcp.protos = 0; in sppp_lcp_init()
2066 sp->lcp.mru = sp->lcp.their_mru = PP_MTU; in sppp_lcp_init()
2069 sp->lcp.timeout = 3 * hz; in sppp_lcp_init()
2070 sp->lcp.max_terminate = 2; in sppp_lcp_init()
2071 sp->lcp.max_configure = 10; in sppp_lcp_init()
2072 sp->lcp.max_failure = 10; in sppp_lcp_init()
2073 callout_init(&sp->timeout[IDX_LCP]); in sppp_lcp_init()
2077 sppp_lcp_up(struct sppp *sp) in sppp_lcp_up() argument
2081 sp->pp_alivecnt = 0; in sppp_lcp_up()
2082 sp->lcp.opts = (1 << LCP_OPT_MAGIC); in sppp_lcp_up()
2083 sp->lcp.magic = 0; in sppp_lcp_up()
2084 sp->lcp.protos = 0; in sppp_lcp_up()
2085 sp->lcp.mru = sp->lcp.their_mru = PP_MTU; in sppp_lcp_up()
2096 if (sp->state[IDX_LCP] == STATE_INITIAL) { in sppp_lcp_up()
2099 sp->pp_flags |= PP_CALLIN; in sppp_lcp_up()
2100 lcp.Open(sp); in sppp_lcp_up()
2104 (sp->state[IDX_LCP] == STATE_INITIAL)) { in sppp_lcp_up()
2106 lcp.Open(sp); in sppp_lcp_up()
2109 sppp_up_event(&lcp, sp); in sppp_lcp_up()
2113 sppp_lcp_down(struct sppp *sp) in sppp_lcp_down() argument
2117 sppp_down_event(&lcp, sp); in sppp_lcp_down()
2136 sp->pp_flags &= ~PP_CALLIN; in sppp_lcp_down()
2137 if (sp->state[IDX_LCP] != STATE_INITIAL) in sppp_lcp_down()
2138 lcp.Close(sp); in sppp_lcp_down()
2144 sppp_lcp_open(struct sppp *sp) in sppp_lcp_open() argument
2149 if (sp->hisauth.proto != 0) in sppp_lcp_open()
2150 sp->lcp.opts |= (1 << LCP_OPT_AUTH_PROTO); in sppp_lcp_open()
2152 sp->lcp.opts &= ~(1 << LCP_OPT_AUTH_PROTO); in sppp_lcp_open()
2153 sp->pp_flags &= ~PP_NEEDAUTH; in sppp_lcp_open()
2154 sppp_open_event(&lcp, sp); in sppp_lcp_open()
2158 sppp_lcp_close(struct sppp *sp) in sppp_lcp_close() argument
2160 sppp_close_event(&lcp, sp); in sppp_lcp_close()
2176 sppp_lcp_RCR(struct sppp *sp, struct lcp_header *h, int len) in sppp_lcp_RCR() argument
2241 if (sp->myauth.proto == 0) { in sppp_lcp_RCR()
2252 sp->pp_flags |= PP_NEEDAUTH; in sppp_lcp_RCR()
2268 sppp_cp_send (sp, PPP_LCP, CONF_REJ, h->ident, rlen, buf); in sppp_lcp_RCR()
2291 if (nmagic != sp->lcp.magic) { in sppp_lcp_RCR()
2292 sp->pp_loopcnt = 0; in sppp_lcp_RCR()
2297 if (debug && sp->pp_loopcnt < MAXALIVECNT*5) in sppp_lcp_RCR()
2299 ++sp->pp_loopcnt; in sppp_lcp_RCR()
2305 nmagic = ~sp->lcp.magic; in sppp_lcp_RCR()
2335 sp->lcp.their_mru = p[2] * 256 + p[3]; in sppp_lcp_RCR()
2337 log(-1, "%lu ", sp->lcp.their_mru); in sppp_lcp_RCR()
2342 if (sp->myauth.proto != authproto) { in sppp_lcp_RCR()
2346 sppp_proto_name(sp->hisauth.proto), in sppp_lcp_RCR()
2348 p[2] = sp->myauth.proto >> 8; in sppp_lcp_RCR()
2349 p[3] = sp->myauth.proto; in sppp_lcp_RCR()
2369 if (sp->pp_loopcnt >= MAXALIVECNT*5) { in sppp_lcp_RCR()
2370 if (sp->pp_loopcnt == MAXALIVECNT*5) in sppp_lcp_RCR()
2375 IF_DRAIN(&sp->pp_cpq); in sppp_lcp_RCR()
2377 lcp.Down(sp); in sppp_lcp_RCR()
2378 lcp.Up(sp); in sppp_lcp_RCR()
2380 } else if (++sp->fail_counter[IDX_LCP] >= sp->lcp.max_failure) { in sppp_lcp_RCR()
2384 sp->lcp.max_failure); in sppp_lcp_RCR()
2385 sppp_cp_send(sp, PPP_LCP, CONF_REJ, h->ident, rlen, buf); in sppp_lcp_RCR()
2389 sppp_cp_send (sp, PPP_LCP, CONF_NAK, h->ident, rlen, buf); in sppp_lcp_RCR()
2394 sp->fail_counter[IDX_LCP] = 0; in sppp_lcp_RCR()
2395 sp->pp_loopcnt = 0; in sppp_lcp_RCR()
2396 sppp_cp_send (sp, PPP_LCP, CONF_ACK, in sppp_lcp_RCR()
2413 sppp_lcp_RCN_rej(struct sppp *sp, struct lcp_header *h, int len) in sppp_lcp_RCN_rej() argument
2442 sp->lcp.opts &= ~(1 << LCP_OPT_MAGIC); in sppp_lcp_RCN_rej()
2443 sp->lcp.magic = 0; in sppp_lcp_RCN_rej()
2451 sp->lcp.opts &= ~(1 << LCP_OPT_MRU); in sppp_lcp_RCN_rej()
2459 if ((sp->pp_flags & PP_CALLIN) == 0 && in sppp_lcp_RCN_rej()
2460 (sp->hisauth.flags & AUTHFLAG_NOCALLOUT) != 0) { in sppp_lcp_RCN_rej()
2464 sp->lcp.opts &= ~(1 << LCP_OPT_AUTH_PROTO); in sppp_lcp_RCN_rej()
2469 lcp.Close(sp); in sppp_lcp_RCN_rej()
2485 sppp_lcp_RCN_nak(struct sppp *sp, struct lcp_header *h, int len) in sppp_lcp_RCN_nak() argument
2515 if ((sp->lcp.opts & (1 << LCP_OPT_MAGIC)) && in sppp_lcp_RCN_nak()
2524 if (magic == ~sp->lcp.magic) { in sppp_lcp_RCN_nak()
2527 sp->lcp.magic = krandom(); in sppp_lcp_RCN_nak()
2529 sp->lcp.magic = magic; in sppp_lcp_RCN_nak()
2547 sp->lcp.mru = mru; in sppp_lcp_RCN_nak()
2548 sp->lcp.opts |= (1 << LCP_OPT_MRU); in sppp_lcp_RCN_nak()
2558 lcp.Close(sp); in sppp_lcp_RCN_nak()
2570 sppp_lcp_tlu(struct sppp *sp) in sppp_lcp_tlu() argument
2586 (cps[i])->Open(sp); in sppp_lcp_tlu()
2588 if ((sp->lcp.opts & (1 << LCP_OPT_AUTH_PROTO)) != 0 || in sppp_lcp_tlu()
2589 (sp->pp_flags & PP_NEEDAUTH) != 0) in sppp_lcp_tlu()
2590 sp->pp_phase = PHASE_AUTHENTICATE; in sppp_lcp_tlu()
2592 sp->pp_phase = PHASE_NETWORK; in sppp_lcp_tlu()
2596 sppp_phase_name(sp->pp_phase)); in sppp_lcp_tlu()
2607 (cps[i])->Open(sp); in sppp_lcp_tlu()
2609 if (sp->pp_phase == PHASE_NETWORK) { in sppp_lcp_tlu()
2621 (sp->confflags & CONF_ENABLE_IPV6))) in sppp_lcp_tlu()
2622 (cps[i])->Open(sp); in sppp_lcp_tlu()
2627 if ((sp->lcp.protos & mask) && ((cps[i])->flags & CP_LCP) == 0) in sppp_lcp_tlu()
2628 (cps[i])->Up(sp); in sppp_lcp_tlu()
2631 if (sp->pp_chg) in sppp_lcp_tlu()
2632 sp->pp_chg(sp, (int)sp->pp_phase); in sppp_lcp_tlu()
2634 if (sp->pp_phase == PHASE_NETWORK) in sppp_lcp_tlu()
2636 sppp_lcp_check_and_close(sp); in sppp_lcp_tlu()
2640 sppp_lcp_tld(struct sppp *sp) in sppp_lcp_tld() argument
2646 sp->pp_phase = PHASE_TERMINATE; in sppp_lcp_tld()
2650 sppp_phase_name(sp->pp_phase)); in sppp_lcp_tld()
2659 if ((sp->lcp.protos & mask) && ((cps[i])->flags & CP_LCP) == 0) { in sppp_lcp_tld()
2660 (cps[i])->Down(sp); in sppp_lcp_tld()
2661 (cps[i])->Close(sp); in sppp_lcp_tld()
2666 sppp_lcp_tls(struct sppp *sp) in sppp_lcp_tls() argument
2670 sp->pp_phase = PHASE_ESTABLISH; in sppp_lcp_tls()
2674 sppp_phase_name(sp->pp_phase)); in sppp_lcp_tls()
2677 if (sp->pp_tls) in sppp_lcp_tls()
2678 (sp->pp_tls)(sp); in sppp_lcp_tls()
2680 (sp->pp_up)(sp); in sppp_lcp_tls()
2684 sppp_lcp_tlf(struct sppp *sp) in sppp_lcp_tlf() argument
2688 sp->pp_phase = PHASE_DEAD; in sppp_lcp_tlf()
2691 sppp_phase_name(sp->pp_phase)); in sppp_lcp_tlf()
2694 if (sp->pp_tlf) in sppp_lcp_tlf()
2695 (sp->pp_tlf)(sp); in sppp_lcp_tlf()
2697 (sp->pp_down)(sp); in sppp_lcp_tlf()
2701 sppp_lcp_scr(struct sppp *sp) in sppp_lcp_scr() argument
2707 if (sp->lcp.opts & (1 << LCP_OPT_MAGIC)) { in sppp_lcp_scr()
2708 if (! sp->lcp.magic) in sppp_lcp_scr()
2709 sp->lcp.magic = krandom(); in sppp_lcp_scr()
2712 opt[i++] = sp->lcp.magic >> 24; in sppp_lcp_scr()
2713 opt[i++] = sp->lcp.magic >> 16; in sppp_lcp_scr()
2714 opt[i++] = sp->lcp.magic >> 8; in sppp_lcp_scr()
2715 opt[i++] = sp->lcp.magic; in sppp_lcp_scr()
2718 if (sp->lcp.opts & (1 << LCP_OPT_MRU)) { in sppp_lcp_scr()
2721 opt[i++] = sp->lcp.mru >> 8; in sppp_lcp_scr()
2722 opt[i++] = sp->lcp.mru; in sppp_lcp_scr()
2725 if (sp->lcp.opts & (1 << LCP_OPT_AUTH_PROTO)) { in sppp_lcp_scr()
2726 authproto = sp->hisauth.proto; in sppp_lcp_scr()
2735 sp->confid[IDX_LCP] = ++sp->pp_seq[IDX_LCP]; in sppp_lcp_scr()
2736 sppp_cp_send (sp, PPP_LCP, CONF_REQ, sp->confid[IDX_LCP], i, &opt); in sppp_lcp_scr()
2743 sppp_ncp_check(struct sppp *sp) in sppp_ncp_check() argument
2748 if ((sp->lcp.protos & mask) && (cps[i])->flags & CP_NCP) in sppp_ncp_check()
2758 sppp_lcp_check_and_close(struct sppp *sp) in sppp_lcp_check_and_close() argument
2761 if (sp->pp_phase < PHASE_NETWORK) in sppp_lcp_check_and_close()
2765 if (sppp_ncp_check(sp)) in sppp_lcp_check_and_close()
2768 lcp.Close(sp); in sppp_lcp_check_and_close()
2780 sppp_ipcp_init(struct sppp *sp) in sppp_ipcp_init() argument
2782 sp->ipcp.opts = 0; in sppp_ipcp_init()
2783 sp->ipcp.flags = 0; in sppp_ipcp_init()
2784 sp->state[IDX_IPCP] = STATE_INITIAL; in sppp_ipcp_init()
2785 sp->fail_counter[IDX_IPCP] = 0; in sppp_ipcp_init()
2786 sp->pp_seq[IDX_IPCP] = 0; in sppp_ipcp_init()
2787 sp->pp_rseq[IDX_IPCP] = 0; in sppp_ipcp_init()
2788 callout_init(&sp->timeout[IDX_IPCP]); in sppp_ipcp_init()
2792 sppp_ipcp_up(struct sppp *sp) in sppp_ipcp_up() argument
2794 sppp_up_event(&ipcp, sp); in sppp_ipcp_up()
2798 sppp_ipcp_down(struct sppp *sp) in sppp_ipcp_down() argument
2800 sppp_down_event(&ipcp, sp); in sppp_ipcp_down()
2804 sppp_ipcp_open(struct sppp *sp) in sppp_ipcp_open() argument
2809 sp->ipcp.flags &= ~(IPCP_HISADDR_SEEN | IPCP_MYADDR_SEEN | in sppp_ipcp_open()
2811 sp->ipcp.opts = 0; in sppp_ipcp_open()
2813 sppp_get_ip_addrs(sp, &myaddr, &hisaddr, 0); in sppp_ipcp_open()
2832 sp->ipcp.flags |= IPCP_MYADDR_DYN; in sppp_ipcp_open()
2833 sp->ipcp.opts |= (1 << IPCP_OPT_ADDRESS); in sppp_ipcp_open()
2835 sp->ipcp.flags |= IPCP_MYADDR_SEEN; in sppp_ipcp_open()
2836 if (sp->confflags & CONF_ENABLE_VJ) { in sppp_ipcp_open()
2837 sp->ipcp.opts |= (1 << IPCP_OPT_COMPRESSION); in sppp_ipcp_open()
2838 sp->ipcp.max_state = MAX_STATES - 1; in sppp_ipcp_open()
2839 sp->ipcp.compress_cid = 1; in sppp_ipcp_open()
2841 sppp_open_event(&ipcp, sp); in sppp_ipcp_open()
2845 sppp_ipcp_close(struct sppp *sp) in sppp_ipcp_close() argument
2847 sppp_close_event(&ipcp, sp); in sppp_ipcp_close()
2848 if (sp->ipcp.flags & IPCP_MYADDR_DYN) in sppp_ipcp_close()
2852 sppp_set_ip_addr(sp, 0L); in sppp_ipcp_close()
2868 sppp_ipcp_RCR(struct sppp *sp, struct lcp_header *h, int len) in sppp_ipcp_RCR() argument
2871 struct ifnet *ifp = &sp->pp_if; in sppp_ipcp_RCR()
2902 if (!(sp->confflags & CONF_ENABLE_VJ)) { in sppp_ipcp_RCR()
2953 sppp_cp_send (sp, PPP_IPCP, CONF_REJ, h->ident, rlen, buf); in sppp_ipcp_RCR()
2959 sppp_get_ip_addrs(sp, 0, &hisaddr, 0); in sppp_ipcp_RCR()
2975 sp->ipcp.flags |= IPCP_VJ; in sppp_ipcp_RCR()
2976 sl_compress_init(sp->pp_comp, p[4]); in sppp_ipcp_RCR()
2977 sp->ipcp.max_state = p[4]; in sppp_ipcp_RCR()
2978 sp->ipcp.compress_cid = p[5]; in sppp_ipcp_RCR()
2986 p[4] = sp->ipcp.max_state; in sppp_ipcp_RCR()
2987 p[5] = sp->ipcp.compress_cid; in sppp_ipcp_RCR()
3006 sp->ipcp.flags |= IPCP_HISADDR_SEEN; in sppp_ipcp_RCR()
3047 if (rlen == 0 && !(sp->ipcp.flags & IPCP_HISADDR_SEEN) && !gotmyaddr) { in sppp_ipcp_RCR()
3062 sppp_cp_send (sp, PPP_IPCP, CONF_NAK, h->ident, rlen, buf); in sppp_ipcp_RCR()
3066 sppp_cp_send (sp, PPP_IPCP, CONF_ACK, in sppp_ipcp_RCR()
3083 sppp_ipcp_RCN_rej(struct sppp *sp, struct lcp_header *h, int len) in sppp_ipcp_RCN_rej() argument
3086 struct ifnet *ifp = &sp->pp_if; in sppp_ipcp_RCN_rej()
3109 sp->ipcp.opts &= ~(1 << IPCP_OPT_COMPRESSION); in sppp_ipcp_RCN_rej()
3117 sp->ipcp.opts &= ~(1 << IPCP_OPT_ADDRESS); in sppp_ipcp_RCN_rej()
3133 sppp_ipcp_RCN_nak(struct sppp *sp, struct lcp_header *h, int len) in sppp_ipcp_RCN_nak() argument
3136 struct ifnet *ifp = &sp->pp_if; in sppp_ipcp_RCN_nak()
3167 sl_compress_init(sp->pp_comp, p[4]); in sppp_ipcp_RCN_nak()
3168 sp->ipcp.max_state = p[4]; in sppp_ipcp_RCN_nak()
3169 sp->ipcp.compress_cid = p[5]; in sppp_ipcp_RCN_nak()
3173 sp->ipcp.opts &= in sppp_ipcp_RCN_nak()
3186 sp->ipcp.opts |= (1 << IPCP_OPT_ADDRESS); in sppp_ipcp_RCN_nak()
3198 if (sp->ipcp.flags & IPCP_MYADDR_DYN) { in sppp_ipcp_RCN_nak()
3199 sppp_set_ip_addr(sp, wantaddr); in sppp_ipcp_RCN_nak()
3202 sp->ipcp.flags |= IPCP_MYADDR_SEEN; in sppp_ipcp_RCN_nak()
3215 sppp_ipcp_tlu(struct sppp *sp) in sppp_ipcp_tlu() argument
3218 if (sp->pp_con) in sppp_ipcp_tlu()
3219 sp->pp_con(sp); in sppp_ipcp_tlu()
3223 sppp_ipcp_tld(struct sppp *sp) in sppp_ipcp_tld() argument
3228 sppp_ipcp_tls(struct sppp *sp) in sppp_ipcp_tls() argument
3231 sp->lcp.protos |= (1 << IDX_IPCP); in sppp_ipcp_tls()
3235 sppp_ipcp_tlf(struct sppp *sp) in sppp_ipcp_tlf() argument
3238 sp->lcp.protos &= ~(1 << IDX_IPCP); in sppp_ipcp_tlf()
3239 sppp_lcp_check_and_close(sp); in sppp_ipcp_tlf()
3243 sppp_ipcp_scr(struct sppp *sp) in sppp_ipcp_scr() argument
3249 if (sp->ipcp.opts & (1 << IPCP_OPT_COMPRESSION)) { in sppp_ipcp_scr()
3254 opt[i++] = sp->ipcp.max_state; in sppp_ipcp_scr()
3255 opt[i++] = sp->ipcp.compress_cid; in sppp_ipcp_scr()
3257 if (sp->ipcp.opts & (1 << IPCP_OPT_ADDRESS)) { in sppp_ipcp_scr()
3258 sppp_get_ip_addrs(sp, &ouraddr, 0, 0); in sppp_ipcp_scr()
3267 sp->confid[IDX_IPCP] = ++sp->pp_seq[IDX_IPCP]; in sppp_ipcp_scr()
3268 sppp_cp_send(sp, PPP_IPCP, CONF_REQ, sp->confid[IDX_IPCP], i, &opt); in sppp_ipcp_scr()
3281 sppp_ipv6cp_init(struct sppp *sp) in sppp_ipv6cp_init() argument
3283 sp->ipv6cp.opts = 0; in sppp_ipv6cp_init()
3284 sp->ipv6cp.flags = 0; in sppp_ipv6cp_init()
3285 sp->state[IDX_IPV6CP] = STATE_INITIAL; in sppp_ipv6cp_init()
3286 sp->fail_counter[IDX_IPV6CP] = 0; in sppp_ipv6cp_init()
3287 sp->pp_seq[IDX_IPV6CP] = 0; in sppp_ipv6cp_init()
3288 sp->pp_rseq[IDX_IPV6CP] = 0; in sppp_ipv6cp_init()
3289 callout_init(&sp->timeout[IDX_IPV6CP]); in sppp_ipv6cp_init()
3293 sppp_ipv6cp_up(struct sppp *sp) in sppp_ipv6cp_up() argument
3295 sppp_up_event(&ipv6cp, sp); in sppp_ipv6cp_up()
3299 sppp_ipv6cp_down(struct sppp *sp) in sppp_ipv6cp_down() argument
3301 sppp_down_event(&ipv6cp, sp); in sppp_ipv6cp_down()
3305 sppp_ipv6cp_open(struct sppp *sp) in sppp_ipv6cp_open() argument
3311 sp->ipv6cp.flags &= ~(IPV6CP_MYIFID_SEEN|IPV6CP_MYIFID_DYN); in sppp_ipv6cp_open()
3313 sp->ipv6cp.flags &= ~IPV6CP_MYIFID_SEEN; in sppp_ipv6cp_open()
3316 sppp_get_ip6_addrs(sp, &myaddr, &hisaddr, 0); in sppp_ipv6cp_open()
3331 sp->ipv6cp.flags |= IPV6CP_MYIFID_SEEN; in sppp_ipv6cp_open()
3332 sp->ipv6cp.opts |= (1 << IPV6CP_OPT_IFID); in sppp_ipv6cp_open()
3333 sppp_open_event(&ipv6cp, sp); in sppp_ipv6cp_open()
3337 sppp_ipv6cp_close(struct sppp *sp) in sppp_ipv6cp_close() argument
3339 sppp_close_event(&ipv6cp, sp); in sppp_ipv6cp_close()
3355 sppp_ipv6cp_RCR(struct sppp *sp, struct lcp_header *h, int len) in sppp_ipv6cp_RCR() argument
3358 struct ifnet *ifp = &sp->pp_if; in sppp_ipv6cp_RCR()
3423 sppp_cp_send (sp, PPP_IPV6CP, CONF_REJ, h->ident, rlen, buf); in sppp_ipv6cp_RCR()
3429 sppp_get_ip6_addrs(sp, &myaddr, 0, 0); in sppp_ipv6cp_RCR()
3452 desiredaddr.s6_addr16[1] = htons(sp->pp_if.if_index); in sppp_ipv6cp_RCR()
3478 sppp_suggest_ip6_addr(sp, &suggestaddr); in sppp_ipv6cp_RCR()
3495 sppp_cp_send (sp, PPP_IPV6CP, type, h->ident, origlen, h+1); in sppp_ipv6cp_RCR()
3506 sppp_cp_send (sp, PPP_IPV6CP, type, h->ident, rlen, buf); in sppp_ipv6cp_RCR()
3523 sppp_ipv6cp_RCN_rej(struct sppp *sp, struct lcp_header *h, int len) in sppp_ipv6cp_RCN_rej() argument
3526 struct ifnet *ifp = &sp->pp_if; in sppp_ipv6cp_RCN_rej()
3552 sp->ipv6cp.opts &= ~(1 << IPV6CP_OPT_IFID); in sppp_ipv6cp_RCN_rej()
3556 sp->ipv6cp.opts &= ~(1 << IPV6CP_OPT_COMPRESS); in sppp_ipv6cp_RCN_rej()
3573 sppp_ipv6cp_RCN_nak(struct sppp *sp, struct lcp_header *h, int len) in sppp_ipv6cp_RCN_nak() argument
3576 struct ifnet *ifp = &sp->pp_if; in sppp_ipv6cp_RCN_nak()
3608 suggestaddr.s6_addr16[1] = htons(sp->pp_if.if_index); in sppp_ipv6cp_RCN_nak()
3611 sp->ipv6cp.opts |= (1 << IPV6CP_OPT_IFID); in sppp_ipv6cp_RCN_nak()
3620 if (sp->ipv6cp.flags & IPV6CP_MYIFID_DYN) { in sppp_ipv6cp_RCN_nak()
3633 sppp_gen_ip6_addr(sp, &suggestaddr); in sppp_ipv6cp_RCN_nak()
3635 sppp_set_ip6_addr(sp, &suggestaddr, 0); in sppp_ipv6cp_RCN_nak()
3638 sp->ipv6cp.flags |= IPV6CP_MYIFID_SEEN; in sppp_ipv6cp_RCN_nak()
3670 sppp_ipv6cp_tlu(struct sppp *sp) in sppp_ipv6cp_tlu() argument
3673 if (sp->pp_con) in sppp_ipv6cp_tlu()
3674 sp->pp_con(sp); in sppp_ipv6cp_tlu()
3678 sppp_ipv6cp_tld(struct sppp *sp) in sppp_ipv6cp_tld() argument
3683 sppp_ipv6cp_tls(struct sppp *sp) in sppp_ipv6cp_tls() argument
3686 sp->lcp.protos |= (1 << IDX_IPV6CP); in sppp_ipv6cp_tls()
3690 sppp_ipv6cp_tlf(struct sppp *sp) in sppp_ipv6cp_tlf() argument
3695 sp->lcp.protos &= ~(1 << IDX_IPV6CP); in sppp_ipv6cp_tlf()
3696 sppp_lcp_check_and_close(sp); in sppp_ipv6cp_tlf()
3701 sppp_ipv6cp_scr(struct sppp *sp) in sppp_ipv6cp_scr() argument
3707 if (sp->ipv6cp.opts & (1 << IPV6CP_OPT_IFID)) { in sppp_ipv6cp_scr()
3708 sppp_get_ip6_addrs(sp, &ouraddr, 0, 0); in sppp_ipv6cp_scr()
3716 if (sp->ipv6cp.opts & (1 << IPV6CP_OPT_COMPRESSION)) { in sppp_ipv6cp_scr()
3725 sp->confid[IDX_IPV6CP] = ++sp->pp_seq[IDX_IPV6CP]; in sppp_ipv6cp_scr()
3726 sppp_cp_send(sp, PPP_IPV6CP, CONF_REQ, sp->confid[IDX_IPV6CP], i, &opt); in sppp_ipv6cp_scr()
3730 sppp_ipv6cp_init(struct sppp *sp) in sppp_ipv6cp_init() argument
3735 sppp_ipv6cp_up(struct sppp *sp) in sppp_ipv6cp_up() argument
3740 sppp_ipv6cp_down(struct sppp *sp) in sppp_ipv6cp_down() argument
3746 sppp_ipv6cp_open(struct sppp *sp) in sppp_ipv6cp_open() argument
3751 sppp_ipv6cp_close(struct sppp *sp) in sppp_ipv6cp_close() argument
3756 sppp_ipv6cp_TO(void *sp) in sppp_ipv6cp_TO() argument
3761 sppp_ipv6cp_RCR(struct sppp *sp, struct lcp_header *h, int len) in sppp_ipv6cp_RCR() argument
3767 sppp_ipv6cp_RCN_rej(struct sppp *sp, struct lcp_header *h, int len) in sppp_ipv6cp_RCN_rej() argument
3772 sppp_ipv6cp_RCN_nak(struct sppp *sp, struct lcp_header *h, int len) in sppp_ipv6cp_RCN_nak() argument
3777 sppp_ipv6cp_tlu(struct sppp *sp) in sppp_ipv6cp_tlu() argument
3782 sppp_ipv6cp_tld(struct sppp *sp) in sppp_ipv6cp_tld() argument
3787 sppp_ipv6cp_tls(struct sppp *sp) in sppp_ipv6cp_tls() argument
3792 sppp_ipv6cp_tlf(struct sppp *sp) in sppp_ipv6cp_tlf() argument
3797 sppp_ipv6cp_scr(struct sppp *sp) in sppp_ipv6cp_scr() argument
3891 sppp_chap_input(struct sppp *sp, struct mbuf *m) in sppp_chap_input() argument
3948 MD5Update(&ctx, sp->myauth.secret, in sppp_chap_input()
3949 strnlen(sp->myauth.secret, AUTHKEYLEN)); in sppp_chap_input()
3954 sppp_auth_send(&chap, sp, CHAP_RESPONSE, h->ident, in sppp_chap_input()
3957 (size_t)strnlen(sp->myauth.name, AUTHNAMELEN), in sppp_chap_input()
3958 sp->myauth.name, in sppp_chap_input()
3975 sp->pp_flags &= ~PP_NEEDAUTH; in sppp_chap_input()
3976 if (sp->myauth.proto == PPP_CHAP && in sppp_chap_input()
3977 (sp->lcp.opts & (1 << LCP_OPT_AUTH_PROTO)) && in sppp_chap_input()
3978 (sp->lcp.protos & (1 << IDX_CHAP)) == 0) { in sppp_chap_input()
3988 sppp_phase_network(sp); in sppp_chap_input()
4025 if (h->ident != sp->confid[IDX_CHAP]) { in sppp_chap_input()
4031 h->ident, sp->confid[IDX_CHAP]); in sppp_chap_input()
4034 if (name_len != strnlen(sp->hisauth.name, AUTHNAMELEN) in sppp_chap_input()
4035 || bcmp(name, sp->hisauth.name, name_len) != 0) { in sppp_chap_input()
4040 sppp_print_string(sp->hisauth.name, in sppp_chap_input()
4041 strnlen(sp->hisauth.name, AUTHNAMELEN)); in sppp_chap_input()
4048 sppp_state_name(sp->state[IDX_CHAP]), in sppp_chap_input()
4068 MD5Update(&ctx, sp->hisauth.secret, in sppp_chap_input()
4069 strnlen(sp->hisauth.secret, AUTHKEYLEN)); in sppp_chap_input()
4070 MD5Update(&ctx, sp->myauth.challenge, AUTHKEYLEN); in sppp_chap_input()
4079 sppp_auth_send(&chap, sp, CHAP_FAILURE, h->ident, in sppp_chap_input()
4082 chap.tld(sp); in sppp_chap_input()
4086 if (sp->state[IDX_CHAP] == STATE_REQ_SENT || in sppp_chap_input()
4087 sp->state[IDX_CHAP] == STATE_OPENED) in sppp_chap_input()
4088 sppp_auth_send(&chap, sp, CHAP_SUCCESS, h->ident, in sppp_chap_input()
4091 if (sp->state[IDX_CHAP] == STATE_REQ_SENT) { in sppp_chap_input()
4092 sppp_cp_change_state(&chap, sp, STATE_OPENED); in sppp_chap_input()
4093 chap.tlu(sp); in sppp_chap_input()
4103 sppp_state_name(sp->state[IDX_CHAP]), in sppp_chap_input()
4114 sppp_chap_init(struct sppp *sp) in sppp_chap_init() argument
4117 sp->state[IDX_CHAP] = STATE_CLOSED; in sppp_chap_init()
4118 sp->fail_counter[IDX_CHAP] = 0; in sppp_chap_init()
4119 sp->pp_seq[IDX_CHAP] = 0; in sppp_chap_init()
4120 sp->pp_rseq[IDX_CHAP] = 0; in sppp_chap_init()
4121 callout_init(&sp->timeout[IDX_CHAP]); in sppp_chap_init()
4125 sppp_chap_open(struct sppp *sp) in sppp_chap_open() argument
4127 if (sp->myauth.proto == PPP_CHAP && in sppp_chap_open()
4128 (sp->lcp.opts & (1 << LCP_OPT_AUTH_PROTO)) != 0) { in sppp_chap_open()
4130 chap.scr(sp); in sppp_chap_open()
4131 sp->rst_counter[IDX_CHAP] = sp->lcp.max_configure; in sppp_chap_open()
4132 sppp_cp_change_state(&chap, sp, STATE_REQ_SENT); in sppp_chap_open()
4138 sppp_chap_close(struct sppp *sp) in sppp_chap_close() argument
4140 if (sp->state[IDX_CHAP] != STATE_CLOSED) in sppp_chap_close()
4141 sppp_cp_change_state(&chap, sp, STATE_CLOSED); in sppp_chap_close()
4147 struct sppp *sp = (struct sppp *)cookie; in sppp_chap_TO() local
4155 sppp_state_name(sp->state[IDX_CHAP]), in sppp_chap_TO()
4156 sp->rst_counter[IDX_CHAP]); in sppp_chap_TO()
4158 if (--sp->rst_counter[IDX_CHAP] < 0) in sppp_chap_TO()
4160 switch (sp->state[IDX_CHAP]) { in sppp_chap_TO()
4162 chap.tld(sp); in sppp_chap_TO()
4163 sppp_cp_change_state(&chap, sp, STATE_CLOSED); in sppp_chap_TO()
4168 switch (sp->state[IDX_CHAP]) { in sppp_chap_TO()
4171 sp->rst_counter[IDX_CHAP] = sp->lcp.max_configure; in sppp_chap_TO()
4174 chap.scr(sp); in sppp_chap_TO()
4176 sppp_cp_change_state(&chap, sp, STATE_REQ_SENT); in sppp_chap_TO()
4184 sppp_chap_tlu(struct sppp *sp) in sppp_chap_tlu() argument
4190 sp->rst_counter[IDX_CHAP] = sp->lcp.max_configure; in sppp_chap_tlu()
4198 if ((sp->hisauth.flags & AUTHFLAG_NORECHALLENGE) == 0) { in sppp_chap_tlu()
4204 callout_reset(&sp->timeout[IDX_CHAP], i * hz, chap.TO, sp); in sppp_chap_tlu()
4211 sp->pp_phase == PHASE_NETWORK? "reconfirmed": "tlu"); in sppp_chap_tlu()
4212 if ((sp->hisauth.flags & AUTHFLAG_NORECHALLENGE) == 0) in sppp_chap_tlu()
4221 sp->lcp.protos |= (1 << IDX_CHAP); in sppp_chap_tlu()
4223 if (sp->pp_flags & PP_NEEDAUTH) { in sppp_chap_tlu()
4239 if (sp->pp_phase != PHASE_NETWORK) in sppp_chap_tlu()
4240 sppp_phase_network(sp); in sppp_chap_tlu()
4244 sppp_chap_tld(struct sppp *sp) in sppp_chap_tld() argument
4250 callout_stop(&sp->timeout[IDX_CHAP]); in sppp_chap_tld()
4251 sp->lcp.protos &= ~(1 << IDX_CHAP); in sppp_chap_tld()
4253 lcp.Close(sp); in sppp_chap_tld()
4257 sppp_chap_scr(struct sppp *sp) in sppp_chap_scr() argument
4263 ch = (u_long *)sp->myauth.challenge; in sppp_chap_scr()
4271 sp->confid[IDX_CHAP] = ++sp->pp_seq[IDX_CHAP]; in sppp_chap_scr()
4273 sppp_auth_send(&chap, sp, CHAP_CHALLENGE, sp->confid[IDX_CHAP], in sppp_chap_scr()
4275 (size_t)AUTHKEYLEN, sp->myauth.challenge, in sppp_chap_scr()
4276 (size_t)strnlen(sp->myauth.name, AUTHNAMELEN), in sppp_chap_scr()
4277 sp->myauth.name, in sppp_chap_scr()
4298 sppp_pap_input(struct sppp *sp, struct mbuf *m) in sppp_pap_input() argument
4346 sppp_state_name(sp->state[IDX_PAP]), in sppp_pap_input()
4354 if (name_len != strnlen(sp->hisauth.name, AUTHNAMELEN) || in sppp_pap_input()
4355 passwd_len != strnlen(sp->hisauth.secret, AUTHKEYLEN) || in sppp_pap_input()
4356 bcmp(name, sp->hisauth.name, name_len) != 0 || in sppp_pap_input()
4357 bcmp(passwd, sp->hisauth.secret, passwd_len) != 0) { in sppp_pap_input()
4360 sppp_auth_send(&pap, sp, PAP_NAK, h->ident, in sppp_pap_input()
4364 pap.tld(sp); in sppp_pap_input()
4368 if (sp->state[IDX_PAP] == STATE_REQ_SENT || in sppp_pap_input()
4369 sp->state[IDX_PAP] == STATE_OPENED) { in sppp_pap_input()
4371 sppp_auth_send(&pap, sp, PAP_ACK, h->ident, in sppp_pap_input()
4376 if (sp->state[IDX_PAP] == STATE_REQ_SENT) { in sppp_pap_input()
4377 sppp_cp_change_state(&pap, sp, STATE_OPENED); in sppp_pap_input()
4378 pap.tlu(sp); in sppp_pap_input()
4384 callout_stop(&sp->pap_my_to); in sppp_pap_input()
4399 sp->pp_flags &= ~PP_NEEDAUTH; in sppp_pap_input()
4400 if (sp->myauth.proto == PPP_PAP && in sppp_pap_input()
4401 (sp->lcp.opts & (1 << LCP_OPT_AUTH_PROTO)) && in sppp_pap_input()
4402 (sp->lcp.protos & (1 << IDX_PAP)) == 0) { in sppp_pap_input()
4416 sppp_phase_network(sp); in sppp_pap_input()
4420 callout_stop(&sp->pap_my_to); in sppp_pap_input()
4453 sppp_pap_init(struct sppp *sp) in sppp_pap_init() argument
4456 sp->state[IDX_PAP] = STATE_CLOSED; in sppp_pap_init()
4457 sp->fail_counter[IDX_PAP] = 0; in sppp_pap_init()
4458 sp->pp_seq[IDX_PAP] = 0; in sppp_pap_init()
4459 sp->pp_rseq[IDX_PAP] = 0; in sppp_pap_init()
4460 callout_init(&sp->timeout[IDX_PAP]); in sppp_pap_init()
4461 callout_init(&sp->pap_my_to); in sppp_pap_init()
4465 sppp_pap_open(struct sppp *sp) in sppp_pap_open() argument
4467 if (sp->hisauth.proto == PPP_PAP && in sppp_pap_open()
4468 (sp->lcp.opts & (1 << LCP_OPT_AUTH_PROTO)) != 0) { in sppp_pap_open()
4470 sp->rst_counter[IDX_PAP] = sp->lcp.max_configure; in sppp_pap_open()
4471 sppp_cp_change_state(&pap, sp, STATE_REQ_SENT); in sppp_pap_open()
4473 if (sp->myauth.proto == PPP_PAP) { in sppp_pap_open()
4475 pap.scr(sp); in sppp_pap_open()
4476 callout_reset(&sp->pap_my_to, sp->lcp.timeout, in sppp_pap_open()
4477 sppp_pap_my_TO, sp); in sppp_pap_open()
4482 sppp_pap_close(struct sppp *sp) in sppp_pap_close() argument
4484 if (sp->state[IDX_PAP] != STATE_CLOSED) in sppp_pap_close()
4485 sppp_cp_change_state(&pap, sp, STATE_CLOSED); in sppp_pap_close()
4495 struct sppp *sp = (struct sppp *)cookie; in sppp_pap_TO() local
4503 sppp_state_name(sp->state[IDX_PAP]), in sppp_pap_TO()
4504 sp->rst_counter[IDX_PAP]); in sppp_pap_TO()
4506 if (--sp->rst_counter[IDX_PAP] < 0) in sppp_pap_TO()
4508 switch (sp->state[IDX_PAP]) { in sppp_pap_TO()
4510 pap.tld(sp); in sppp_pap_TO()
4511 sppp_cp_change_state(&pap, sp, STATE_CLOSED); in sppp_pap_TO()
4516 switch (sp->state[IDX_PAP]) { in sppp_pap_TO()
4519 sppp_cp_change_state(&pap, sp, STATE_REQ_SENT); in sppp_pap_TO()
4534 struct sppp *sp = (struct sppp *)cookie; in sppp_pap_my_TO() local
4541 pap.scr(sp); in sppp_pap_my_TO()
4545 sppp_pap_tlu(struct sppp *sp) in sppp_pap_tlu() argument
4549 sp->rst_counter[IDX_PAP] = sp->lcp.max_configure; in sppp_pap_tlu()
4558 sp->lcp.protos |= (1 << IDX_PAP); in sppp_pap_tlu()
4560 if (sp->pp_flags & PP_NEEDAUTH) { in sppp_pap_tlu()
4570 sppp_phase_network(sp); in sppp_pap_tlu()
4574 sppp_pap_tld(struct sppp *sp) in sppp_pap_tld() argument
4580 callout_stop(&sp->timeout[IDX_PAP]); in sppp_pap_tld()
4581 callout_stop(&sp->pap_my_to); in sppp_pap_tld()
4582 sp->lcp.protos &= ~(1 << IDX_PAP); in sppp_pap_tld()
4584 lcp.Close(sp); in sppp_pap_tld()
4588 sppp_pap_scr(struct sppp *sp) in sppp_pap_scr() argument
4592 sp->confid[IDX_PAP] = ++sp->pp_seq[IDX_PAP]; in sppp_pap_scr()
4593 pwdlen = strnlen(sp->myauth.secret, AUTHKEYLEN); in sppp_pap_scr()
4594 idlen = strnlen(sp->myauth.name, AUTHNAMELEN); in sppp_pap_scr()
4596 sppp_auth_send(&pap, sp, PAP_REQ, sp->confid[IDX_PAP], in sppp_pap_scr()
4598 (size_t)idlen, sp->myauth.name, in sppp_pap_scr()
4600 (size_t)pwdlen, sp->myauth.secret, in sppp_pap_scr()
4620 sppp_auth_send(const struct cp *cp, struct sppp *sp, in sppp_auth_send() argument
4678 if (IF_QFULL (&sp->pp_cpq)) { in sppp_auth_send()
4679 IF_DROP (&sp->pp_fastq); in sppp_auth_send()
4683 IF_ENQUEUE (&sp->pp_cpq, m); in sppp_auth_send()
4696 struct sppp *sp; in sppp_keepalive() local
4700 for (sp=spppq; sp; sp=sp->pp_next) { in sppp_keepalive()
4701 struct ifnet *ifp = &sp->pp_if; in sppp_keepalive()
4704 if (! (sp->pp_flags & PP_KEEPALIVE) || in sppp_keepalive()
4709 if (sp->pp_mode != IFF_CISCO && in sppp_keepalive()
4710 sp->pp_phase < PHASE_AUTHENTICATE) in sppp_keepalive()
4713 if (sp->pp_alivecnt == MAXALIVECNT) { in sppp_keepalive()
4717 IF_DRAIN(&sp->pp_cpq); in sppp_keepalive()
4718 if (sp->pp_mode != IFF_CISCO) { in sppp_keepalive()
4721 lcp.Down(sp); in sppp_keepalive()
4723 lcp.Up(sp); in sppp_keepalive()
4727 if (sp->pp_alivecnt <= MAXALIVECNT) in sppp_keepalive()
4728 ++sp->pp_alivecnt; in sppp_keepalive()
4729 if (sp->pp_mode == IFF_CISCO) in sppp_keepalive()
4730 sppp_cisco_send (sp, CISCO_KEEPALIVE_REQ, in sppp_keepalive()
4731 ++sp->pp_seq[IDX_LCP], sp->pp_rseq[IDX_LCP]); in sppp_keepalive()
4732 else if (sp->pp_phase >= PHASE_AUTHENTICATE) { in sppp_keepalive()
4733 long nmagic = htonl (sp->lcp.magic); in sppp_keepalive()
4734 sp->lcp.echoid = ++sp->pp_seq[IDX_LCP]; in sppp_keepalive()
4735 sppp_cp_send (sp, PPP_LCP, ECHO_REQ, in sppp_keepalive()
4736 sp->lcp.echoid, 4, &nmagic); in sppp_keepalive()
4748 sppp_get_ip_addrs(struct sppp *sp, u_long *src, u_long *dst, u_long *srcmask) in sppp_get_ip_addrs() argument
4750 struct ifnet *ifp = &sp->pp_if; in sppp_get_ip_addrs()
4794 sppp_set_ip_addr(struct sppp *sp, u_long src) in sppp_set_ip_addr() argument
4849 sppp_get_ip6_addrs(struct sppp *sp, struct in6_addr *src, struct in6_addr *dst, in sppp_get_ip6_addrs() argument
4852 struct ifnet *ifp = &sp->pp_if; in sppp_get_ip6_addrs()
4900 sppp_gen_ip6_addr(struct sppp *sp, struct in6_addr *addr) in sppp_gen_ip6_addr() argument
4909 sppp_set_ip6_addr(struct sppp *sp, const struct in6_addr *src) in sppp_set_ip6_addr() argument
4949 sppp_suggest_ip6_addr(struct sppp *sp, struct in6_addr *suggest) in sppp_suggest_ip6_addr() argument
4954 sppp_get_ip6_addrs(sp, &myaddr, 0, 0); in sppp_suggest_ip6_addr()
4971 sppp_params(struct sppp *sp, u_long cmd, void *data) in sppp_params() argument
5008 spr->defs.pp_phase = sp->pp_phase; in sppp_params()
5009 spr->defs.enable_vj = (sp->confflags & CONF_ENABLE_VJ) != 0; in sppp_params()
5010 spr->defs.enable_ipv6 = (sp->confflags & CONF_ENABLE_IPV6) != 0; in sppp_params()
5011 spr->defs.lcp = sp->lcp; in sppp_params()
5012 spr->defs.ipcp = sp->ipcp; in sppp_params()
5013 spr->defs.ipv6cp = sp->ipv6cp; in sppp_params()
5014 spr->defs.myauth = sp->myauth; in sppp_params()
5015 spr->defs.hisauth = sp->hisauth; in sppp_params()
5026 spr->defs.lcp.timeout = sp->lcp.timeout * 1000 / hz; in sppp_params()
5060 if (sp->pp_phase != PHASE_DEAD && in sppp_params()
5061 sp->pp_phase != PHASE_ESTABLISH) { in sppp_params()
5076 bzero(&sp->myauth, sizeof sp->myauth); in sppp_params()
5079 sp->myauth.proto = spr->defs.myauth.proto; in sppp_params()
5080 bcopy(spr->defs.myauth.name, sp->myauth.name, AUTHNAMELEN); in sppp_params()
5082 bcopy(spr->defs.myauth.secret, sp->myauth.secret, in sppp_params()
5087 bzero(&sp->hisauth, sizeof sp->hisauth); in sppp_params()
5090 sp->hisauth.proto = spr->defs.hisauth.proto; in sppp_params()
5091 sp->hisauth.flags = spr->defs.hisauth.flags; in sppp_params()
5092 bcopy(spr->defs.hisauth.name, sp->hisauth.name, AUTHNAMELEN); in sppp_params()
5094 bcopy(spr->defs.hisauth.secret, sp->hisauth.secret, in sppp_params()
5099 sp->lcp.timeout = spr->defs.lcp.timeout * hz / 1000; in sppp_params()
5103 sp->confflags |= CONF_ENABLE_VJ; in sppp_params()
5105 sp->confflags &= ~CONF_ENABLE_VJ; in sppp_params()
5109 sp->confflags |= CONF_ENABLE_IPV6; in sppp_params()
5111 sp->confflags &= ~CONF_ENABLE_IPV6; in sppp_params()
5126 sppp_phase_network(struct sppp *sp) in sppp_phase_network() argument
5132 sp->pp_phase = PHASE_NETWORK; in sppp_phase_network()
5136 sppp_phase_name(sp->pp_phase)); in sppp_phase_network()
5141 (cps[i])->Open(sp); in sppp_phase_network()
5145 if ((sp->lcp.protos & mask) && ((cps[i])->flags & CP_NCP)) in sppp_phase_network()
5146 (cps[i])->Up(sp); in sppp_phase_network()
5149 sppp_lcp_check_and_close(sp); in sppp_phase_network()