/*
 * Copyright (c) 2014 The Linux Foundation. All rights reserved.
 *
 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
 *
 *
 * Permission to use, copy, modify, and/or distribute this software for
 * any purpose with or without fee is hereby granted, provided that the
 * above copyright notice and this permission notice appear in all
 * copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 * PERFORMANCE OF THIS SOFTWARE.
 */

/*
 * This file was originally distributed by Qualcomm Atheros, Inc.
 * under proprietary terms before Copyright ownership was assigned
 * to the Linux Foundation.
 */

#ifndef __WLAN_HDD_KEEP_ALIVE_H__
#define __WLAN_HDD_KEEP_ALIVE_H__

/**===========================================================================

  \file  wlan_hdd_keep_alive.h

  \brief Android WLAN HDD Keep-Alive API

==========================================================================*/

/* Packet Types. */
#define WLAN_KEEP_ALIVE_UNSOLICIT_ARP_RSP     2
#define WLAN_KEEP_ALIVE_NULL_PKT              1

/* Enable or disable offload. */
#define WLAN_KEEP_ALIVE_DISABLE     0
#define WLAN_KEEP_ALIVE_ENABLE    0x1

/* Offload request. */
typedef struct
{
    v_U8_t packetType;
    v_U32_t timePeriod;
    v_U8_t  hostIpv4Addr[4];
    v_U8_t  destIpv4Addr[4];
    v_U8_t  destMacAddr [6];
    v_U8_t  bssIdx;
} tKeepAliveRequest, *tpKeepAliveRequest;

#endif // __WLAN_HDD_KEEP_ALIVE_H__
