1/***************************************************************************** 2 * Copyright (C) 2008 Katalix Systems Ltd 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License as published by 6 * the Free Software Foundation; either version 2 of the License, or 7 * (at your option) any later version. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program; if not, write to the Free Software 16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 17 * 18 *****************************************************************************/ 19 20/* 21 * OpenL2TP application event interface definition. 22 * 23 * This plugin is used by OpenL2TP to receive events from pppd. 24 * 25 * Events are used as follows:- 26 * PPP_UPDOWN_IND - tells OpenL2TP of PPP session state changes. 27 * PPP_ACCM_IND - tells OpenL2TP of PPP ACCM negotiated options 28 * 29 * Non-GPL applications are permitted to use this API, provided that 30 * any changes to this source file are made available under GPL terms. 31 */ 32 33#ifndef L2TP_EVENT_H 34#define L2TP_EVENT_H 35 36#include <stdint.h> 37 38/***************************************************************************** 39 * API definition 40 *****************************************************************************/ 41 42#define OPENL2TP_EVENT_SOCKET_NAME "/tmp/openl2tp-event.sock" 43 44#define OPENL2TP_MSG_TYPE_NULL 0 45#define OPENL2TP_MSG_TYPE_PPP_UPDOWN_IND 1 46#define OPENL2TP_MSG_TYPE_PPP_ACCM_IND 2 47#define OPENL2TP_MSG_TYPE_MAX 3 48 49enum { 50 OPENL2TP_TLV_TYPE_TUNNEL_ID, 51 OPENL2TP_TLV_TYPE_SESSION_ID, 52 OPENL2TP_TLV_TYPE_PPP_ACCM, 53 OPENL2TP_TLV_TYPE_PPP_UNIT, 54 OPENL2TP_TLV_TYPE_PPP_IFNAME, 55 OPENL2TP_TLV_TYPE_PPP_USER_NAME, 56 OPENL2TP_TLV_TYPE_PPP_STATE 57}; 58#define OPENL2TP_TLV_TYPE_MAX (OPENL2TP_TLV_TYPE_PPP_STATE + 1) 59 60#define OPENL2TP_MSG_MAX_LEN 512 61#define OPENL2TP_MSG_SIGNATURE 0x6b6c7831 62 63#define ALIGN32(n) (((n) + 3) & ~3) 64 65/* Each data field in a message is defined by a Type-Length-Value 66 * (TLV) tuplet. 67 */ 68struct openl2tp_event_tlv { 69 uint16_t tlv_type; 70 uint16_t tlv_len; 71 uint8_t tlv_value[0]; 72}; 73 74/* Messages contain a small header followed by a list of TLVs. Each 75 * TLV starts on a 4-byte boundary. 76 */ 77struct openl2tp_event_msg { 78 uint32_t msg_signature; /* OPENL2TP_MSG_SIGNATURE */ 79 uint16_t msg_type; /* OPENL2TP_MSG_TYPE_* */ 80 uint16_t msg_len; /* length of data that follows */ 81 uint8_t msg_data[0]; /* list of TLVs, each always longword aligned */ 82}; 83 84/* These structs define the data field layout of each TLV. 85 */ 86struct openl2tp_tlv_tunnel_id { 87 uint16_t tunnel_id; 88}; 89 90struct openl2tp_tlv_session_id { 91 uint16_t session_id; 92}; 93 94struct openl2tp_tlv_ppp_accm { 95 uint32_t send_accm; 96 uint32_t recv_accm; 97}; 98 99struct openl2tp_tlv_ppp_unit { 100 uint32_t unit; 101}; 102 103struct openl2tp_tlv_ppp_state { 104 uint8_t up; /* 0=down, 1=up */ 105}; 106 107struct openl2tp_tlv_ppp_ifname { 108 char ifname[0]; 109}; 110 111struct openl2tp_tlv_ppp_user_name { 112 char user_name[0]; 113}; 114 115#endif /* L2TP_EVENT_H */ 116