/*
 * Copyright (c) 2012, 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.
 */

#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

  Copyright 2011 (c) QUALCOMM Incorporated. All Rights Reserved.
  QUALCOMM Proprietary and Confidential.

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

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

