#22661: broken /include/pppd/pppd.h affects compilation for some network apps
-------------------------------------+-------------------------------------
 Reporter:  hojuruku                 |      Owner:  developers
     Type:  defect                   |     Status:  new
 Priority:  high                     |  Milestone:  Designated Driver
Component:  base system              |  (Trunk)
 Keywords:  pppd headers ppp_defs.h  |    Version:  Trunk
  pppd.h                             |
-------------------------------------+-------------------------------------
 On my latest trunk build:
 {{{staging_dir/target-mips_24kc_musl-1.1.14/usr/include/pppd/pppd.h}}}
 has
 {{{#include net/ppp_defs.h}}}
 that doesn't exist in musl and breaks some apps like rp-pppoe server
 (unsupported - patching in progress) as well as others.

 {{{
 pppd.h:57:26: fatal error: net/ppp_defs.h: No such file or directory
 compilation terminated.
 }}}

 I compared it to linux/ppp_defs.h and the net/pppd source version that
 wasn't installed.
 /build_dir/target-mips_24kc_musl-1.1.14/ppp-
 default/ppp-2.4.7/include/net/ppp_defs.h
 There isn't a lot of different to the musl packaged pppd_defs.h

 A Chinese fork of openwrt just came to the same conclusion, patch the
 include/pppd.h to include linux/ppp_defs.h instead as there isn't a lot of
 difference.
 https://github.com/miao1007/Openwrt-NetKeeper/issues/79
    已解决……
    将 pppd.h 中第57行 #include <net/ppp_defs.h> 改为 #include
 <linux/ppp_defs.h> 即可

 The patch for this is too small to bother contributing it :)

 {{{
 diff -Nau ./build_dir/target-mips_24kc_musl-1.1.14/ppp-
 default/ppp-2.4.7/include/net/ppp_defs.h ./staging_dir/toolchain-
 mips_24kc_gcc-5.3.0_musl-1.1.14/include/linux/ppp_defs.h
 --- ./build_dir/target-mips_24kc_musl-1.1.14/ppp-
 default/ppp-2.4.7/include/net/ppp_defs.h       2014-08-09
 19:31:39.000000000 +0700
 +++ ./staging_dir/toolchain-
 mips_24kc_gcc-5.3.0_musl-1.1.14/include/linux/ppp_defs.h    2016-06-24
 00:37:32.000000000 +0700
 @@ -1,39 +1,13 @@
 -/*     $Id: ppp_defs.h,v 1.17 2002/12/06 09:49:15 paulus Exp $ */
 -
  /*
   * ppp_defs.h - PPP definitions.
   *
 - * Copyright (c) 1984 Paul Mackerras. All rights reserved.
 - *
 - * Redistribution and use in source and binary forms, with or without
 - * modification, are permitted provided that the following conditions
 - * are met:
 - *
 - * 1. Redistributions of source code must retain the above copyright
 - *    notice, this list of conditions and the following disclaimer.
 - *
 - * 2. Redistributions in binary form must reproduce the above copyright
 - *    notice, this list of conditions and the following disclaimer in
 - *    the documentation and/or other materials provided with the
 - *    distribution.
 - *
 - * 3. The name(s) of the authors of this software must not be used to
 - *    endorse or promote products derived from this software without
 - *    prior written permission.
 - *
 - * 4. Redistributions of any form whatsoever must retain the following
 - *    acknowledgment:
 - *    "This product includes software developed by Paul Mackerras
 - *     <pau...@samba.org>".
 + * Copyright 1994-2000 Paul Mackerras.
   *
 - * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO
 - * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
 - * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
 - * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
 - * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
 - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 + *  This program is free software; you can redistribute it and/or
 + *  modify it under the terms of the GNU General Public License
 + *  version 2 as published by the Free Software Foundation.
   */
 +#include <linux/types.h>

  #ifndef _PPP_DEFS_H_
  #define _PPP_DEFS_H_
 @@ -43,25 +17,11 @@
   */
  #define PPP_HDRLEN     4       /* octets for standard ppp header */
  #define PPP_FCSLEN     2       /* octets for FCS */
 -
 -/*
 - * Packet sizes
 - *
 - * Note - lcp shouldn't be allowed to negotiate stuff outside these
 - *       limits.  See lcp.h in the pppd directory.
 - * (XXX - these constants should simply be shared by lcp.c instead
 - *       of living in lcp.h)
 - */
 -#define        PPP_MTU         1500    /* Default MTU (size of Info
 field) */
 -#define PPP_MAXMTU     65535 - (PPP_HDRLEN + PPP_FCSLEN)
 -#define PPP_MINMTU     64
  #define PPP_MRU                1500    /* default MRU = max length of
 info field */
 -#define PPP_MAXMRU     65000   /* Largest MRU we allow */
 -#define PPP_MINMRU     128

 -#define PPP_ADDRESS(p) (((u_char *)(p))[0])
 -#define PPP_CONTROL(p) (((u_char *)(p))[1])
 -#define PPP_PROTOCOL(p)        ((((u_char *)(p))[2] << 8) + ((u_char
 *)(p))[3])
 +#define PPP_ADDRESS(p) (((__u8 *)(p))[0])
 +#define PPP_CONTROL(p) (((__u8 *)(p))[1])
 +#define PPP_PROTOCOL(p)        ((((__u8 *)(p))[2] << 8) + ((__u8
 *)(p))[3])

  /*
   * Significant octet values.
 @@ -80,46 +40,38 @@
  #define PPP_IPX                0x2b    /* IPX protocol */
  #define        PPP_VJC_COMP    0x2d    /* VJ compressed TCP */
  #define        PPP_VJC_UNCOMP  0x2f    /* VJ uncompressed TCP */
 +#define PPP_MP         0x3d    /* Multilink protocol */
  #define PPP_IPV6       0x57    /* Internet Protocol Version 6 */
 +#define PPP_COMPFRAG   0xfb    /* fragment compressed below bundle */
  #define PPP_COMP       0xfd    /* compressed packet */
 +#define PPP_MPLS_UC    0x0281  /* Multi Protocol Label Switching -
 Unicast */
 +#define PPP_MPLS_MC    0x0283  /* Multi Protocol Label Switching -
 Multicast */
  #define PPP_IPCP       0x8021  /* IP Control Protocol */
  #define PPP_ATCP       0x8029  /* AppleTalk Control Protocol */
  #define PPP_IPXCP      0x802b  /* IPX Control Protocol */
  #define PPP_IPV6CP     0x8057  /* IPv6 Control Protocol */
 +#define PPP_CCPFRAG    0x80fb  /* CCP at link level (below MP bundle) */
  #define PPP_CCP                0x80fd  /* Compression Control Protocol */
 -#define PPP_ECP                0x8053  /* Encryption Control Protocol */
 +#define PPP_MPLSCP     0x80fd  /* MPLS Control Protocol */
  #define PPP_LCP                0xc021  /* Link Control Protocol */
  #define PPP_PAP                0xc023  /* Password Authentication
 Protocol */
  #define PPP_LQR                0xc025  /* Link Quality Report protocol */
  #define PPP_CHAP       0xc223  /* Cryptographic Handshake Auth. Protocol
 */
  #define PPP_CBCP       0xc029  /* Callback Control Protocol */
 -#define PPP_EAP                0xc227  /* Extensible Authentication
 Protocol */

  /*
   * Values for FCS calculations.
   */
 +
  #define PPP_INITFCS    0xffff  /* Initial FCS value */
  #define PPP_GOODFCS    0xf0b8  /* Good final FCS value */
 -#define PPP_FCS(fcs, c)        (((fcs) >> 8) ^ fcstab[((fcs) ^ (c)) &
 0xff])

 -/*
 - * A 32-bit unsigned integral type.
 - */
 -
 -#if !defined(__BIT_TYPES_DEFINED__) && !defined(_BITYPES) \
 - && !defined(__FreeBSD__) && (NS_TARGET < 40)
 -#ifdef UINT32_T
 -typedef UINT32_T       u_int32_t;
 -#else
 -typedef unsigned int   u_int32_t;
 -typedef unsigned short  u_int16_t;
 -#endif
 -#endif

  /*
   * Extended asyncmap - allows any character to be escaped.
   */
 -typedef u_int32_t      ext_accm[8];
 +
 +typedef __u32          ext_accm[8];

  /*
   * What to do with network protocol (NP) packets.
 @@ -132,46 +84,58 @@
  };

  /*
 - * Statistics.
 + * Statistics for LQRP and pppstats
   */
  struct pppstat {
 -    unsigned int ppp_ibytes;   /* bytes received */
 -    unsigned int ppp_ipackets; /* packets received */
 -    unsigned int ppp_ierrors;  /* receive errors */
 -    unsigned int ppp_obytes;   /* bytes sent */
 -    unsigned int ppp_opackets; /* packets sent */
 -    unsigned int ppp_oerrors;  /* transmit errors */
 +    __u32      ppp_discards;   /* # frames discarded */
 +
 +    __u32      ppp_ibytes;     /* bytes received */
 +    __u32      ppp_ioctects;   /* bytes received not in error */
 +    __u32      ppp_ipackets;   /* packets received */
 +    __u32      ppp_ierrors;    /* receive errors */
 +    __u32      ppp_ilqrs;      /* # LQR frames received */
 +
 +    __u32      ppp_obytes;     /* raw bytes sent */
 +    __u32      ppp_ooctects;   /* frame bytes sent */
 +    __u32      ppp_opackets;   /* packets sent */
 +    __u32      ppp_oerrors;    /* transmit errors */
 +    __u32      ppp_olqrs;      /* # LQR frames sent */
  };

  struct vjstat {
 -    unsigned int vjs_packets;  /* outbound packets */
 -    unsigned int vjs_compressed; /* outbound compressed packets */
 -    unsigned int vjs_searches; /* searches for connection state */
 -    unsigned int vjs_misses;   /* times couldn't find conn. state */
 -    unsigned int vjs_uncompressedin; /* inbound uncompressed packets */
 -    unsigned int vjs_compressedin; /* inbound compressed packets */
 -    unsigned int vjs_errorin;  /* inbound unknown type packets */
 -    unsigned int vjs_tossed;   /* inbound packets tossed because of error
 */
 +    __u32      vjs_packets;    /* outbound packets */
 +    __u32      vjs_compressed; /* outbound compressed packets */
 +    __u32      vjs_searches;   /* searches for connection state */
 +    __u32      vjs_misses;     /* times couldn't find conn. state */
 +    __u32      vjs_uncompressedin; /* inbound uncompressed packets */
 +    __u32      vjs_compressedin;   /* inbound compressed packets */
 +    __u32      vjs_errorin;    /* inbound unknown type packets */
 +    __u32      vjs_tossed;     /* inbound packets tossed because of error
 */
  };

 -struct ppp_stats {
 -    struct pppstat p;          /* basic PPP statistics */
 -    struct vjstat vj;          /* VJ header compression statistics */
 +struct compstat {
 +    __u32      unc_bytes;      /* total uncompressed bytes */
 +    __u32      unc_packets;    /* total uncompressed packets */
 +    __u32      comp_bytes;     /* compressed bytes */
 +    __u32      comp_packets;   /* compressed packets */
 +    __u32      inc_bytes;      /* incompressible bytes */
 +    __u32      inc_packets;    /* incompressible packets */
 +
 +    /* the compression ratio is defined as in_count / bytes_out */
 +    __u32       in_count;      /* Bytes received */
 +    __u32       bytes_out;     /* Bytes transmitted */
 +
 +    double     ratio;          /* not computed in kernel. */
  };

 -struct compstat {
 -    unsigned int unc_bytes;    /* total uncompressed bytes */
 -    unsigned int unc_packets;  /* total uncompressed packets */
 -    unsigned int comp_bytes;   /* compressed bytes */
 -    unsigned int comp_packets; /* compressed packets */
 -    unsigned int inc_bytes;    /* incompressible bytes */
 -    unsigned int inc_packets;  /* incompressible packets */
 -    unsigned int ratio;                /* recent compression ratio << 8
 */
 +struct ppp_stats {
 +    struct pppstat     p;      /* basic PPP statistics */
 +    struct vjstat      vj;     /* VJ header compression statistics */
  };

  struct ppp_comp_stats {
 -    struct compstat c;         /* packet compression statistics */
 -    struct compstat d;         /* packet decompression statistics */
 +    struct compstat    c;      /* packet compression statistics */
 +    struct compstat    d;      /* packet decompression statistics */
  };

  /*
 @@ -179,16 +143,8 @@
   * the last NP packet was sent or received.
   */
  struct ppp_idle {
 -    time_t xmit_idle;          /* time since last NP packet sent */
 -    time_t recv_idle;          /* time since last NP packet received */
 +    __kernel_time_t xmit_idle; /* time since last NP packet sent */
 +    __kernel_time_t recv_idle; /* time since last NP packet received */
  };

 -#ifndef __P
 -#ifdef __STDC__
 -#define __P(x) x
 -#else
 -#define __P(x) ()
 -#endif
 -#endif
 -
  #endif /* _PPP_DEFS_H_ */
 }}}

--
Ticket URL: <https://dev.openwrt.org/ticket/22661>
OpenWrt <http://openwrt.org>
Opensource Wireless Router Technology
_______________________________________________
openwrt-tickets mailing list
openwrt-tickets@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-tickets

Reply via email to