1*84e33947SAndroid Build Coastguard Worker /* 2*84e33947SAndroid Build Coastguard Worker * Copyright (C) 2020 The Android Open Source Project 3*84e33947SAndroid Build Coastguard Worker * 4*84e33947SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*84e33947SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*84e33947SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*84e33947SAndroid Build Coastguard Worker * 8*84e33947SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*84e33947SAndroid Build Coastguard Worker * 10*84e33947SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*84e33947SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*84e33947SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*84e33947SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*84e33947SAndroid Build Coastguard Worker * limitations under the License. 15*84e33947SAndroid Build Coastguard Worker */ 16*84e33947SAndroid Build Coastguard Worker 17*84e33947SAndroid Build Coastguard Worker #ifndef CHPP_CLIENT_LOOPBACK_H_ 18*84e33947SAndroid Build Coastguard Worker #define CHPP_CLIENT_LOOPBACK_H_ 19*84e33947SAndroid Build Coastguard Worker 20*84e33947SAndroid Build Coastguard Worker #include <stdbool.h> 21*84e33947SAndroid Build Coastguard Worker #include <stddef.h> 22*84e33947SAndroid Build Coastguard Worker #include <stdint.h> 23*84e33947SAndroid Build Coastguard Worker 24*84e33947SAndroid Build Coastguard Worker #include "chpp/app.h" 25*84e33947SAndroid Build Coastguard Worker 26*84e33947SAndroid Build Coastguard Worker #ifdef __cplusplus 27*84e33947SAndroid Build Coastguard Worker extern "C" { 28*84e33947SAndroid Build Coastguard Worker #endif 29*84e33947SAndroid Build Coastguard Worker 30*84e33947SAndroid Build Coastguard Worker /** 31*84e33947SAndroid Build Coastguard Worker * Loopback Test Results. 32*84e33947SAndroid Build Coastguard Worker */ 33*84e33947SAndroid Build Coastguard Worker struct ChppLoopbackTestResult { 34*84e33947SAndroid Build Coastguard Worker enum ChppAppErrorCode error; // Indicates success or error type 35*84e33947SAndroid Build Coastguard Worker size_t requestLen; // Length of the loopback request datagram, including app 36*84e33947SAndroid Build Coastguard Worker // header 37*84e33947SAndroid Build Coastguard Worker size_t responseLen; // Length of the loopback response datagram, including 38*84e33947SAndroid Build Coastguard Worker // app header 39*84e33947SAndroid Build Coastguard Worker size_t firstError; // Location of the first incorrect byte in the response 40*84e33947SAndroid Build Coastguard Worker // datagram 41*84e33947SAndroid Build Coastguard Worker size_t byteErrors; // Number of incorrect bytes in the response datagram 42*84e33947SAndroid Build Coastguard Worker uint64_t rttNs; // Round trip time 43*84e33947SAndroid Build Coastguard Worker }; 44*84e33947SAndroid Build Coastguard Worker 45*84e33947SAndroid Build Coastguard Worker /** 46*84e33947SAndroid Build Coastguard Worker * Minimum header length for a loopback packet. Everything afterwards is 47*84e33947SAndroid Build Coastguard Worker * considered a payload and is looped back. 48*84e33947SAndroid Build Coastguard Worker */ 49*84e33947SAndroid Build Coastguard Worker #define CHPP_LOOPBACK_HEADER_LEN sizeof(struct ChppAppHeader) 50*84e33947SAndroid Build Coastguard Worker 51*84e33947SAndroid Build Coastguard Worker /************************************************ 52*84e33947SAndroid Build Coastguard Worker * Public functions 53*84e33947SAndroid Build Coastguard Worker ***********************************************/ 54*84e33947SAndroid Build Coastguard Worker 55*84e33947SAndroid Build Coastguard Worker /** 56*84e33947SAndroid Build Coastguard Worker * Initializes the client. 57*84e33947SAndroid Build Coastguard Worker * 58*84e33947SAndroid Build Coastguard Worker * @param appState Application layer state. 59*84e33947SAndroid Build Coastguard Worker */ 60*84e33947SAndroid Build Coastguard Worker void chppLoopbackClientInit(struct ChppAppState *appState); 61*84e33947SAndroid Build Coastguard Worker 62*84e33947SAndroid Build Coastguard Worker /** 63*84e33947SAndroid Build Coastguard Worker * Deinitializes the client. 64*84e33947SAndroid Build Coastguard Worker * 65*84e33947SAndroid Build Coastguard Worker * @param appState Application layer state. 66*84e33947SAndroid Build Coastguard Worker */ 67*84e33947SAndroid Build Coastguard Worker void chppLoopbackClientDeinit(struct ChppAppState *appState); 68*84e33947SAndroid Build Coastguard Worker 69*84e33947SAndroid Build Coastguard Worker /** 70*84e33947SAndroid Build Coastguard Worker * Dispatches an Rx Datagram from the transport layer that is determined to 71*84e33947SAndroid Build Coastguard Worker * be for the CHPP Loopback Client. 72*84e33947SAndroid Build Coastguard Worker * 73*84e33947SAndroid Build Coastguard Worker * @param appState Application layer state. 74*84e33947SAndroid Build Coastguard Worker * @param response Input (response) datagram. Cannot be null. 75*84e33947SAndroid Build Coastguard Worker * @param len Length of input data in bytes. 76*84e33947SAndroid Build Coastguard Worker */ 77*84e33947SAndroid Build Coastguard Worker bool chppDispatchLoopbackServiceResponse(struct ChppAppState *appState, 78*84e33947SAndroid Build Coastguard Worker const uint8_t *response, size_t len); 79*84e33947SAndroid Build Coastguard Worker 80*84e33947SAndroid Build Coastguard Worker /** 81*84e33947SAndroid Build Coastguard Worker * Initiates a CHPP service loopback from the client side. 82*84e33947SAndroid Build Coastguard Worker * Note that only one loopback test may be run at any time on each client. 83*84e33947SAndroid Build Coastguard Worker * 84*84e33947SAndroid Build Coastguard Worker * @param appState Application layer state. 85*84e33947SAndroid Build Coastguard Worker */ 86*84e33947SAndroid Build Coastguard Worker struct ChppLoopbackTestResult chppRunLoopbackTest(struct ChppAppState *appState, 87*84e33947SAndroid Build Coastguard Worker const uint8_t *buf, 88*84e33947SAndroid Build Coastguard Worker size_t len); 89*84e33947SAndroid Build Coastguard Worker 90*84e33947SAndroid Build Coastguard Worker #ifdef __cplusplus 91*84e33947SAndroid Build Coastguard Worker } 92*84e33947SAndroid Build Coastguard Worker #endif 93*84e33947SAndroid Build Coastguard Worker 94*84e33947SAndroid Build Coastguard Worker #endif // CHPP_CLIENT_LOOPBACK_H_ 95