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 * 25ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 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 "bt_types.h" 316bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#include "btif_pan.h" 325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 346bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Constants & Macros 35ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 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" 406bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#define ETH_ADDR_LEN 6 416ba8fda60a9137a9f53f7e14edd87184610744fcHemant Gupta#define TAP_MAX_PKT_WRITE_LEN 2000 425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef PAN_SECURITY 436bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#define PAN_SECURITY \ 446bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson (BTM_SEC_IN_AUTHENTICATE | BTM_SEC_OUT_AUTHENTICATE | BTM_SEC_IN_ENCRYPT | \ 456bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson BTM_SEC_OUT_ENCRYPT) 465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 486bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#define PAN_STATE_UNKNOWN 0 496bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#define PAN_STATE_OPEN 1 506bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson#define PAN_STATE_CLOSE 2 515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef PAN_ROLE_INACTIVE 525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define PAN_ROLE_INACTIVE 0 535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 566bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Type definitions and return values 57ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 596bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsontypedef struct eth_hdr { 606bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson unsigned char h_dest[ETH_ADDR_LEN]; 616bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson unsigned char h_src[ETH_ADDR_LEN]; 626bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson short h_proto; 635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} tETH_HDR; 645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 656bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsontypedef struct { 666bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson int handle; 676bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson int state; 686bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson uint16_t protocol; 696bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson BD_ADDR peer; 706bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson int local_role; 716bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson int remote_role; 726bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson unsigned char eth_addr[ETH_ADDR_LEN]; 735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btpan_conn_t; 745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 756bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsontypedef struct { 766bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson int btl_if_handle; 776bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson int btl_if_handle_panu; 786bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson int tap_fd; 796bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson int enabled; 806bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson int open_count; 816bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson int flow; // 1: outbound data flow on; 0: outbound data flow off 826bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson btpan_conn_t conns[MAX_PAN_CONNS]; 836bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson int congest_packet_size; 846bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson unsigned char congest_packet[1600]; // max ethernet packet size 855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} btpan_cb_t; 865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 886bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Functions 89ee96a3c60fca590d38025925c072d264e06493c4Myles Watson ******************************************************************************/ 905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern btpan_cb_t btpan_cb; 926bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonbtpan_conn_t* btpan_new_conn(int handle, const BD_ADDR addr, int local_role, 936bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson int peer_role); 946bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonbtpan_conn_t* btpan_find_conn_addr(const BD_ADDR addr); 956bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonbtpan_conn_t* btpan_find_conn_handle(uint16_t handle); 96b7f64bc45dec7f7fec74ceb04874f322b9434bbfMarie Janssenvoid btpan_set_flow_control(bool enable); 975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectint btpan_get_connected_count(void); 985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectint btpan_tap_open(void); 995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid create_tap_read_thread(int tap_fd); 1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid destroy_tap_read_thread(void); 1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectint btpan_tap_close(int tap_fd); 1026bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonint btpan_tap_send(int tap_fd, const BD_ADDR src, const BD_ADDR dst, 1036bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson uint16_t protocol, const char* buff, uint16_t size, bool ext, 1046bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson bool forward); 1056bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson 1066bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonstatic inline int is_empty_eth_addr(const BD_ADDR addr) { 1076bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson int i; 1086bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson for (i = 0; i < BD_ADDR_LEN; i++) 1096bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson if (addr[i] != 0) return 0; 1106bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson return 1; 1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1136bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonstatic inline int is_valid_bt_eth_addr(const BD_ADDR addr) { 1146bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson if (is_empty_eth_addr(addr)) return 0; 1156bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson return addr[0] & 1 ? 0 : 1; /* Cannot be multicasting address */ 1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 119