blob: 8f8775f919c3fe44b6c5f7aebcee791f3a9c94d4 [file] [log] [blame]
/*
* Copyright (C) 2023, The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "utils.h"
#include <errno.h>
#include <time.h>
#include "stats_statsdsocketlog.h"
int64_t get_elapsed_realtime_ns() {
struct timespec t;
t.tv_sec = t.tv_nsec = 0;
clock_gettime(CLOCK_BOOTTIME, &t);
return (int64_t)t.tv_sec * 1000000000LL + t.tv_nsec;
}
int toSocketLossError(int errno_code) {
using namespace android::os::statsdsocket;
// compile time checks
static_assert(STATS_SOCKET_LOSS_REPORTED__ERRORS__SOCKET_LOSS_ERROR_ON_WRITE_EPERM == -EPERM,
"Socket Loss Error codes mapping function needs to be updated");
static_assert(STATS_SOCKET_LOSS_REPORTED__ERRORS__SOCKET_LOSS_ERROR_ON_WRITE_EINTR == -EINTR,
"Socket Loss Error codes mapping function needs to be updated");
static_assert(STATS_SOCKET_LOSS_REPORTED__ERRORS__SOCKET_LOSS_ERROR_ON_WRITE_EIO == -EIO,
"Socket Loss Error codes mapping function needs to be updated");
static_assert(STATS_SOCKET_LOSS_REPORTED__ERRORS__SOCKET_LOSS_ERROR_ON_WRITE_EBADF == -EBADF,
"Socket Loss Error codes mapping function needs to be updated");
static_assert(
STATS_SOCKET_LOSS_REPORTED__ERRORS__SOCKET_LOSS_ERROR_ON_WRITE_EAGAIN == -EAGAIN,
"Socket Loss Error codes mapping function needs to be updated"); // same as EWOULDBLOCK
static_assert(STATS_SOCKET_LOSS_REPORTED__ERRORS__SOCKET_LOSS_ERROR_ON_WRITE_EFAULT == -EFAULT,
"Socket Loss Error codes mapping function needs to be updated");
static_assert(STATS_SOCKET_LOSS_REPORTED__ERRORS__SOCKET_LOSS_ERROR_ON_WRITE_ENODEV == -ENODEV,
"Socket Loss Error codes mapping function needs to be updated");
static_assert(STATS_SOCKET_LOSS_REPORTED__ERRORS__SOCKET_LOSS_ERROR_ON_WRITE_EINVAL == -EINVAL,
"Socket Loss Error codes mapping function needs to be updated");
static_assert(STATS_SOCKET_LOSS_REPORTED__ERRORS__SOCKET_LOSS_ERROR_ON_WRITE_EFBIG == -EFBIG,
"Socket Loss Error codes mapping function needs to be updated");
static_assert(STATS_SOCKET_LOSS_REPORTED__ERRORS__SOCKET_LOSS_ERROR_ON_WRITE_ENOSPC == -ENOSPC,
"Socket Loss Error codes mapping function needs to be updated");
static_assert(STATS_SOCKET_LOSS_REPORTED__ERRORS__SOCKET_LOSS_ERROR_ON_WRITE_EPIPE == -EPIPE,
"Socket Loss Error codes mapping function needs to be updated");
static_assert(STATS_SOCKET_LOSS_REPORTED__ERRORS__SOCKET_LOSS_ERROR_ON_WRITE_EDESTADDRREQ ==
-EDESTADDRREQ,
"Socket Loss Error codes mapping function needs to be updated");
static_assert(STATS_SOCKET_LOSS_REPORTED__ERRORS__SOCKET_LOSS_ERROR_ON_WRITE_EDQUOT == -EDQUOT,
"Socket Loss Error codes mapping function needs to be updated");
switch (errno_code) {
case EPERM:
case EINTR:
case EIO:
case EBADF:
case EAGAIN:
case EFAULT:
case ENODEV:
case EINVAL:
case EFBIG:
case ENOSPC:
case EPIPE:
case EDESTADDRREQ:
case EDQUOT:
return -errno_code;
default:
return STATS_SOCKET_LOSS_REPORTED__ERRORS__SOCKET_LOSS_ERROR_UNKNOWN;
}
}