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