| /***************************************************************************** |
| * 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 */ |