|
View:
New views
2 Messages
—
Rating Filter:
Alert me
|
|
|
Is it a PPP bug related to VJ?Hi all,
I wanted VJ to work well,but failed. I found there are two different data structs for IP header. One is struct ip_hdr in ip.h ,the other is struct ip defined in vjbsdhdr.h. A header of IP is filled in ip_output_if by struct ip_hdr. If VJ is enable, some fields in the IP header are parsed incorrectly in vj_compress_tcp by struct ip. The bug may be at: register struct ip *ip = (struct ip *)pb->payload. The size of struct ip is more than 20 bytes,Is it a PPP bug related to VJ? err_t ip_output_if(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, u8_t ttl, u8_t tos, u8_t proto, struct netif *netif) { struct ip_hdr *iphdr; .. IPH_TTL_SET(iphdr, ttl); IPH_PROTO_SET(iphdr, proto); ip_addr_set(&(iphdr->dest), dest); IPH_VHLTOS_SET(iphdr, 4, IP_HLEN / 4, tos); IPH_LEN_SET(iphdr, htons(p->tot_len)); IPH_OFFSET_SET(iphdr, 0); IPH_ID_SET(iphdr, htons(ip_id)); .. } u_int vj_compress_tcp(struct vjcompress *comp, struct pbuf *pb) { register struct ip *ip = (struct ip *)pb->payload; register struct cstate *cs = comp->last_cs->cs_next; register u_short hlen = 0; register struct tcphdr *oth; register struct tcphdr *th; register u_short deltaS, deltaA; register u_long deltaL; register u_int changes = 0; u_char new_seq[16]; register u_char *cp = new_seq; ... /* * Check that the packet is IP proto TCP. */ if (ip->ip_p != IPPROTO_TCP) { return (TYPE_IP); } .. } The struct ip is defined as the following in vjbsdhdr.h PACK_STRUCT_BEGIN struct ip { #if defined(NO_CHAR_BITFIELDS) u_char ip_hl_v; /* bug in GCC for mips means the bitfield stuff will sometimes break - so we use a char for both and get round it with macro's instead... */ #else #if BYTE_ORDER == LITTLE_ENDIAN unsigned ip_hl:4, /* header length */ ip_v :4; /* version */ #elif BYTE_ORDER == BIG_ENDIAN unsigned ip_v :4, /* version */ ip_hl:4; /* header length */ #else COMPLAIN - NO BYTE ORDER SELECTED! #endif #endif u_char ip_tos; /* type of service */ u_short ip_len; /* total length */ u_short ip_id; /* identification */ u_short ip_off; /* fragment offset field */ #define IP_DF 0x4000 /* dont fragment flag */ #define IP_MF 0x2000 /* more fragments flag */ #define IP_OFFMASK 0x1fff /* mask for fragmenting bits */ u_char ip_ttl; /* time to live */ u_char ip_p; /* protocol */ u_short ip_sum; /* checksum */ struct in_addr ip_src,ip_dst; /* source and dest address */ }; PACK_STRUCT_END Best regards WU Rui-Qing reeching@... 2009-10-29 _______________________________________________ lwip-users mailing list lwip-users@... http://lists.nongnu.org/mailman/listinfo/lwip-users |
|
|
|
| Free embeddable forum powered by Nabble | Forum Help |