Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of OmniWheels by
ppp_impl.h
00001 /***************************************************************************** 00002 * ppp.h - Network Point to Point Protocol header file. 00003 * 00004 * Copyright (c) 2003 by Marc Boucher, Services Informatiques (MBSI) inc. 00005 * portions Copyright (c) 1997 Global Election Systems Inc. 00006 * 00007 * The authors hereby grant permission to use, copy, modify, distribute, 00008 * and license this software and its documentation for any purpose, provided 00009 * that existing copyright notices are retained in all copies and that this 00010 * notice and the following disclaimer are included verbatim in any 00011 * distributions. No written agreement, license, or royalty fee is required 00012 * for any of the authorized uses. 00013 * 00014 * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS *AS IS* AND ANY EXPRESS OR 00015 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 00016 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 00017 * IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 00018 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 00019 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 00020 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 00021 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00022 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 00023 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00024 * 00025 ****************************************************************************** 00026 * REVISION HISTORY 00027 * 00028 * 03-01-01 Marc Boucher <marc@mbsi.ca> 00029 * Ported to lwIP. 00030 * 97-11-05 Guy Lancaster <glanca@gesn.com>, Global Election Systems Inc. 00031 * Original derived from BSD codes. 00032 *****************************************************************************/ 00033 #ifndef LWIP_HDR_PPP_IMPL_H 00034 #define LWIP_HDR_PPP_IMPL_H 00035 00036 #include "netif/ppp/ppp_opts.h" 00037 00038 #if PPP_SUPPORT /* don't build if not configured for use in lwipopts.h */ 00039 00040 #ifdef PPP_INCLUDE_SETTINGS_HEADER 00041 #include "ppp_settings.h" 00042 #endif 00043 00044 #include <stdio.h> /* formats */ 00045 #include <stdarg.h> 00046 #include <string.h> 00047 #include <stdlib.h> /* strtol() */ 00048 00049 #include "lwip/netif.h" 00050 #include "lwip/def.h" 00051 #include "lwip/timeouts.h" 00052 00053 #include "ppp.h" 00054 #include "pppdebug.h" 00055 00056 /* 00057 * Memory used for control packets. 00058 * 00059 * PPP_CTRL_PBUF_MAX_SIZE is the amount of memory we allocate when we 00060 * cannot figure out how much we are going to use before filling the buffer. 00061 */ 00062 #if PPP_USE_PBUF_RAM 00063 #define PPP_CTRL_PBUF_TYPE PBUF_RAM 00064 #define PPP_CTRL_PBUF_MAX_SIZE 512 00065 #else /* PPP_USE_PBUF_RAM */ 00066 #define PPP_CTRL_PBUF_TYPE PBUF_POOL 00067 #define PPP_CTRL_PBUF_MAX_SIZE PBUF_POOL_BUFSIZE 00068 #endif /* PPP_USE_PBUF_RAM */ 00069 00070 /* 00071 * The basic PPP frame. 00072 */ 00073 #define PPP_ADDRESS(p) (((u_char *)(p))[0]) 00074 #define PPP_CONTROL(p) (((u_char *)(p))[1]) 00075 #define PPP_PROTOCOL(p) ((((u_char *)(p))[2] << 8) + ((u_char *)(p))[3]) 00076 00077 /* 00078 * Significant octet values. 00079 */ 00080 #define PPP_ALLSTATIONS 0xff /* All-Stations broadcast address */ 00081 #define PPP_UI 0x03 /* Unnumbered Information */ 00082 #define PPP_FLAG 0x7e /* Flag Sequence */ 00083 #define PPP_ESCAPE 0x7d /* Asynchronous Control Escape */ 00084 #define PPP_TRANS 0x20 /* Asynchronous transparency modifier */ 00085 00086 /* 00087 * Protocol field values. 00088 */ 00089 #define PPP_IP 0x21 /* Internet Protocol */ 00090 #if 0 /* UNUSED */ 00091 #define PPP_AT 0x29 /* AppleTalk Protocol */ 00092 #define PPP_IPX 0x2b /* IPX protocol */ 00093 #endif /* UNUSED */ 00094 #if VJ_SUPPORT 00095 #define PPP_VJC_COMP 0x2d /* VJ compressed TCP */ 00096 #define PPP_VJC_UNCOMP 0x2f /* VJ uncompressed TCP */ 00097 #endif /* VJ_SUPPORT */ 00098 #if PPP_IPV6_SUPPORT 00099 #define PPP_IPV6 0x57 /* Internet Protocol Version 6 */ 00100 #endif /* PPP_IPV6_SUPPORT */ 00101 #if CCP_SUPPORT 00102 #define PPP_COMP 0xfd /* compressed packet */ 00103 #endif /* CCP_SUPPORT */ 00104 #define PPP_IPCP 0x8021 /* IP Control Protocol */ 00105 #if 0 /* UNUSED */ 00106 #define PPP_ATCP 0x8029 /* AppleTalk Control Protocol */ 00107 #define PPP_IPXCP 0x802b /* IPX Control Protocol */ 00108 #endif /* UNUSED */ 00109 #if PPP_IPV6_SUPPORT 00110 #define PPP_IPV6CP 0x8057 /* IPv6 Control Protocol */ 00111 #endif /* PPP_IPV6_SUPPORT */ 00112 #if CCP_SUPPORT 00113 #define PPP_CCP 0x80fd /* Compression Control Protocol */ 00114 #endif /* CCP_SUPPORT */ 00115 #if ECP_SUPPORT 00116 #define PPP_ECP 0x8053 /* Encryption Control Protocol */ 00117 #endif /* ECP_SUPPORT */ 00118 #define PPP_LCP 0xc021 /* Link Control Protocol */ 00119 #if PAP_SUPPORT 00120 #define PPP_PAP 0xc023 /* Password Authentication Protocol */ 00121 #endif /* PAP_SUPPORT */ 00122 #if LQR_SUPPORT 00123 #define PPP_LQR 0xc025 /* Link Quality Report protocol */ 00124 #endif /* LQR_SUPPORT */ 00125 #if CHAP_SUPPORT 00126 #define PPP_CHAP 0xc223 /* Cryptographic Handshake Auth. Protocol */ 00127 #endif /* CHAP_SUPPORT */ 00128 #if CBCP_SUPPORT 00129 #define PPP_CBCP 0xc029 /* Callback Control Protocol */ 00130 #endif /* CBCP_SUPPORT */ 00131 #if EAP_SUPPORT 00132 #define PPP_EAP 0xc227 /* Extensible Authentication Protocol */ 00133 #endif /* EAP_SUPPORT */ 00134 00135 /* 00136 * The following struct gives the addresses of procedures to call 00137 * for a particular lower link level protocol. 00138 */ 00139 struct link_callbacks { 00140 /* Start a connection (e.g. Initiate discovery phase) */ 00141 void (*connect) (ppp_pcb *pcb, void *ctx); 00142 #if PPP_SERVER 00143 /* Listen for an incoming connection (Passive mode) */ 00144 void (*listen) (ppp_pcb *pcb, void *ctx); 00145 #endif /* PPP_SERVER */ 00146 /* End a connection (i.e. initiate disconnect phase) */ 00147 void (*disconnect) (ppp_pcb *pcb, void *ctx); 00148 /* Free lower protocol control block */ 00149 err_t (*free) (ppp_pcb *pcb, void *ctx); 00150 /* Write a pbuf to a ppp link, only used from PPP functions to send PPP packets. */ 00151 err_t (*write)(ppp_pcb *pcb, void *ctx, struct pbuf *p); 00152 /* Send a packet from lwIP core (IPv4 or IPv6) */ 00153 err_t (*netif_output)(ppp_pcb *pcb, void *ctx, struct pbuf *p, u_short protocol); 00154 /* configure the transmit-side characteristics of the PPP interface */ 00155 void (*send_config)(ppp_pcb *pcb, void *ctx, u32_t accm, int pcomp, int accomp); 00156 /* confire the receive-side characteristics of the PPP interface */ 00157 void (*recv_config)(ppp_pcb *pcb, void *ctx, u32_t accm, int pcomp, int accomp); 00158 }; 00159 00160 /* 00161 * What to do with network protocol (NP) packets. 00162 */ 00163 enum NPmode { 00164 NPMODE_PASS, /* pass the packet through */ 00165 NPMODE_DROP, /* silently drop the packet */ 00166 NPMODE_ERROR, /* return an error */ 00167 NPMODE_QUEUE /* save it up for later. */ 00168 }; 00169 00170 /* 00171 * Statistics. 00172 */ 00173 #if PPP_STATS_SUPPORT 00174 struct pppstat { 00175 unsigned int ppp_ibytes; /* bytes received */ 00176 unsigned int ppp_ipackets; /* packets received */ 00177 unsigned int ppp_ierrors; /* receive errors */ 00178 unsigned int ppp_obytes; /* bytes sent */ 00179 unsigned int ppp_opackets; /* packets sent */ 00180 unsigned int ppp_oerrors; /* transmit errors */ 00181 }; 00182 00183 #if VJ_SUPPORT 00184 struct vjstat { 00185 unsigned int vjs_packets; /* outbound packets */ 00186 unsigned int vjs_compressed; /* outbound compressed packets */ 00187 unsigned int vjs_searches; /* searches for connection state */ 00188 unsigned int vjs_misses; /* times couldn't find conn. state */ 00189 unsigned int vjs_uncompressedin; /* inbound uncompressed packets */ 00190 unsigned int vjs_compressedin; /* inbound compressed packets */ 00191 unsigned int vjs_errorin; /* inbound unknown type packets */ 00192 unsigned int vjs_tossed; /* inbound packets tossed because of error */ 00193 }; 00194 #endif /* VJ_SUPPORT */ 00195 00196 struct ppp_stats { 00197 struct pppstat p; /* basic PPP statistics */ 00198 #if VJ_SUPPORT 00199 struct vjstat vj; /* VJ header compression statistics */ 00200 #endif /* VJ_SUPPORT */ 00201 }; 00202 00203 #if CCP_SUPPORT 00204 struct compstat { 00205 unsigned int unc_bytes; /* total uncompressed bytes */ 00206 unsigned int unc_packets; /* total uncompressed packets */ 00207 unsigned int comp_bytes; /* compressed bytes */ 00208 unsigned int comp_packets; /* compressed packets */ 00209 unsigned int inc_bytes; /* incompressible bytes */ 00210 unsigned int inc_packets; /* incompressible packets */ 00211 unsigned int ratio; /* recent compression ratio << 8 */ 00212 }; 00213 00214 struct ppp_comp_stats { 00215 struct compstat c; /* packet compression statistics */ 00216 struct compstat d; /* packet decompression statistics */ 00217 }; 00218 #endif /* CCP_SUPPORT */ 00219 00220 #endif /* PPP_STATS_SUPPORT */ 00221 00222 #if PPP_IDLETIMELIMIT 00223 /* 00224 * The following structure records the time in seconds since 00225 * the last NP packet was sent or received. 00226 */ 00227 struct ppp_idle { 00228 time_t xmit_idle; /* time since last NP packet sent */ 00229 time_t recv_idle; /* time since last NP packet received */ 00230 }; 00231 #endif /* PPP_IDLETIMELIMIT */ 00232 00233 /* values for epdisc.class */ 00234 #define EPD_NULL 0 /* null discriminator, no data */ 00235 #define EPD_LOCAL 1 00236 #define EPD_IP 2 00237 #define EPD_MAC 3 00238 #define EPD_MAGIC 4 00239 #define EPD_PHONENUM 5 00240 00241 /* 00242 * Global variables. 00243 */ 00244 #ifdef HAVE_MULTILINK 00245 extern u8_t multilink; /* enable multilink operation */ 00246 extern u8_t doing_multilink; 00247 extern u8_t multilink_master; 00248 extern u8_t bundle_eof; 00249 extern u8_t bundle_terminating; 00250 #endif 00251 00252 #ifdef MAXOCTETS 00253 extern unsigned int maxoctets; /* Maximum octetes per session (in bytes) */ 00254 extern int maxoctets_dir; /* Direction : 00255 0 - in+out (default) 00256 1 - in 00257 2 - out 00258 3 - max(in,out) */ 00259 extern int maxoctets_timeout; /* Timeout for check of octets limit */ 00260 #define PPP_OCTETS_DIRECTION_SUM 0 00261 #define PPP_OCTETS_DIRECTION_IN 1 00262 #define PPP_OCTETS_DIRECTION_OUT 2 00263 #define PPP_OCTETS_DIRECTION_MAXOVERAL 3 00264 /* same as previos, but little different on RADIUS side */ 00265 #define PPP_OCTETS_DIRECTION_MAXSESSION 4 00266 #endif 00267 00268 /* Data input may be used by CCP and ECP, remove this entry 00269 * from struct protent to save some flash 00270 */ 00271 #define PPP_DATAINPUT 0 00272 00273 /* 00274 * The following struct gives the addresses of procedures to call 00275 * for a particular protocol. 00276 */ 00277 struct protent { 00278 u_short protocol; /* PPP protocol number */ 00279 /* Initialization procedure */ 00280 void (*init) (ppp_pcb *pcb); 00281 /* Process a received packet */ 00282 void (*input) (ppp_pcb *pcb, u_char *pkt, int len); 00283 /* Process a received protocol-reject */ 00284 void (*protrej) (ppp_pcb *pcb); 00285 /* Lower layer has come up */ 00286 void (*lowerup) (ppp_pcb *pcb); 00287 /* Lower layer has gone down */ 00288 void (*lowerdown) (ppp_pcb *pcb); 00289 /* Open the protocol */ 00290 void (*open) (ppp_pcb *pcb); 00291 /* Close the protocol */ 00292 void (*close) (ppp_pcb *pcb, const char *reason); 00293 #if PRINTPKT_SUPPORT 00294 /* Print a packet in readable form */ 00295 int (*printpkt) (const u_char *pkt, int len, 00296 void (*printer) (void *, const char *, ...), 00297 void *arg); 00298 #endif /* PRINTPKT_SUPPORT */ 00299 #if PPP_DATAINPUT 00300 /* Process a received data packet */ 00301 void (*datainput) (ppp_pcb *pcb, u_char *pkt, int len); 00302 #endif /* PPP_DATAINPUT */ 00303 #if PRINTPKT_SUPPORT 00304 const char *name; /* Text name of protocol */ 00305 const char *data_name; /* Text name of corresponding data protocol */ 00306 #endif /* PRINTPKT_SUPPORT */ 00307 #if PPP_OPTIONS 00308 option_t *options; /* List of command-line options */ 00309 /* Check requested options, assign defaults */ 00310 void (*check_options) (void); 00311 #endif /* PPP_OPTIONS */ 00312 #if DEMAND_SUPPORT 00313 /* Configure interface for demand-dial */ 00314 int (*demand_conf) (int unit); 00315 /* Say whether to bring up link for this pkt */ 00316 int (*active_pkt) (u_char *pkt, int len); 00317 #endif /* DEMAND_SUPPORT */ 00318 }; 00319 00320 /* Table of pointers to supported protocols */ 00321 extern const struct protent* const protocols[]; 00322 00323 00324 /* Values for auth_pending, auth_done */ 00325 #if PAP_SUPPORT 00326 #define PAP_WITHPEER 0x1 00327 #define PAP_PEER 0x2 00328 #endif /* PAP_SUPPORT */ 00329 #if CHAP_SUPPORT 00330 #define CHAP_WITHPEER 0x4 00331 #define CHAP_PEER 0x8 00332 #endif /* CHAP_SUPPORT */ 00333 #if EAP_SUPPORT 00334 #define EAP_WITHPEER 0x10 00335 #define EAP_PEER 0x20 00336 #endif /* EAP_SUPPORT */ 00337 00338 /* Values for auth_done only */ 00339 #if CHAP_SUPPORT 00340 #define CHAP_MD5_WITHPEER 0x40 00341 #define CHAP_MD5_PEER 0x80 00342 #if MSCHAP_SUPPORT 00343 #define CHAP_MS_SHIFT 8 /* LSB position for MS auths */ 00344 #define CHAP_MS_WITHPEER 0x100 00345 #define CHAP_MS_PEER 0x200 00346 #define CHAP_MS2_WITHPEER 0x400 00347 #define CHAP_MS2_PEER 0x800 00348 #endif /* MSCHAP_SUPPORT */ 00349 #endif /* CHAP_SUPPORT */ 00350 00351 /* Supported CHAP protocols */ 00352 #if CHAP_SUPPORT 00353 00354 #if MSCHAP_SUPPORT 00355 #define CHAP_MDTYPE_SUPPORTED (MDTYPE_MICROSOFT_V2 | MDTYPE_MICROSOFT | MDTYPE_MD5) 00356 #else /* MSCHAP_SUPPORT */ 00357 #define CHAP_MDTYPE_SUPPORTED (MDTYPE_MD5) 00358 #endif /* MSCHAP_SUPPORT */ 00359 00360 #else /* CHAP_SUPPORT */ 00361 #define CHAP_MDTYPE_SUPPORTED (MDTYPE_NONE) 00362 #endif /* CHAP_SUPPORT */ 00363 00364 #if PPP_STATS_SUPPORT 00365 /* 00366 * PPP statistics structure 00367 */ 00368 struct pppd_stats { 00369 unsigned int bytes_in; 00370 unsigned int bytes_out; 00371 unsigned int pkts_in; 00372 unsigned int pkts_out; 00373 }; 00374 #endif /* PPP_STATS_SUPPORT */ 00375 00376 00377 /* 00378 * PPP private functions 00379 */ 00380 00381 00382 /* 00383 * Functions called from lwIP core. 00384 */ 00385 00386 /* initialize the PPP subsystem */ 00387 int ppp_init(void); 00388 00389 /* 00390 * Functions called from PPP link protocols. 00391 */ 00392 00393 /* Create a new PPP control block */ 00394 ppp_pcb *ppp_new(struct netif *pppif, const struct link_callbacks *callbacks, void *link_ctx_cb, 00395 ppp_link_status_cb_fn link_status_cb, void *ctx_cb); 00396 00397 /* Initiate LCP open request */ 00398 void ppp_start(ppp_pcb *pcb); 00399 00400 /* Called when link failed to setup */ 00401 void ppp_link_failed(ppp_pcb *pcb); 00402 00403 /* Called when link is normally down (i.e. it was asked to end) */ 00404 void ppp_link_end(ppp_pcb *pcb); 00405 00406 /* function called to process input packet */ 00407 void ppp_input(ppp_pcb *pcb, struct pbuf *pb); 00408 00409 /* helper function, merge a pbuf chain into one pbuf */ 00410 struct pbuf *ppp_singlebuf(struct pbuf *p); 00411 00412 00413 /* 00414 * Functions called by PPP protocols. 00415 */ 00416 00417 /* function called by all PPP subsystems to send packets */ 00418 err_t ppp_write(ppp_pcb *pcb, struct pbuf *p); 00419 00420 /* functions called by auth.c link_terminated() */ 00421 void ppp_link_terminated(ppp_pcb *pcb); 00422 00423 void new_phase(ppp_pcb *pcb, int p); 00424 00425 int ppp_send_config(ppp_pcb *pcb, int mtu, u32_t accm, int pcomp, int accomp); 00426 int ppp_recv_config(ppp_pcb *pcb, int mru, u32_t accm, int pcomp, int accomp); 00427 00428 #if PPP_IPV4_SUPPORT 00429 int sifaddr(ppp_pcb *pcb, u32_t our_adr, u32_t his_adr, u32_t netmask); 00430 int cifaddr(ppp_pcb *pcb, u32_t our_adr, u32_t his_adr); 00431 #if 0 /* UNUSED - PROXY ARP */ 00432 int sifproxyarp(ppp_pcb *pcb, u32_t his_adr); 00433 int cifproxyarp(ppp_pcb *pcb, u32_t his_adr); 00434 #endif /* UNUSED - PROXY ARP */ 00435 #if LWIP_DNS 00436 int sdns(ppp_pcb *pcb, u32_t ns1, u32_t ns2); 00437 int cdns(ppp_pcb *pcb, u32_t ns1, u32_t ns2); 00438 #endif /* LWIP_DNS */ 00439 #if VJ_SUPPORT 00440 int sifvjcomp(ppp_pcb *pcb, int vjcomp, int cidcomp, int maxcid); 00441 #endif /* VJ_SUPPORT */ 00442 int sifup(ppp_pcb *pcb); 00443 int sifdown (ppp_pcb *pcb); 00444 u32_t get_mask(u32_t addr); 00445 #endif /* PPP_IPV4_SUPPORT */ 00446 00447 #if PPP_IPV6_SUPPORT 00448 int sif6addr(ppp_pcb *pcb, eui64_t our_eui64, eui64_t his_eui64); 00449 int cif6addr(ppp_pcb *pcb, eui64_t our_eui64, eui64_t his_eui64); 00450 int sif6up(ppp_pcb *pcb); 00451 int sif6down (ppp_pcb *pcb); 00452 #endif /* PPP_IPV6_SUPPORT */ 00453 00454 #if DEMAND_SUPPORT 00455 int sifnpmode(ppp_pcb *pcb, int proto, enum NPmode mode); 00456 #endif /* DEMAND_SUPPORt */ 00457 00458 void netif_set_mtu(ppp_pcb *pcb, int mtu); 00459 int netif_get_mtu(ppp_pcb *pcb); 00460 00461 #if CCP_SUPPORT 00462 #if 0 /* unused */ 00463 int ccp_test(ppp_pcb *pcb, u_char *opt_ptr, int opt_len, int for_transmit); 00464 #endif /* unused */ 00465 void ccp_set(ppp_pcb *pcb, u8_t isopen, u8_t isup, u8_t receive_method, u8_t transmit_method); 00466 void ccp_reset_comp(ppp_pcb *pcb); 00467 void ccp_reset_decomp(ppp_pcb *pcb); 00468 #if 0 /* unused */ 00469 int ccp_fatal_error(ppp_pcb *pcb); 00470 #endif /* unused */ 00471 #endif /* CCP_SUPPORT */ 00472 00473 #if PPP_IDLETIMELIMIT 00474 int get_idle_time(ppp_pcb *pcb, struct ppp_idle *ip); 00475 #endif /* PPP_IDLETIMELIMIT */ 00476 00477 #if DEMAND_SUPPORT 00478 int get_loop_output(void); 00479 #endif /* DEMAND_SUPPORT */ 00480 00481 /* Optional protocol names list, to make our messages a little more informative. */ 00482 #if PPP_PROTOCOLNAME 00483 const char * protocol_name(int proto); 00484 #endif /* PPP_PROTOCOLNAME */ 00485 00486 /* Optional stats support, to get some statistics on the PPP interface */ 00487 #if PPP_STATS_SUPPORT 00488 void print_link_stats(void); /* Print stats, if available */ 00489 void reset_link_stats(int u); /* Reset (init) stats when link goes up */ 00490 void update_link_stats(int u); /* Get stats at link termination */ 00491 #endif /* PPP_STATS_SUPPORT */ 00492 00493 00494 00495 /* 00496 * Inline versions of get/put char/short/long. 00497 * Pointer is advanced; we assume that both arguments 00498 * are lvalues and will already be in registers. 00499 * cp MUST be u_char *. 00500 */ 00501 #define GETCHAR(c, cp) { \ 00502 (c) = *(cp)++; \ 00503 } 00504 #define PUTCHAR(c, cp) { \ 00505 *(cp)++ = (u_char) (c); \ 00506 } 00507 #define GETSHORT(s, cp) { \ 00508 (s) = *(cp)++ << 8; \ 00509 (s) |= *(cp)++; \ 00510 } 00511 #define PUTSHORT(s, cp) { \ 00512 *(cp)++ = (u_char) ((s) >> 8); \ 00513 *(cp)++ = (u_char) (s); \ 00514 } 00515 #define GETLONG(l, cp) { \ 00516 (l) = *(cp)++ << 8; \ 00517 (l) |= *(cp)++; (l) <<= 8; \ 00518 (l) |= *(cp)++; (l) <<= 8; \ 00519 (l) |= *(cp)++; \ 00520 } 00521 #define PUTLONG(l, cp) { \ 00522 *(cp)++ = (u_char) ((l) >> 24); \ 00523 *(cp)++ = (u_char) ((l) >> 16); \ 00524 *(cp)++ = (u_char) ((l) >> 8); \ 00525 *(cp)++ = (u_char) (l); \ 00526 } 00527 00528 #define INCPTR(n, cp) ((cp) += (n)) 00529 #define DECPTR(n, cp) ((cp) -= (n)) 00530 00531 /* 00532 * System dependent definitions for user-level 4.3BSD UNIX implementation. 00533 */ 00534 #define TIMEOUT(f, a, t) do { sys_untimeout((f), (a)); sys_timeout((t)*1000, (f), (a)); } while(0) 00535 #define TIMEOUTMS(f, a, t) do { sys_untimeout((f), (a)); sys_timeout((t), (f), (a)); } while(0) 00536 #define UNTIMEOUT(f, a) sys_untimeout((f), (a)) 00537 00538 #define BZERO(s, n) memset(s, 0, n) 00539 #define BCMP(s1, s2, l) memcmp(s1, s2, l) 00540 00541 #define PRINTMSG(m, l) { ppp_info("Remote message: %0.*v", l, m); } 00542 00543 /* 00544 * MAKEHEADER - Add Header fields to a packet. 00545 */ 00546 #define MAKEHEADER(p, t) { \ 00547 PUTCHAR(PPP_ALLSTATIONS, p); \ 00548 PUTCHAR(PPP_UI, p); \ 00549 PUTSHORT(t, p); } 00550 00551 /* Procedures exported from auth.c */ 00552 void link_required(ppp_pcb *pcb); /* we are starting to use the link */ 00553 void link_terminated(ppp_pcb *pcb); /* we are finished with the link */ 00554 void link_down(ppp_pcb *pcb); /* the LCP layer has left the Opened state */ 00555 void upper_layers_down(ppp_pcb *pcb); /* take all NCPs down */ 00556 void link_established(ppp_pcb *pcb); /* the link is up; authenticate now */ 00557 void start_networks(ppp_pcb *pcb); /* start all the network control protos */ 00558 void continue_networks(ppp_pcb *pcb); /* start network [ip, etc] control protos */ 00559 #if PPP_AUTH_SUPPORT 00560 #if PPP_SERVER 00561 int auth_check_passwd(ppp_pcb *pcb, char *auser, int userlen, char *apasswd, int passwdlen, const char **msg, int *msglen); 00562 /* check the user name and passwd against configuration */ 00563 void auth_peer_fail(ppp_pcb *pcb, int protocol); 00564 /* peer failed to authenticate itself */ 00565 void auth_peer_success(ppp_pcb *pcb, int protocol, int prot_flavor, const char *name, int namelen); 00566 /* peer successfully authenticated itself */ 00567 #endif /* PPP_SERVER */ 00568 void auth_withpeer_fail(ppp_pcb *pcb, int protocol); 00569 /* we failed to authenticate ourselves */ 00570 void auth_withpeer_success(ppp_pcb *pcb, int protocol, int prot_flavor); 00571 /* we successfully authenticated ourselves */ 00572 #endif /* PPP_AUTH_SUPPORT */ 00573 void np_up(ppp_pcb *pcb, int proto); /* a network protocol has come up */ 00574 void np_down(ppp_pcb *pcb, int proto); /* a network protocol has gone down */ 00575 void np_finished(ppp_pcb *pcb, int proto); /* a network protocol no longer needs link */ 00576 #if PPP_AUTH_SUPPORT 00577 int get_secret(ppp_pcb *pcb, const char *client, const char *server, char *secret, int *secret_len, int am_server); 00578 /* get "secret" for chap */ 00579 #endif /* PPP_AUTH_SUPPORT */ 00580 00581 /* Procedures exported from ipcp.c */ 00582 /* int parse_dotted_ip (char *, u32_t *); */ 00583 00584 /* Procedures exported from demand.c */ 00585 #if DEMAND_SUPPORT 00586 void demand_conf (void); /* config interface(s) for demand-dial */ 00587 void demand_block (void); /* set all NPs to queue up packets */ 00588 void demand_unblock (void); /* set all NPs to pass packets */ 00589 void demand_discard (void); /* set all NPs to discard packets */ 00590 void demand_rexmit (int, u32_t); /* retransmit saved frames for an NP*/ 00591 int loop_chars (unsigned char *, int); /* process chars from loopback */ 00592 int loop_frame (unsigned char *, int); /* should we bring link up? */ 00593 #endif /* DEMAND_SUPPORT */ 00594 00595 /* Procedures exported from multilink.c */ 00596 #ifdef HAVE_MULTILINK 00597 void mp_check_options (void); /* Check multilink-related options */ 00598 int mp_join_bundle (void); /* join our link to an appropriate bundle */ 00599 void mp_exit_bundle (void); /* have disconnected our link from bundle */ 00600 void mp_bundle_terminated (void); 00601 char *epdisc_to_str (struct epdisc *); /* string from endpoint discrim. */ 00602 int str_to_epdisc (struct epdisc *, char *); /* endpt disc. from str */ 00603 #else 00604 #define mp_bundle_terminated() /* nothing */ 00605 #define mp_exit_bundle() /* nothing */ 00606 #define doing_multilink 0 00607 #define multilink_master 0 00608 #endif 00609 00610 /* Procedures exported from utils.c. */ 00611 void ppp_print_string(const u_char *p, int len, void (*printer) (void *, const char *, ...), void *arg); /* Format a string for output */ 00612 int ppp_slprintf(char *buf, int buflen, const char *fmt, ...); /* sprintf++ */ 00613 int ppp_vslprintf(char *buf, int buflen, const char *fmt, va_list args); /* vsprintf++ */ 00614 size_t ppp_strlcpy(char *dest, const char *src, size_t len); /* safe strcpy */ 00615 size_t ppp_strlcat(char *dest, const char *src, size_t len); /* safe strncpy */ 00616 void ppp_dbglog(const char *fmt, ...); /* log a debug message */ 00617 void ppp_info(const char *fmt, ...); /* log an informational message */ 00618 void ppp_notice(const char *fmt, ...); /* log a notice-level message */ 00619 void ppp_warn(const char *fmt, ...); /* log a warning message */ 00620 void ppp_error(const char *fmt, ...); /* log an error message */ 00621 void ppp_fatal(const char *fmt, ...); /* log an error message and die(1) */ 00622 #if PRINTPKT_SUPPORT 00623 void ppp_dump_packet(ppp_pcb *pcb, const char *tag, unsigned char *p, int len); 00624 /* dump packet to debug log if interesting */ 00625 #endif /* PRINTPKT_SUPPORT */ 00626 00627 00628 #endif /* PPP_SUPPORT */ 00629 #endif /* LWIP_HDR_PPP_IMPL_H */
Generated on Fri Jul 22 2022 04:53:58 by
1.7.2
