| 1000 | } |
| 1001 | |
| 1002 | void |
| 1003 | sppp_attach(struct ifnet *ifp) |
| 1004 | { |
| 1005 | struct sppp *sp = IFP2SP(ifp); |
| 1006 | |
| 1007 | /* Initialize mtx lock */ |
| 1008 | mtx_init(&sp->mtx, "sppp", MTX_NETWORK_LOCK, MTX_DEF | MTX_RECURSE); |
| 1009 | |
| 1010 | /* Initialize keepalive handler. */ |
| 1011 | callout_init(&sp->keepalive_callout, 1); |
| 1012 | callout_reset(&sp->keepalive_callout, hz * 10, sppp_keepalive, |
| 1013 | (void *)sp); |
| 1014 | |
| 1015 | ifp->if_mtu = PP_MTU; |
| 1016 | ifp->if_flags = IFF_POINTOPOINT | IFF_MULTICAST; |
| 1017 | ifp->if_output = sppp_output; |
| 1018 | #if 0 |
| 1019 | sp->pp_flags = PP_KEEPALIVE; |
| 1020 | #endif |
| 1021 | ifp->if_snd.ifq_maxlen = 32; |
| 1022 | sp->pp_fastq.ifq_maxlen = 32; |
| 1023 | sp->pp_cpq.ifq_maxlen = 20; |
| 1024 | sp->pp_loopcnt = 0; |
| 1025 | sp->pp_alivecnt = 0; |
| 1026 | bzero(&sp->pp_seq[0], sizeof(sp->pp_seq)); |
| 1027 | bzero(&sp->pp_rseq[0], sizeof(sp->pp_rseq)); |
| 1028 | sp->pp_phase = PHASE_DEAD; |
| 1029 | sp->pp_up = sppp_pp_up; |
| 1030 | sp->pp_down = sppp_pp_down; |
| 1031 | if(!mtx_initialized(&sp->pp_cpq.ifq_mtx)) |
| 1032 | mtx_init(&sp->pp_cpq.ifq_mtx, "sppp_cpq", NULL, MTX_DEF); |
| 1033 | if(!mtx_initialized(&sp->pp_fastq.ifq_mtx)) |
| 1034 | mtx_init(&sp->pp_fastq.ifq_mtx, "sppp_fastq", NULL, MTX_DEF); |
| 1035 | sp->pp_last_recv = sp->pp_last_sent = time_uptime; |
| 1036 | sp->confflags = 0; |
| 1037 | #ifdef INET |
| 1038 | sp->confflags |= CONF_ENABLE_VJ; |
| 1039 | #endif |
| 1040 | #ifdef INET6 |
| 1041 | sp->confflags |= CONF_ENABLE_IPV6; |
| 1042 | #endif |
| 1043 | callout_init(&sp->ifstart_callout, 1); |
| 1044 | sp->if_start = ifp->if_start; |
| 1045 | ifp->if_start = sppp_ifstart; |
| 1046 | sp->pp_comp = malloc(sizeof(struct slcompress), M_TEMP, M_WAITOK); |
| 1047 | sl_compress_init(sp->pp_comp, -1); |
| 1048 | sppp_lcp_init(sp); |
| 1049 | sppp_ipcp_init(sp); |
| 1050 | sppp_ipv6cp_init(sp); |
| 1051 | sppp_pap_init(sp); |
| 1052 | sppp_chap_init(sp); |
| 1053 | } |
| 1054 | |
| 1055 | void |
| 1056 | sppp_detach(struct ifnet *ifp) |
no test coverage detected