32#if PPP_SUPPORT && DEMAND_SUPPORT
49#include <netinet/in.h>
71 unsigned char data[1];
77static int active_packet (
unsigned char *,
int);
86 const struct protent *protp;
90 framemax = PPP_DEFMRU;
91 framemax += PPP_HDRLEN + PPP_FCSLEN;
101 ppp_netif_set_mtu(pcb,
LWIP_MIN(lcp_allowoptions[0].mru, PPP_DEFMRU));
102 if (ppp_send_config(pcb, PPP_DEFMRU, (
u32_t) 0, 0, 0) < 0
103 || ppp_recv_config(pcb, PPP_DEFMRU, (
u32_t) 0, 0, 0) < 0)
104 fatal(
"Couldn't set up demand-dialled PPP interface: %m");
107 set_filters(&pass_filter, &active_filter);
114 if (protp->demand_conf !=
NULL)
115 ((*protp->demand_conf)(pcb));
118 if (!((*protp->demand_conf)(pcb)))
131 const struct protent *protp;
134 if (protp->demand_conf !=
NULL)
135 sifnpmode(pcb, protp->protocol & ~0x8000, NPMODE_QUEUE);
146 struct packet *pkt, *nextpkt;
148 const struct protent *protp;
151 if (protp->demand_conf !=
NULL)
152 sifnpmode(pcb, protp->protocol & ~0x8000, NPMODE_ERROR);
156 for (pkt = pend_q; pkt !=
NULL; pkt = nextpkt) {
174 const struct protent *protp;
177 if (protp->demand_conf !=
NULL)
178 sifnpmode(pcb, protp->protocol & ~0x8000, NPMODE_PASS);
185 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf,
186 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7,
187 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e,
188 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876,
189 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd,
190 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5,
191 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c,
192 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974,
193 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb,
194 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3,
195 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a,
196 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72,
197 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9,
198 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1,
199 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738,
200 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70,
201 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7,
202 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff,
203 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036,
204 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e,
205 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5,
206 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd,
207 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134,
208 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c,
209 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3,
210 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb,
211 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232,
212 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a,
213 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1,
214 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9,
215 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330,
216 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78
235 if ( (
p[0] == 0xFF) && (
p[1] == 0x03) ) {
236 rv = loop_frame(
p,
n);
243 if (!escape_flag && !flush_flag
244 && framelen > 2 && fcs == PPP_GOODFCS) {
246 if (loop_frame((
unsigned char *)frame, framelen))
260 }
else if (
c == PPP_ESCAPE) {
264 if (framelen >= framemax) {
268 frame[framelen++] =
c;
269 fcs = PPP_FCS(fcs,
c);
285loop_frame(frame,
len)
286 unsigned char *frame;
292 if (
len < PPP_HDRLEN)
294 if ((PPP_PROTOCOL(frame) & 0x8000) != 0)
296 if (!active_packet(frame,
len))
307 pend_qtail->next = pkt;
318demand_rexmit(
proto, newip)
322 struct packet *pkt, *prev, *nextpkt;
324 unsigned short pkt_checksum = 0;
336 for (; pkt !=
NULL; pkt = nextpkt) {
338 if (PPP_PROTOCOL(pkt->data) ==
proto) {
339 if ( (
proto == PPP_IP) && newip ) {
342 iphdr = (pkt->data[4] & 15) << 2;
343 checksum = *((
unsigned short *) (pkt->data+14));
349 if (pkt->data[13] == 17) {
350 pkt_checksum = *((
unsigned short *) (pkt->data+10+iphdr));
353 if (pkt_checksum == 0xFFFF) {
362 if (pkt->data[13] == 6) {
363 pkt_checksum = *((
unsigned short *) (pkt->data+20+iphdr));
365 if (pkt_checksum == 0xFFFF) {
371 checksum -= *((
unsigned short *) (pkt->data+16)) ^ 0xFFFF;
372 checksum -= *((
unsigned short *) (pkt->data+18)) ^ 0xFFFF;
374 pkt_checksum -= *((
unsigned short *) (pkt->data+16)) ^ 0xFFFF;
375 pkt_checksum -= *((
unsigned short *) (pkt->data+18)) ^ 0xFFFF;
378 * ((
u32_t *) (pkt->data + 16)) = newip;
381 checksum += *((
unsigned short *) (pkt->data+16)) ^ 0xFFFF;
382 checksum += *((
unsigned short *) (pkt->data+18)) ^ 0xFFFF;
384 pkt_checksum += *((
unsigned short *) (pkt->data+16)) ^ 0xFFFF;
385 pkt_checksum += *((
unsigned short *) (pkt->data+18)) ^ 0xFFFF;
391 *((
unsigned short *) (pkt->data+14)) =
checksum;
392 if (pkt->data[13] == 6) {
393 *((
unsigned short *) (pkt->data+20+iphdr)) = pkt_checksum;
395 if (cv && (pkt->data[13] == 17) ) {
396 *((
unsigned short *) (pkt->data+10+iphdr)) = pkt_checksum;
401 if (pkt->data[13] == 1) {
407 pkt->data[13] == 6 ?
"TCP" :
"UDP",
409 ntohs(*( (
short *) (pkt->data+iphdr+4))),
411 ntohs(*( (
short *) (pkt->data+iphdr+6))));
414 output(pcb, pkt->data, pkt->length);
439 const struct protent *protp;
441 if (
len < PPP_HDRLEN)
446 if ((pass_filter.bf_len != 0
447 && bpf_filter(pass_filter.bf_insns,
p,
len,
len) == 0)
448 || (active_filter.bf_len != 0
449 && bpf_filter(active_filter.bf_insns,
p,
len,
len) == 0)) {
456 if (protp->protocol < 0xC000 && (protp->protocol & ~0x8000) ==
proto) {
457 if (protp->active_pkt ==
NULL)
459 return (*protp->active_pkt)(
p,
len);
CHAR FAR *WSAAPI inet_ntoa(IN IN_ADDR in)
struct protocol * protocols
static cab_ULONG checksum(const cab_UBYTE *data, cab_UWORD bytes, cab_ULONG csum)
INT WSAAPI select(IN INT s, IN OUT LPFD_SET readfds, IN OUT LPFD_SET writefds, IN OUT LPFD_SET exceptfds, IN CONST struct timeval *timeout)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLuint GLsizei GLsizei * length
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define memcpy(s1, s2, n)
static unsigned __int64 next
void syslog(int pri, char *fmt,...)
void fatal(const char *msg)