linux-headers 升级到 3.5 后 ppp 问题

ppp-2.4.5-r3已经解决该情况

Gentoo 中,最近升级 sys-kernel/linux-headers 到 3.5 后会出现 ppp-2.4.5-r2 编译不过的情况,具体的错误为

In file included from plugin.c:53:0:
/usr/include/linux/if_pppox.h:84:26: error: field ‘pppol2tp’ has incomplete type
/usr/include/linux/if_pppox.h:99:28: error: field ‘pppol2tp’ has incomplete type
make[2]: *** [plugin.o] Error 1
make[2]: Leaving directory `/var/tmp/portage/net-dialup/ppp-2.4.5-r2/work/ppp-2.4.5/pppd/plugins/rp-pppoe'
/bin/sh: line 0: exit: minconn.so: numeric argument required
make[1]: *** [all] Error 255
make[1]: Leaving directory `/var/tmp/portage/net-dialup/ppp-2.4.5-r2/work/ppp-2.4.5/pppd/plugins'
make: *** [all] Error 2
emake failed
* ERROR: net-dialup/ppp-2.4.5-r2 failed (compile phase):
*   compile faile

给之打一个补丁即可解决。http://www.city-fan.org/tips/PaulHowarth/Blog/2012-05-29 给出的补丁打不上,是因为 Gentoo 的补丁包已经包含了其中的一部分,下面我重新 diff 了一个 patch,供有相同问题的同学使用。

--- include/linux/if_pppol2tp.h.old 2012-08-05 07:25:38.665533862 +0800
+++ include/linux/if_pppol2tp.h 2012-08-05 07:26:53.122603021 +0800
@@ -32,6 +32,20 @@ struct pppol2tp_addr
    __u16 d_tunnel, d_session;  /* For sending outgoing packets */
 };
 
+/* Structure used to connect() the socket to a particular tunnel UDP
+ * socket over IPv6.
+ */
+struct pppol2tpin6_addr {
+    __kernel_pid_t  pid;            /* pid that owns the fd.
+                                     * 0 => current */
+    int     fd;                     /* FD of UDP socket to use */
+
+    __u16 s_tunnel, s_session;      /* For matching incoming packets */
+    __u16 d_tunnel, d_session;      /* For sending outgoing packets */
+
+    struct sockaddr_in6 addr;       /* IP address and port to send to */
+};
+
 /* The L2TPv3 protocol changes tunnel and session ids from 16 to 32
  * bits. So we need a different sockaddr structure.
  */
@@ -46,6 +60,17 @@ struct pppol2tpv3_addr {
        __u32 d_tunnel, d_session;      /* For sending outgoing packets */
 };
 
+struct pppol2tpv3in6_addr {
+    __kernel_pid_t  pid;            /* pid that owns the fd.
+                                     * 0 => current */
+    int     fd;                     /* FD of UDP or IP socket to use */
+
+    __u32 s_tunnel, s_session;      /* For matching incoming packets */
+    __u32 d_tunnel, d_session;      /* For sending outgoing packets */
+
+    struct sockaddr_in6 addr;       /* IP address and port to send to */
+};
+
 /* Socket options:
  * DEBUG   - bitmask of debug message categories
  * SENDSEQ - 0 => don't send packets with sequence numbers

修改的时候别忘记ebuild中的相关部分插入 epatch “${FILESDIR}/eaptls-mppe-0.99.patch”,我已经将之放入github上:https://github.com/Ihavee/overlay/blob/master/net-dialup/ppp/files/eaptls-mppe-0.99.patch