]> git.ozlabs.org Git - ppp.git/blobdiff - pppd/plugins/pppol2tp/openl2tp.c
Header file reorganization and cleaning up the public API for pppd version 2.5.0...
[ppp.git] / pppd / plugins / pppol2tp / openl2tp.c
index 2ba870716f62a3908f3b9098bdff4ac104e7c656..940d2bc4e59e4682880b5badb0170c8c7f4c59ff 100644 (file)
 #include <sys/ioctl.h>
 #include <sys/socket.h>
 #include <sys/un.h>
+#include <sys/time.h>
 #include <netinet/in.h>
 #include <signal.h>
 #include <linux/version.h>
 #include <linux/sockios.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdio.h>
 
 #include <pppd/pppd.h>
-#include <pppd/pathnames.h>
+#include <pppd/options.h>
 #include <pppd/fsm.h>
 #include <pppd/lcp.h>
 #include <pppd/ccp.h>
 #include <pppd/ipcp.h>
+#include <pppd/multilink.h>
 
 
 #ifndef aligned_u64
@@ -71,7 +76,9 @@ static void (*old_pppol2tp_send_accm_hook)(int tunnel_id, int session_id,
                                           uint32_t recv_accm) = NULL;
 static void (*old_pppol2tp_ip_updown_hook)(int tunnel_id, int session_id,
                                           int up) = NULL;
-static void (*old_multilink_join_hook)(void) = NULL;
+#ifdef PPP_WITH_MULTILINK
+static multilink_join_hook_fn *old_multilink_join_hook = NULL;
+#endif
 
 /*****************************************************************************
  * OpenL2TP interface.
@@ -177,8 +184,12 @@ static void openl2tp_ppp_updown_ind(int tunnel_id, int session_id, int up)
        uint16_t tid = tunnel_id;
        uint16_t sid = session_id;
        uint8_t state = up;
-       int unit = ifunit;
-       char *user_name = NULL;
+       int unit = 0;
+       char ifname[MAXNAMELEN];
+       char user_name[MAXNAMELEN];
+
+       unit = ppp_ifunit();
+       ppp_get_ifname(ifname, sizeof(ifname));
 
        if (openl2tp_fd < 0) {
                result = openl2tp_client_create();
@@ -187,9 +198,8 @@ static void openl2tp_ppp_updown_ind(int tunnel_id, int session_id, int up)
                }
        }
 
-       if (peer_authname[0] != '\0') {
-               user_name = strdup(peer_authname);
-       }
+       if (!ppp_peer_authname(user_name, sizeof(user_name)))
+               user_name[0] = '\0';
 
        msg->msg_signature = OPENL2TP_MSG_SIGNATURE;
        msg->msg_type = OPENL2TP_MSG_TYPE_PPP_UPDOWN_IND;
@@ -225,7 +235,7 @@ static void openl2tp_ppp_updown_ind(int tunnel_id, int session_id, int up)
        memcpy(&tlv->tlv_value[0], ifname, tlv->tlv_len);
        msg->msg_len += sizeof(*tlv) + ALIGN32(tlv->tlv_len);
 
-       if (user_name != NULL) {
+       if (user_name[0] != '\0') {
                tlv = (void *) &msg->msg_data[msg->msg_len];
                tlv->tlv_type = OPENL2TP_TLV_TYPE_PPP_USER_NAME;
                tlv->tlv_len = strlen(user_name) + 1;
@@ -249,9 +259,6 @@ out:
                (*old_pppol2tp_ip_updown_hook)(tunnel_id, session_id, up);
        }
 
-       if (user_name != NULL)
-               free(user_name);
-
        return;
 }
 
@@ -273,14 +280,16 @@ out:
  * multilink bundle.
  *****************************************************************************/
 
+#ifdef PPP_WITH_MULTILINK
 static void openl2tp_multilink_join_ind(void)
 {
-       if (doing_multilink && !multilink_master) {
+       if (mp_on() && !mp_master()) {
                /* send event only if not master */
                openl2tp_ppp_updown_ind(pppol2tp_tunnel_id,
                                        pppol2tp_session_id, 1);
        }
 }
+#endif
 
 /*****************************************************************************
  * Application init
@@ -294,7 +303,9 @@ void plugin_init(void)
        old_pppol2tp_ip_updown_hook = pppol2tp_ip_updown_hook;
        pppol2tp_ip_updown_hook = openl2tp_ppp_updown_ind;
 
+#ifdef PPP_WITH_MULTILINK
        old_multilink_join_hook = multilink_join_hook;
        multilink_join_hook = openl2tp_multilink_join_ind;
+#endif
 }