]> git.ozlabs.org Git - ppp.git/blobdiff - pppd/plugins/pppol2tp/l2tp_event.h
Add openl2tp plugin.
[ppp.git] / pppd / plugins / pppol2tp / l2tp_event.h
diff --git a/pppd/plugins/pppol2tp/l2tp_event.h b/pppd/plugins/pppol2tp/l2tp_event.h
new file mode 100644 (file)
index 0000000..a066ef6
--- /dev/null
@@ -0,0 +1,115 @@
+/*****************************************************************************
+ * Copyright (C) 2008 Katalix Systems Ltd
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ *****************************************************************************/
+
+/*
+ * OpenL2TP application event interface definition.
+ *
+ * This plugin is used by OpenL2TP to receive events from pppd.
+ *
+ * Events are used as follows:-
+ * PPP_UPDOWN_IND      - tells OpenL2TP of PPP session state changes.
+ * PPP_ACCM_IND                - tells OpenL2TP of PPP ACCM negotiated options
+ *
+ * Non-GPL applications are permitted to use this API, provided that
+ * any changes to this source file are made available under GPL terms.
+ */
+
+#ifndef L2TP_EVENT_H
+#define L2TP_EVENT_H
+
+#include <stdint.h>
+
+/*****************************************************************************
+ * API definition
+ *****************************************************************************/
+
+#define OPENL2TP_EVENT_SOCKET_NAME             "/tmp/openl2tp-event.sock"
+
+#define OPENL2TP_MSG_TYPE_NULL                 0
+#define OPENL2TP_MSG_TYPE_PPP_UPDOWN_IND       1
+#define OPENL2TP_MSG_TYPE_PPP_ACCM_IND         2
+#define OPENL2TP_MSG_TYPE_MAX                  3
+
+enum {
+       OPENL2TP_TLV_TYPE_TUNNEL_ID,
+       OPENL2TP_TLV_TYPE_SESSION_ID,
+       OPENL2TP_TLV_TYPE_PPP_ACCM,
+       OPENL2TP_TLV_TYPE_PPP_UNIT,
+       OPENL2TP_TLV_TYPE_PPP_IFNAME,
+       OPENL2TP_TLV_TYPE_PPP_USER_NAME,
+       OPENL2TP_TLV_TYPE_PPP_STATE
+};
+#define OPENL2TP_TLV_TYPE_MAX          (OPENL2TP_TLV_TYPE_PPP_STATE + 1)
+
+#define OPENL2TP_MSG_MAX_LEN           512
+#define OPENL2TP_MSG_SIGNATURE         0x6b6c7831
+
+#define ALIGN32(n) (((n) + 3) & ~3)
+
+/* Each data field in a message is defined by a Type-Length-Value
+ * (TLV) tuplet.
+ */
+struct openl2tp_event_tlv {
+       uint16_t        tlv_type;
+       uint16_t        tlv_len;
+       uint8_t         tlv_value[0];
+};
+
+/* Messages contain a small header followed by a list of TLVs. Each
+ * TLV starts on a 4-byte boundary.
+ */
+struct openl2tp_event_msg {
+       uint32_t        msg_signature;  /* OPENL2TP_MSG_SIGNATURE */
+       uint16_t        msg_type;       /* OPENL2TP_MSG_TYPE_* */
+       uint16_t        msg_len;        /* length of data that follows */
+       uint8_t         msg_data[0];    /* list of TLVs, each always longword aligned */
+};
+
+/* These structs define the data field layout of each TLV.
+ */
+struct openl2tp_tlv_tunnel_id {
+       uint16_t        tunnel_id;
+};
+
+struct openl2tp_tlv_session_id {
+       uint16_t        session_id;
+};
+
+struct openl2tp_tlv_ppp_accm {
+       uint32_t        send_accm;
+       uint32_t        recv_accm;
+};
+
+struct openl2tp_tlv_ppp_unit {
+       uint32_t        unit;
+};
+
+struct openl2tp_tlv_ppp_state {
+       uint8_t         up;             /* 0=down, 1=up */
+};
+
+struct openl2tp_tlv_ppp_ifname {
+       char            ifname[0];
+};
+
+struct openl2tp_tlv_ppp_user_name {
+       char            user_name[0];
+};
+
+#endif /* L2TP_EVENT_H */