1 /* $NetBSD: if_sppp.h,v 1.36 2021/05/14 08:41:25 yamaguchi Exp $ */ 2 3 /*- 4 * Copyright (c) 2002 The NetBSD Foundation, Inc. 5 * All rights reserved. 6 * 7 * This code is derived from software contributed to The NetBSD Foundation 8 * by Martin Husemann <martin@NetBSD.org>. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 * POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32 #ifndef _NET_IF_SPPP_H_ 33 #define _NET_IF_SPPP_H_ 34 35 /* ioctls used by the if_spppsubr.c driver */ 36 37 #include <sys/ioccom.h> 38 39 40 #define SPPP_AUTHPROTO_NONE 0 41 #define SPPP_AUTHPROTO_PAP 1 42 #define SPPP_AUTHPROTO_CHAP 2 43 #define SPPP_AUTHPROTO_NOCHG 3 44 45 #define SPPP_AUTHFLAG_NOCALLOUT 1 /* do not require authentication on */ 46 /* callouts */ 47 #define SPPP_AUTHFLAG_NORECHALLENGE 2 /* do not re-challenge CHAP */ 48 #define SPPP_AUTHFLAG_PASSIVEAUTHPROTO 4 /* use authproto proposed by peer */ 49 50 struct spppauthcfg { 51 char ifname[IFNAMSIZ]; /* pppoe interface name */ 52 u_int hisauth; /* one of SPPP_AUTHPROTO_* above */ 53 u_int myauth; /* one of SPPP_AUTHPROTO_* above */ 54 u_int myname_length; /* includes terminating 0 */ 55 u_int mysecret_length; /* includes terminating 0 */ 56 u_int hisname_length; /* includes terminating 0 */ 57 u_int hissecret_length; /* includes terminating 0 */ 58 u_int myauthflags; 59 u_int hisauthflags; 60 char *myname; 61 char *mysecret; 62 char *hisname; 63 char *hissecret; 64 }; 65 66 #define SPPPGETAUTHCFG _IOWR('i', 120, struct spppauthcfg) 67 #define SPPPSETAUTHCFG _IOW('i', 121, struct spppauthcfg) 68 69 struct sppplcpcfg { 70 char ifname[IFNAMSIZ]; /* pppoe interface name */ 71 int lcp_timeout; /* LCP timeout, in ticks */ 72 }; 73 74 #define SPPPGETLCPCFG _IOWR('i', 122, struct sppplcpcfg) 75 #define SPPPSETLCPCFG _IOW('i', 123, struct sppplcpcfg) 76 77 /* 78 * Don't change the order of this. Ordering the phases this way allows 79 * for a comparison of ``pp_phase >= PHASE_AUTHENTICATE'' in order to 80 * know whether LCP is up. 81 */ 82 #define SPPP_PHASE_DEAD 0 83 #define SPPP_PHASE_ESTABLISH 1 84 #define SPPP_PHASE_TERMINATE 2 85 #define SPPP_PHASE_AUTHENTICATE 3 86 #define SPPP_PHASE_NETWORK 4 87 88 struct spppstatus { 89 char ifname[IFNAMSIZ]; /* pppoe interface name */ 90 int phase; /* one of SPPP_PHASE_* above */ 91 }; 92 93 #define SPPPGETSTATUS _IOWR('i', 124, struct spppstatus) 94 95 struct spppstatusncp { 96 char ifname[IFNAMSIZ]; /* pppoe interface name */ 97 int phase; /* one of SPPP_PHASE_* above */ 98 int ncpup; /* != 0 if at least on NCP is up */ 99 }; 100 101 #define SPPPGETSTATUSNCP _IOWR('i', 134, struct spppstatusncp) 102 103 struct spppidletimeout { 104 char ifname[IFNAMSIZ]; /* pppoe interface name */ 105 time_t idle_seconds; /* number of seconds idle before 106 * disconnect, 0 to disable idle-timeout */ 107 }; 108 109 struct spppidletimeout50 { 110 char ifname[IFNAMSIZ]; /* pppoe interface name */ 111 uint32_t idle_seconds; /* number of seconds idle before 112 * disconnect, 0 to disable idle-timeout */ 113 }; 114 115 #define SPPPGETIDLETO _IOWR('i', 125, struct spppidletimeout) 116 #define SPPPSETIDLETO _IOW('i', 126, struct spppidletimeout) 117 #define __SPPPGETIDLETO50 _IOWR('i', 125, struct spppidletimeout50) 118 #define __SPPPSETIDLETO50 _IOW('i', 126, struct spppidletimeout50) 119 120 struct spppauthfailurestats { 121 char ifname[IFNAMSIZ]; /* pppoe interface name */ 122 int auth_failures; /* number of LCP failures since last successful TLU */ 123 int max_failures; /* max. allowed authorization failures */ 124 }; 125 126 #define SPPPGETAUTHFAILURES _IOWR('i', 127, struct spppauthfailurestats) 127 128 struct spppauthfailuresettings { 129 char ifname[IFNAMSIZ]; /* pppoe interface name */ 130 int max_failures; /* max. allowed authorization failures */ 131 }; 132 #define SPPPSETAUTHFAILURE _IOW('i', 128, struct spppauthfailuresettings) 133 134 /* set the DNS options we would like to query during PPP negotiation */ 135 struct spppdnssettings { 136 char ifname[IFNAMSIZ]; /* pppoe interface name */ 137 int query_dns; /* bitmask (bits 0 and 1) for DNS options to query in IPCP */ 138 }; 139 #define SPPPSETDNSOPTS _IOW('i', 129, struct spppdnssettings) 140 #define SPPPGETDNSOPTS _IOWR('i', 130, struct spppdnssettings) 141 142 /* get the DNS addresses we received from the peer */ 143 struct spppdnsaddrs { 144 char ifname[IFNAMSIZ]; /* pppoe interface name */ 145 uint32_t dns[2]; /* IP addresses */ 146 }; 147 148 #define SPPPGETDNSADDRS _IOWR('i', 131, struct spppdnsaddrs) 149 150 /* set LCP keepalive/timeout options */ 151 struct spppkeepalivesettings { 152 char ifname[IFNAMSIZ]; /* pppoe interface name */ 153 u_int maxalive; /* number of LCP echo req. w/o reply */ 154 time_t max_noreceive; /* (sec.) grace period before we start 155 sending LCP echo requests. */ 156 u_int alive_interval; /* number of keepalive between echo req. */ 157 }; 158 struct spppkeepalivesettings50 { 159 char ifname[IFNAMSIZ]; /* pppoe interface name */ 160 u_int maxalive; /* number of LCP echo req. w/o reply */ 161 uint32_t max_noreceive; /* (sec.) grace period before we start 162 sending LCP echo requests. */ 163 }; 164 #define SPPPSETKEEPALIVE _IOW('i', 132, struct spppkeepalivesettings) 165 #define SPPPGETKEEPALIVE _IOWR('i', 133, struct spppkeepalivesettings) 166 #define __SPPPSETKEEPALIVE50 _IOW('i', 132, struct spppkeepalivesettings50) 167 #define __SPPPGETKEEPALIVE50 _IOWR('i', 133, struct spppkeepalivesettings50) 168 169 /* 134 already used! */ 170 171 /* states are named and numbered according to RFC 1661 */ 172 #define SPPP_STATE_INITIAL 0 173 #define SPPP_STATE_STARTING 1 174 #define SPPP_STATE_CLOSED 2 175 #define SPPP_STATE_STOPPED 3 176 #define SPPP_STATE_CLOSING 4 177 #define SPPP_STATE_STOPPING 5 178 #define SPPP_STATE_REQ_SENT 6 179 #define SPPP_STATE_ACK_RCVD 7 180 #define SPPP_STATE_ACK_SENT 8 181 #define SPPP_STATE_OPENED 9 182 183 #define SPPP_LCP_OPT_MRU __BIT(1) 184 #define SPPP_LCP_OPT_ASYNC_MAP __BIT(2) 185 #define SPPP_LCP_OPT_AUTH_PROTO __BIT(3) 186 #define SPPP_LCP_OPT_QUAL_PROTO __BIT(4) 187 #define SPPP_LCP_OPT_MAGIC __BIT(5) 188 #define SPPP_LCP_OPT_RESERVED __BIT(6) 189 #define SPPP_LCP_OPT_PROTO_COMP __BIT(7) 190 #define SPPP_LCP_OPT_ADDR_COMP __BIT(8) 191 #define SPPP_LCP_OPT_FCS_ALTS __BIT(9) 192 #define SPPP_LCP_OPT_SELF_DESC_PAD __BIT(10) 193 #define SPPP_LCP_OPT_CALL_BACK __BIT(13) 194 #define SPPP_LCP_OPT_COMPOUND_FRMS __BIT(15) 195 #define SPPP_LCP_OPT_MP_MRRU __BIT(17) 196 #define SPPP_LCP_OPT_MP_SSNHF __BIT(18) 197 #define SPPP_LCP_OPT_MP_EID __BIT(19) 198 199 /* #define SPPP_OPT_ADDRESSES __BIT(0) */ 200 #define SPPP_IPCP_OPT_COMPRESSION __BIT(1) 201 #define SPPP_IPCP_OPT_ADDRESS __BIT(2) 202 #define SPPP_IPCP_OPT_PRIMDNS __BIT(3) 203 #define SPPP_IPCP_OPT_SECDNS __BIT(4) 204 205 #define SPPP_IPV6CP_OPT_IFID __BIT(1) 206 #define SPPP_IPV6CP_OPT_COMPRESSION __BIT(2) 207 208 struct sppplcpstatus { 209 char ifname[IFNAMSIZ]; 210 int state; 211 int timeout; 212 u_long opts; 213 u_long magic; 214 u_long mru; 215 }; 216 217 #define SPPPGETLCPSTATUS _IOWR('i', 135, struct sppplcpstatus) 218 219 struct spppipcpstatus { 220 char ifname[IFNAMSIZ]; 221 int state; 222 u_long opts; 223 u_int32_t myaddr; 224 }; 225 226 #define SPPPGETIPCPSTATUS _IOWR('i', 136, struct spppipcpstatus) 227 228 struct spppipv6cpstatus { 229 char ifname[IFNAMSIZ]; 230 int state; 231 u_long opts; 232 u_int8_t my_ifid[8]; 233 u_int8_t his_ifid[8]; 234 }; 235 236 #define SPPPGETIPV6CPSTATUS _IOWR('i', 137, struct spppipv6cpstatus) 237 238 #define SPPP_NCP_IPCP __BIT(0) 239 #define SPPP_NCP_IPV6CP __BIT(1) 240 struct spppncpcfg { 241 char ifname[IFNAMSIZ]; 242 u_int ncp_flags; 243 }; 244 245 #define SPPPGETNCPCFG _IOWR('i', 138, struct spppncpcfg) 246 #define SPPPSETNCPCFG _IOW('i', 139, struct spppncpcfg) 247 248 #endif /* !_NET_IF_SPPP_H_ */ 249 250