33 #ifndef LWIP_HDR_PPP_IMPL_H 34 #define LWIP_HDR_PPP_IMPL_H 36 #include "netif/ppp/ppp_opts.h" 40 #ifdef PPP_INCLUDE_SETTINGS_HEADER 41 #include "ppp_settings.h" 63 #define PPP_CTRL_PBUF_TYPE PBUF_RAM 64 #define PPP_CTRL_PBUF_MAX_SIZE 512 66 #define PPP_CTRL_PBUF_TYPE PBUF_POOL 67 #define PPP_CTRL_PBUF_MAX_SIZE PBUF_POOL_BUFSIZE 73 #define PPP_ADDRESS(p) (((u_char *)(p))[0]) 74 #define PPP_CONTROL(p) (((u_char *)(p))[1]) 75 #define PPP_PROTOCOL(p) ((((u_char *)(p))[2] << 8) + ((u_char *)(p))[3]) 80 #define PPP_ALLSTATIONS 0xff 83 #define PPP_ESCAPE 0x7d 84 #define PPP_TRANS 0x20 95 #define PPP_VJC_COMP 0x2d 96 #define PPP_VJC_UNCOMP 0x2f 102 #define PPP_COMP 0xfd 104 #define PPP_IPCP 0x8021 106 #define PPP_ATCP 0x8029 107 #define PPP_IPXCP 0x802b 110 #define PPP_IPV6CP 0x8057 113 #define PPP_CCP 0x80fd 116 #define PPP_ECP 0x8053 118 #define PPP_LCP 0xc021 120 #define PPP_PAP 0xc023 123 #define PPP_LQR 0xc025 126 #define PPP_CHAP 0xc223 129 #define PPP_CBCP 0xc029 132 #define PPP_EAP 0xc227 139 struct link_callbacks {
141 void (*connect) (ppp_pcb *pcb,
void *ctx);
144 void (*listen) (ppp_pcb *pcb,
void *ctx);
147 void (*disconnect) (ppp_pcb *pcb,
void *ctx);
149 err_t (*free) (ppp_pcb *pcb,
void *ctx);
151 err_t (*write)(ppp_pcb *pcb,
void *ctx,
struct pbuf *p);
153 err_t (*netif_output)(ppp_pcb *pcb,
void *ctx,
struct pbuf *p, u_short protocol);
155 void (*send_config)(ppp_pcb *pcb,
void *ctx, u32_t accm,
int pcomp,
int accomp);
157 void (*recv_config)(ppp_pcb *pcb,
void *ctx, u32_t accm,
int pcomp,
int accomp);
173 #if PPP_STATS_SUPPORT 175 unsigned int ppp_ibytes;
176 unsigned int ppp_ipackets;
177 unsigned int ppp_ierrors;
178 unsigned int ppp_obytes;
179 unsigned int ppp_opackets;
180 unsigned int ppp_oerrors;
185 unsigned int vjs_packets;
186 unsigned int vjs_compressed;
187 unsigned int vjs_searches;
188 unsigned int vjs_misses;
189 unsigned int vjs_uncompressedin;
190 unsigned int vjs_compressedin;
191 unsigned int vjs_errorin;
192 unsigned int vjs_tossed;
205 unsigned int unc_bytes;
206 unsigned int unc_packets;
207 unsigned int comp_bytes;
208 unsigned int comp_packets;
209 unsigned int inc_bytes;
210 unsigned int inc_packets;
214 struct ppp_comp_stats {
222 #if PPP_IDLETIMELIMIT 239 #define EPD_PHONENUM 5 244 #ifdef HAVE_MULTILINK 245 extern u8_t multilink;
246 extern u8_t doing_multilink;
247 extern u8_t multilink_master;
248 extern u8_t bundle_eof;
249 extern u8_t bundle_terminating;
253 extern unsigned int maxoctets;
254 extern int maxoctets_dir;
259 extern int maxoctets_timeout;
260 #define PPP_OCTETS_DIRECTION_SUM 0 261 #define PPP_OCTETS_DIRECTION_IN 1 262 #define PPP_OCTETS_DIRECTION_OUT 2 263 #define PPP_OCTETS_DIRECTION_MAXOVERAL 3 265 #define PPP_OCTETS_DIRECTION_MAXSESSION 4 271 #define PPP_DATAINPUT 0 280 void (*init) (ppp_pcb *pcb);
282 void (*input) (ppp_pcb *pcb, u_char *pkt,
int len);
284 void (*protrej) (ppp_pcb *pcb);
286 void (*lowerup) (ppp_pcb *pcb);
288 void (*lowerdown) (ppp_pcb *pcb);
290 void (*open) (ppp_pcb *pcb);
292 void (*close) (ppp_pcb *pcb,
const char *reason);
295 int (*printpkt) (
const u_char *pkt,
int len,
296 void (*printer) (
void *,
const char *, ...),
301 void (*datainput) (ppp_pcb *pcb, u_char *pkt,
int len);
305 const char *data_name;
310 void (*check_options) (void);
314 int (*demand_conf) (
int unit);
316 int (*active_pkt) (u_char *pkt,
int len);
321 extern const struct protent*
const protocols[];
326 #define PAP_WITHPEER 0x1 330 #define CHAP_WITHPEER 0x4 331 #define CHAP_PEER 0x8 334 #define EAP_WITHPEER 0x10 335 #define EAP_PEER 0x20 340 #define CHAP_MD5_WITHPEER 0x40 341 #define CHAP_MD5_PEER 0x80 343 #define CHAP_MS_SHIFT 8 344 #define CHAP_MS_WITHPEER 0x100 345 #define CHAP_MS_PEER 0x200 346 #define CHAP_MS2_WITHPEER 0x400 347 #define CHAP_MS2_PEER 0x800 355 #define CHAP_MDTYPE_SUPPORTED (MDTYPE_MICROSOFT_V2 | MDTYPE_MICROSOFT | MDTYPE_MD5) 357 #define CHAP_MDTYPE_SUPPORTED (MDTYPE_MD5) 361 #define CHAP_MDTYPE_SUPPORTED (MDTYPE_NONE) 364 #if PPP_STATS_SUPPORT 369 unsigned int bytes_in;
370 unsigned int bytes_out;
371 unsigned int pkts_in;
372 unsigned int pkts_out;
394 ppp_pcb *ppp_new(
struct netif *pppif,
const struct link_callbacks *callbacks,
void *link_ctx_cb,
395 ppp_link_status_cb_fn link_status_cb,
void *ctx_cb);
398 void ppp_start(ppp_pcb *pcb);
401 void ppp_link_failed(ppp_pcb *pcb);
404 void ppp_link_end(ppp_pcb *pcb);
407 void ppp_input(ppp_pcb *pcb,
struct pbuf *pb);
410 struct pbuf *ppp_singlebuf(
struct pbuf *p);
418 err_t ppp_write(ppp_pcb *pcb,
struct pbuf *p);
421 void ppp_link_terminated(ppp_pcb *pcb);
423 void new_phase(ppp_pcb *pcb,
int p);
425 int ppp_send_config(ppp_pcb *pcb,
int mtu, u32_t accm,
int pcomp,
int accomp);
426 int ppp_recv_config(ppp_pcb *pcb,
int mru, u32_t accm,
int pcomp,
int accomp);
429 int sifaddr(ppp_pcb *pcb, u32_t our_adr, u32_t his_adr, u32_t netmask);
430 int cifaddr(ppp_pcb *pcb, u32_t our_adr, u32_t his_adr);
432 int sifproxyarp(ppp_pcb *pcb, u32_t his_adr);
433 int cifproxyarp(ppp_pcb *pcb, u32_t his_adr);
436 int sdns(ppp_pcb *pcb, u32_t ns1, u32_t ns2);
437 int cdns(ppp_pcb *pcb, u32_t ns1, u32_t ns2);
440 int sifvjcomp(ppp_pcb *pcb,
int vjcomp,
int cidcomp,
int maxcid);
442 int sifup(ppp_pcb *pcb);
443 int sifdown (ppp_pcb *pcb);
444 u32_t get_mask(u32_t addr);
448 int sif6addr(ppp_pcb *pcb, eui64_t our_eui64, eui64_t his_eui64);
449 int cif6addr(ppp_pcb *pcb, eui64_t our_eui64, eui64_t his_eui64);
450 int sif6up(ppp_pcb *pcb);
451 int sif6down (ppp_pcb *pcb);
455 int sifnpmode(ppp_pcb *pcb,
int proto,
enum NPmode mode);
458 void netif_set_mtu(ppp_pcb *pcb,
int mtu);
459 int netif_get_mtu(ppp_pcb *pcb);
463 int ccp_test(ppp_pcb *pcb, u_char *opt_ptr,
int opt_len,
int for_transmit);
465 void ccp_set(ppp_pcb *pcb, u8_t isopen, u8_t isup, u8_t receive_method, u8_t transmit_method);
466 void ccp_reset_comp(ppp_pcb *pcb);
467 void ccp_reset_decomp(ppp_pcb *pcb);
469 int ccp_fatal_error(ppp_pcb *pcb);
473 #if PPP_IDLETIMELIMIT 474 int get_idle_time(ppp_pcb *pcb,
struct ppp_idle *ip);
478 int get_loop_output(
void);
483 const char * protocol_name(
int proto);
487 #if PPP_STATS_SUPPORT 488 void print_link_stats(
void);
489 void reset_link_stats(
int u);
490 void update_link_stats(
int u);
501 #define GETCHAR(c, cp) { \ 504 #define PUTCHAR(c, cp) { \ 505 *(cp)++ = (u_char) (c); \ 507 #define GETSHORT(s, cp) { \ 508 (s) = *(cp)++ << 8; \ 511 #define PUTSHORT(s, cp) { \ 512 *(cp)++ = (u_char) ((s) >> 8); \ 513 *(cp)++ = (u_char) (s); \ 515 #define GETLONG(l, cp) { \ 516 (l) = *(cp)++ << 8; \ 517 (l) |= *(cp)++; (l) <<= 8; \ 518 (l) |= *(cp)++; (l) <<= 8; \ 521 #define PUTLONG(l, cp) { \ 522 *(cp)++ = (u_char) ((l) >> 24); \ 523 *(cp)++ = (u_char) ((l) >> 16); \ 524 *(cp)++ = (u_char) ((l) >> 8); \ 525 *(cp)++ = (u_char) (l); \ 528 #define INCPTR(n, cp) ((cp) += (n)) 529 #define DECPTR(n, cp) ((cp) -= (n)) 534 #define TIMEOUT(f, a, t) do { sys_untimeout((f), (a)); sys_timeout((t)*1000, (f), (a)); } while(0) 535 #define TIMEOUTMS(f, a, t) do { sys_untimeout((f), (a)); sys_timeout((t), (f), (a)); } while(0) 536 #define UNTIMEOUT(f, a) sys_untimeout((f), (a)) 538 #define BZERO(s, n) memset(s, 0, n) 539 #define BCMP(s1, s2, l) memcmp(s1, s2, l) 541 #define PRINTMSG(m, l) { ppp_info("Remote message: %0.*v", l, m); } 546 #define MAKEHEADER(p, t) { \ 547 PUTCHAR(PPP_ALLSTATIONS, p); \ 548 PUTCHAR(PPP_UI, p); \ 552 void link_required(ppp_pcb *pcb);
553 void link_terminated(ppp_pcb *pcb);
554 void link_down(ppp_pcb *pcb);
555 void upper_layers_down(ppp_pcb *pcb);
556 void link_established(ppp_pcb *pcb);
557 void start_networks(ppp_pcb *pcb);
558 void continue_networks(ppp_pcb *pcb);
561 int auth_check_passwd(ppp_pcb *pcb,
char *auser,
int userlen,
char *apasswd,
int passwdlen,
const char **msg,
int *msglen);
563 void auth_peer_fail(ppp_pcb *pcb,
int protocol);
565 void auth_peer_success(ppp_pcb *pcb,
int protocol,
int prot_flavor,
const char *name,
int namelen);
568 void auth_withpeer_fail(ppp_pcb *pcb,
int protocol);
570 void auth_withpeer_success(ppp_pcb *pcb,
int protocol,
int prot_flavor);
573 void np_up(ppp_pcb *pcb,
int proto);
574 void np_down(ppp_pcb *pcb,
int proto);
575 void np_finished(ppp_pcb *pcb,
int proto);
577 int get_secret(ppp_pcb *pcb,
const char *client,
const char *server,
char *secret,
int *secret_len,
int am_server);
586 void demand_conf (
void);
587 void demand_block (
void);
588 void demand_unblock (
void);
589 void demand_discard (
void);
590 void demand_rexmit (
int, u32_t);
591 int loop_chars (
unsigned char *,
int);
592 int loop_frame (
unsigned char *,
int);
596 #ifdef HAVE_MULTILINK 597 void mp_check_options (
void);
598 int mp_join_bundle (
void);
599 void mp_exit_bundle (
void);
600 void mp_bundle_terminated (
void);
601 char *epdisc_to_str (
struct epdisc *);
602 int str_to_epdisc (
struct epdisc *,
char *);
604 #define mp_bundle_terminated() 605 #define mp_exit_bundle() 606 #define doing_multilink 0 607 #define multilink_master 0 611 void ppp_print_string(
const u_char *p,
int len,
void (*printer) (
void *,
const char *, ...),
void *arg);
612 int ppp_slprintf(
char *buf,
int buflen,
const char *fmt, ...);
613 int ppp_vslprintf(
char *buf,
int buflen,
const char *fmt, va_list args);
614 size_t ppp_strlcpy(
char *dest,
const char *src,
size_t len);
615 size_t ppp_strlcat(
char *dest,
const char *src,
size_t len);
616 void ppp_dbglog(
const char *fmt, ...);
617 void ppp_info(
const char *fmt, ...);
618 void ppp_notice(
const char *fmt, ...);
619 void ppp_warn(
const char *fmt, ...);
620 void ppp_error(
const char *fmt, ...);
621 void ppp_fatal(
const char *fmt, ...);
623 void ppp_dump_packet(ppp_pcb *pcb,
const char *tag,
unsigned char *p,
int len);