15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Copyright (C) 2009-2012 Broadcom Corporation 45738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 55738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 65738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * you may not use this file except in compliance with the License. 75738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * You may obtain a copy of the License at: 85738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 95738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * See the License for the specific language governing permissions and 155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * limitations under the License. 165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/ 185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Filename: btif_pan_internal.h 225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Description: Bluetooth pan internal 245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *******************************************************************************/ 265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BTIF_PAN_INTERNAL_H 285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTIF_PAN_INTERNAL_H 295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "btif_pan.h" 315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_types.h" 325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Constants & Macros 355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project********************************************************************************/ 365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define PAN_NAP_SERVICE_NAME "Android Network Access Point" 385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define PANU_SERVICE_NAME "Android Network User" 395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define TAP_IF_NAME "bt-pan" 405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define ETH_ADDR_LEN 6 415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef PAN_SECURITY 425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define PAN_SECURITY (BTM_SEC_IN_AUTHENTICATE | BTM_SEC_OUT_AUTHENTICATE | BTM_SEC_IN_ENCRYPT | BTM_SEC_OUT_ENCRYPT) 435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define PAN_STATE_UNKNOWN 0 465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define PAN_STATE_OPEN 1 475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define PAN_STATE_CLOSE 2 485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef PAN_ROLE_INACTIVE 495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define PAN_ROLE_INACTIVE 0 505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Type definitions and return values 555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project********************************************************************************/ 565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct eth_hdr 585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project unsigned char h_dest[ETH_ADDR_LEN]; 605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project unsigned char h_src[ETH_ADDR_LEN]; 615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project short h_proto; 625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} tETH_HDR; 635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct 655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int handle; 675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int state; 685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 protocol; 695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project BD_ADDR peer; 705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int local_role; 715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int remote_role; 725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project unsigned char eth_addr[ETH_ADDR_LEN]; 735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btpan_conn_t; 745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct 765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int btl_if_handle; 785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int btl_if_handle_panu; 795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int tap_fd; 805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int enabled; 815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int open_count; 824186b0ec7e0b7efe17c3b7cb8546ff359e099408Sharvil Nanavati int flow; // 1: outbound data flow on; 0: outbound data flow off 835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project btpan_conn_t conns[MAX_PAN_CONNS]; 844186b0ec7e0b7efe17c3b7cb8546ff359e099408Sharvil Nanavati int congest_packet_size; 854186b0ec7e0b7efe17c3b7cb8546ff359e099408Sharvil Nanavati unsigned char congest_packet[1600]; //max ethernet packet size 865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btpan_cb_t; 875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Functions 915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project********************************************************************************/ 925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern btpan_cb_t btpan_cb; 945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbtpan_conn_t *btpan_new_conn(int handle, const BD_ADDR addr, int local_role, int peer_role); 955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbtpan_conn_t *btpan_find_conn_addr(const BD_ADDR addr); 965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectbtpan_conn_t *btpan_find_conn_handle(UINT16 handle); 974186b0ec7e0b7efe17c3b7cb8546ff359e099408Sharvil Nanavativoid btpan_set_flow_control(BOOLEAN enable); 985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectint btpan_get_connected_count(void); 995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectint btpan_tap_open(void); 1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid create_tap_read_thread(int tap_fd); 1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid destroy_tap_read_thread(void); 1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectint btpan_tap_close(int tap_fd); 1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectint btpan_tap_send(int tap_fd, const BD_ADDR src, const BD_ADDR dst, UINT16 protocol, 1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project const char* buff, UINT16 size, BOOLEAN ext, BOOLEAN forward); 1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline int is_empty_eth_addr(const BD_ADDR addr) 1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project int i; 1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project for(i = 0; i < BD_ADDR_LEN; i++) 1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(addr[i] != 0) 1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return 0; 1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return 1; 1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectstatic inline int is_valid_bt_eth_addr(const BD_ADDR addr) 1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(is_empty_eth_addr(addr)) 1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return 0; 1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return addr[0] & 1 ? 0 : 1; /* Cannot be multicasting address */ 1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 123